[JAVA] Notez que GoogleMap.getProjection dans l'API Google Maps Android n'est pas un singleton

C'est l'histoire de l'API Google Maps Android utilisée lors de l'utilisation de Google Maps sur Android.

L'une des fonctions de ce SDK est "la conversion mutuelle entre les coordonnées cartographiques (latitude et longitude) et les coordonnées d'écran". Avec ça,

Donc, pour ce faire, appelez fromScreenLocation ou toScreenLocation avec une instance de la classe Projection '' dans GoogleMap.getProjection () ''.

Cela ne ressemble-t-il pas à l'instance que vous pouvez obtenir avec ce GoogleMap.getProjection () '', une tonne unique, ou la même instance chaque fois que vous l'obtenez? Comme avec GoogleMap.getUiSettings () ''. L'écriture de map.getProjection (). FromScreenLocation est terne, alors voulez-vous l'obtenir une seule fois lors de la génération d'une carte et de la réutiliser?

private Projection _proj;

@Override
public void onMapReady (GoogleMap map) {
    //Il fut un temps où je pensais que je devais l'obtenir en premier et le réutiliser ...
    _proj = map.getProjection();
}

Cependant, c'est une erreur.

À titre d'essai, écrivez "Si la position de la carte change, obtenez la latitude et la longitude du coin supérieur gauche (0, 0) de l'écran".

private Projection _proj;

@Override
public void onMapReady (GoogleMap map) {
    //Il fut un temps où je pensais que je devais l'obtenir en premier et le réutiliser ...
    _proj = map.getProjection();

    //Événement lorsque la caméra est complètement déplacée et inactive (avec RetroLambda)
    map.setOnCameraIdleListener(() -> {
        //Obtenez la latitude et la longitude de l'origine de l'écran
        LatLng latlng = _proj.fromScreenLocation(new Point(0, 0));
        Log.d("TEST", "lat:" + latlng.latitude + ", long:" + latlng.longitude); 
    });
}

Faire défiler la carte appelle le gestionnaire pour `` setOnCameraIdleListener '', mais je n'obtiens pas les résultats escomptés. Je pense que c'est probablement moins ou proche de zéro.

Pour obtenir le bon résultat

map.setOnCameraIdleListener(() -> {
    //Obtenez la latitude et la longitude de l'origine de l'écran
    Projection prj = map.getProjection();
    LatLng latlng = prj.fromScreenLocation(new Point(0, 0));
    Log.d("TEST", "lat:" + latlng.latitude + ", long:" + latlng.longitude); 
});

Vous devez obtenir une instance de «Projection» "actuelle", comme.

Jetons maintenant un œil à la description de la référence API.

The Projection returned is a snapshot of the current projection, and will not automatically update when the camera moves. As this operation is expensive, you should get the projection only once per screen. Google Maps uses the Mercator projection to create its maps from geographic data and convert points on the map into geographic coordinates.

The Projection returned is a snapshot of the current projection, and will not automatically update when the camera moves.

C'était écrit fermement!

La projection est une méthode de projection (projection de Mercator), et comme la méthode de projection (= formule de projection) est immuable, je ne pensais pas qu'un instantané serait créé à chaque fois qu'il était pris. Je n'ai pas remarqué ce comportement et j'ai continué à m'inquiéter à ce sujet pendant environ 3 heures.

La leçon était que si vous étiez inquiet, jetons les stéréotypes et passons en revue Kihon. Cependant, si j'ose dire cela, si le nom de la méthode était quelque chose comme `` getCurrentProjection () '', cela n'aurait peut-être pas été l'idée de "l'obtenir en premier et de l'utiliser à nouveau". En tant que personne qui crée SDK, je voulais envisager de nommer.

Recommended Posts

Notez que GoogleMap.getProjection dans l'API Google Maps Android n'est pas un singleton
Créez une carte thermique de tweet avec l'API Google Maps
À propos de l'événement de changement de caméra de l'API Google Maps Android
[Google Maps API] La carte n'est pas affichée et devient vide [Rails]
Classe qui atteint l'API de DMM
Trouvez un bâtiment de la même hauteur que Shin Godzilla sur Google Earth
Il y a un modèle que le programme ne s'est pas arrêté lors de l'utilisation du thread Python
Amélioration approfondie de l'efficacité! Le nom n'est pas la seule "évolution du court-circuit" qui a un nom cool.
L'histoire selon laquelle pyenv n'a pas passé la commande d'exécution python PATH
Une note sur l'utilisation de l'API Facebook avec le SDK Python
Création d'un script Python prenant en charge l'API e-Stat (ver.2)
Y a-t-il un biais dans les nombres qui apparaissent dans les nombres de Fibonacci?
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
[Affichage de la carte] Affichez une carte à partir de l'adresse enregistrée par l'utilisateur à l'aide de l'API JavaScript de Google Maps et de l'API de géocodage!
La liste Python n'est pas une liste
L'image est Namekuji
Lors de l'incrémentation de la valeur d'une clé qui n'existe pas
Jouez des sons en Python en supposant que le clavier est un clavier de piano
L'histoire du travail de sortie de l'application que Google ne raconte pas
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
La somme de contrôle NVM n'est pas valide, une solution au problème que le LAN câblé d'Intel ne reconnaît pas sous Linux.
Le problème qui me donne du chocolat ne se fait pas même si l'analyse de correspondance se fait avec l'API COTOHA