2010-05-29 4 views
3

Lorsqu'un utilisateur déplace la carte Google, je souhaite afficher automatiquement les éléments dans la zone de visualisation de l'utilisateur. Comment puis-je afficher rapidement et efficacement les articles? J'ai une compréhension de base de l'appel de la méthode getBounds() chaque fois que l'utilisateur déplace la carte, mais je ne suis pas sûr de la façon dont je peux efficacement chercher et obtenir dans ma base de données les éléments du courant. viewport. Y at-il moyen plus facile et plus rapide de le faire?Comment afficher efficacement des éléments sur la carte Google dans la plage de visualisation de l'utilisateur?

Répondre

1

En plus de Geek's answer, vous pouvez également envisager de créer un index sur un Geohash à la place. Vous pouvez également utiliser une base de données avec des fonctionnalités spatial indexing. MySQL, PostgreSQL et SQL Server 2008 ont tous des caractéristiques géo-spatiales (natives ou via des extensions), qui incluent l'indexation spatiale.

+0

Les capacités d'indexation spatiale semblent intéressantes, aucune idée de combien la performance est améliorée en utilisant ce type d'indexation? – Cory

+0

@Cory: Cela dépend du nombre d'objets que vous aurez sur la carte. Si vous n'avez qu'une centaine de points, je ne pense pas que cela aura beaucoup d'importance. Vous pouvez toujours utiliser un index sur les champs de latitude et de longitude comme suggéré par Geek dans l'autre réponse, réduire le temps de recherche et éviter un balayage de table complet. Si d'un autre côté vous aurez des milliers ou des millions de points, ou si vous allez aussi afficher des sentiers, des lignes et des polygones, alors les index spatiaux pourraient devenir utiles. –

1

J'ai eu le même problème. La façon dont j'ai essayé d'atténuer le problème est la suivante.

  • magasin la latitude/longitude dans la base de données décimales
  • index de vente sur les longues colonnes et lat
  • utiliser une requête comme SELECT * FROM table WHERE long > $long_left AND long < $long_right AND lat > $lat_bottom AND lat < $lat_top

Je vous suggère d'utiliser également MarkerManager pour gérer la marqueurs si vous attendez un grand nombre de marqueurs car vous pouvez définir les marqueurs pour qu'ils s'affichent uniquement à certains niveaux de zoom.

stocker la latitude/longitude en décimales permet de la base de données comparer les valeurs correctement au lieu d'avoir à convertir les valeurs avant de les comparer

index sont des éléments clés des bases de données (ha jeu de mots :-)) les utiliser correctement, mais n » t surutiliser les

Questions connexes