Google Maps API v2: LatLngBounds de CameraPosition
Est-il un moyen simple d'obtenir la LatLngBounds
de la carte visible à partir d'un CameraPosition
avec Android, Google Maps API v2 donc que je peux utiliser le OnCameraChangeListener
pour aller chercher de nouvelles données pour les marqueurs.
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
LatLngBounds bounds = ?;
fetchNewData(bounds);
}
});
Vous devez vous connecter pour publier un commentaire.
Mise à jour depuis le mois d'août 2016
Résumé la corriger répondre à ce problème est l'utilisation de la nouvelle
onCameraIdle
, au lieu deOnCameraChangeListener
, qui est maintenant obsolète. Lire soufflet comment.Maintenant, vous pouvez écouter "dragEnd"-comme événement, et même d'autres événements sur la nouvelle version de Google Maps pour Android.
Comme indiqué dans le docs, vous pouvez éviter le problème des multiples (aka "plusieurs") appelle de la
OnCameraChangeListener
en utilisant les nouveaux auditeurs. Par exemple, vous êtes maintenant en mesure de vérifier ce qui est la raison derrière la caméra déplacer, ce qui est l'idéal pour couple avec unfetchData
problème comme demandé. Le code suivant est la plupart du temps prises directement à partir de la documentation. Encore une chose, il est nécessaire d'utiliser Google Play Services 9.4.Solution de contournement pour une solution efficace avant le mois d'août 2016
Que la question est correctement répondu, je voudrais ajouter que sur une probable prochaine question.
Le problème se pose lors de l'utilisation de
OnCameraChangeListener
pour récupérer des données à partir du serveur en raison de la fréquence à laquelle cette méthode est déclenchée.Il y a un question rapporté comment follement fréquente de cette méthode est déclenché lors d'une simple carte de glissement, ainsi, dans l'exemple de la question, il déclenche
fetchData
séquentielles multiples fois pour très peu d'caméra change, même sans caméra change, oui, il arrive que la caméra limites n'ont pas changé, mais la méthode est déclenché.Cela pourrait avoir une incidence sur le côté serveur de performances et de perdre beaucoup de dispositifs de ressources par l'extraction des données de manière séquentielle des dizaines de fois à partir du serveur.
Vous pouvez trouver dans ce lien des solutions de contournement pour ce problème, mais il n'est pas encore officiel pour le faire, par exemple, à l'aide d'un souhaitable
dragEnd
, oucameraChangeEnd
rappels.Un exemple ci-dessous, en fonction de celles à partir de là, est de savoir comment je éviter le problème susmentionné en jouant avec l'intervalle de temps de l'appel et de rejeter les appels avec les mêmes limites.
null
pour le champcurrentCameraBounds
.onCameraIdle
est appelé automatiquement si je ne touche même pas la carte, quelqu'un peut-il m'aiderCameraUpdate location = CameraUpdateFactory.newLatLngZoom( latlng, 12); mMap.animateCamera(location);
à l'intérieur deonCameraIdle
que de faire récursive.Vous ne pouvez pas obtenir la LatLngBounds de la CameraPosition, mais vous pouvez les obtenir facilement de l'GoogleMap.
mMap.getProjection()
oumMap.getVisibleRegion()
indépendants les uns des autres.