2008-10-06 10 views
7

J'essaie de trouver quelque chose, de préférence F/OSS, qui peut générer une superposition de Google Maps à partir de données KML et/ou KMZ.Google Maps Superpositions

Nous avons un site d'événements sur lequel nous travaillons pour accueillir environ 16 000 marqueurs de position l'année dernière et nous en aurons probablement au moins autant cette année. L'année dernière, la société qui avait réalisé le site venait de transmettre les données KML directement à l'API de gMaps et de laisser place à tous les marqueurs côté client. Évidemment, cela est devenu un cauchemar de la performance et avait tendance à «geler» les anciens navigateurs (ou du moins à apparaître figé pendant plusieurs minutes à la fois).

Idéalement, ce script côté serveur prendrait le KML, le centre lat/lon de la carte et le niveau de zoom de la carte et fusionnerait de manière appropriée tous les marqueurs de lieu visibles dans une seule superposition GIF ou PNG.

Toute recommandation ou recommandation à ce sujet serait grandement appréciée.

MISE À JOUR 10/8/2008 - La plupart des informations que je suis venu à travers ici et d'autres endroits semble indiquer que la diminution du nombre de points sur la carte est la voie à suivre (par exemple en utilisant un marqueur représenter plusieurs lors de la visualisation à partir d'un niveau d'altitude/zoom plus élevé). Bien que ce soit probablement une bonne approche dans certains cas, cela ne fonctionnera pas ici. Nous cherchons l'impact visuel d'une carte américaine avec plusieurs milliers de marqueurs. Une option que j'ai explorée est un service appelé PushPin, qui, lorsqu'il est alimenté (vraisemblablement), créera, côté serveur, une superposition qui aura tous les points visibles (basés sur le centre/lon et le niveau de zoom) sur une seule image Ainsi, au lieu d'effectuer plusieurs milliers de manipulations DOM côté client, nous fusionnons tous ces marqueurs en un seul côté serveur d'image et effectuons une seule manipulation DOM sur le client. Le service PushPin est vraiment très pratique et fonctionnerait sans aucun doute si ce n'est pour les coûts associés. Nous sommes vraiment à la recherche de quelque chose F/OSS qui nous pourrait fonctionner côté serveur pour générer nous-mêmes cette superposition.

Répondre

0

Ceci est difficile. Vous pouvez utiliser custom tilesets with Google Maps, mais vous avez toujours besoin d'un moyen de générer les tuiles (autre que manuellement).

Je crains que ce soit tout ce que j'ai =/

+0

oui, c'est certainement mon idée de la superposition, mais ce que j'espère spécifiquement, c'est quelque chose de côté serveur qui générera la superposition basée sur le KML, le centre lat/lon et le niveau de zoom. – theraccoonbear

4

Vous pouvez regarder dans quelque chose comme Geoserver ou Mapserver. Ils sont des clones de cartes Google, et beaucoup plus. Vous pouvez générer une superposition que vous aimez, et Geoserver (je pense que mapserver le fait aussi) peut vous donner des sorties KML, PDF, png et autres pour mixer vos cartes, ou vous pouvez générer toute la carte par vous-même, mais cela prend du temps.

+0

Ceux-ci semblent intéressants, je verrai s'ils fonctionneront pour nos buts. – theraccoonbear

+1

Nous regarderons avec défi GeoServer et GeoWebCache! – Adrian

+4

Défiant? "Essaye juste de nous arrêter !!!" ;) – DanM

1

Je ne sais pas comment vous êtes avec votre projet, mais peut-être vous pouvez jeter un oeil à GeoDjango? Cette version modifiée de Django inclut toutes sortes d'outils pour stocker les emplacements; convertir les coordonnées et afficher des cartes, le moyen le plus simple. Bien sûr, vous avez besoin d'une expérience Python et d'un serveur pour l'exécuter, mais une fois que vous avez le coup de Django, ça marche vite et bien.

Si vous voulez juste une solution à votre problème, essayez de regrouper vos résultats à des niveaux de zoom inférieurs, un bon exemple de cette implémentation peut être trouvé here.

+0

Je ne sais pas si Django/Python serait un briseur d'affaire, mais je n'ai jamais travaillé avec les deux technologies auparavant. Le noyau de ce site va être installé dans Drupal, à la demande du client, donc un backend PHP serait une idée. Je vais vérifier cette option cependant. – theraccoonbear

0

OpenLayers est une superbe interface javascript pour plusieurs services de cartographie ou vos propres serveurs de cartes. La version 2.7 vient juste de sortir, ce qui ajoute des fonctionnalités et des contrôles assez étonnants.

2

Vous ne savez pas pourquoi vous voulez passer à une superposition GIF/PNG, vous pouvez le faire directement dans KML.Je suppose que la plupart de vos problèmes de performance ont été provoqués par des points en dehors de la vue actuelle de l'utilisateur, à savoir que l'utilisateur regarde New York mais que vous avez des points à Los Angeles qui gaspillent de la mémoire parce qu'ils ne sont pas visibles. Si vous avez vraiment 16 000 points qui sont tous visibles à la fois pour un typique alors oui vous devrez poursuivre une stratégie différente.

Si le cas ci-dessus, la procédure serait la suivante:

  1. Déterminer le centre & étendue de la carte
  2. Étant donné que vous devriez être en mesure de calculer le lat/long de la partie supérieure gauche et coins inférieurs droit de la carte.
  3. Parcourez votre base de données de points et vérifiez chaque emplacement par rapport aux deux coins. La longitude doit être plus grande (signée!) Que la longitude supérieure gauche et inférieure à la longitude inférieure droite. La latitude doit être inférieure à la latitude supérieure gauche (signée!) Et supérieure à la latitude inférieure droite. Juste des comparaisons simples, pas de calculs fantaisie requis ici.
  4. Affiche les points correspondants à un fichier KML temporaire pour l'utilisateur.
  5. Vous pouvez générer KML directly into Google Maps et le laisser mapper, ou vous pouvez utiliser Javascript maps API pour charger les points via KML.

Il ne résoudra peut-être pas votre problème ici, mais pour les questions connexes, vous pouvez également consulter le Google Static Maps API. Cela vous permet de créer un fichier image statique avec des marqueurs qui se chargeront très rapidement, mais qui n'auront pas l'interactivité d'une carte Google classique. En raison de la façon dont l'API est conçue, cependant, elle ne peut pas gérer n'importe où près de 16 000 points, donc vous devrez toujours filtrer vers la vue.

+0

Le plan est d'avoir une vue au niveau national montrant l'ensemble complet de données, donc oui, nous devons vraiment faire tous les points apparaissent simultanément. Nous allons autoriser le zoom et nous pouvons travailler avec des rayons de vue de niveau de zoom pour utiliser des ensembles de données KML plus petits lorsque l'utilisateur effectue des zooms vers le bas, mais nous devons être en mesure de tout afficher. – theraccoonbear

+0

J'adopterais une stratégie consistant à trouver des grappes d'événements que vous pouvez réduire en une punaise sur la carte nationale, puis en hyperlien vers une vue de cette ville. La méthode serait similaire mais vous auriez besoin d'utiliser une version de la formule de Haversine pour trouver des points qui se trouvaient à "x" miles. –