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