#1 Wed 23 July 2008 18:29
- fabrice.marteau
- Participant occasionnel
- Lieu: Marseille
- Date d'inscription: 5 Jul 2007
- Messages: 11
Afficher environ 1500 point sur une carte...
Bonjour,
Je fais un stage dans une université à Londres. Je dois améliorer l'affichage des cartes sur le site http://greenmap.london21.org/
Le but est de pouvoir afficher un grand nombre de marqueurs (1500 environ) sur la zone de Londres.
Pour l'instant, le site n'affiche qu'une poignée d'items tirés aléatoirement (15 pour Internet Explorer et 50 pour Firefox) pour ne pas faire saturer les navigateurs.
Le site utilise l'API Google Maps, les points sont stockés dans une base MySQL et streamés au format KML via le DOM.
J'ai déjà essayé d'afficher l'intégralité des points en même temps:
* récupération des coordonnées dans le KML
* création d'objets SVG ou VML (suivant le navigateur utilisé: FF ou IE)
Le résultat est très lent...la page met 30 secondes à charger et les déplacements/zoom sont une corvée...
Je viens de tenter d'utiliser Open Layers en chargeant le KML entier, c'est un peu mieux, mais toujours pas supportable!
J'ai pensé à remplacer la carte au zoom minimal par une image, mais si on pouvait garder une interactivité sur les points, ça serait vraiment mieux!
Si quelqu'un a déjà eu à faire à ce genre de problème ou connaît une méthode adaptée...je le remercie d'avance pour les conseils qu'il pourrait me donner!
@+
Hors ligne
#2 Wed 23 July 2008 21:38
Re: Afficher environ 1500 point sur une carte...
Bonjour,
Si tu veux afficher tout tes points, tu peux effectivement faire une image (couche WMS) et mettre en place un événement onClick pour récupérer les coordonnées du point et faire une requête sur ta page en AJAX et afficher les résultats dans un pop-up.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Thu 24 July 2008 10:44
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: Afficher environ 1500 point sur une carte...
Hello Fabrice,
Serais-tu par hasard en stage au "DEPARTMENT OF CIVIL, ENVIRONMENTAL & GEOMATIC ENGINEERING" Imperial College London ? J'avais vu une offre d'emploi de leur part il y a quelques mois pour bosser sur le re-design de ce site.
Pour repondre a ta question, effectivement comme te le conseille Yves, le mieux serais que tu mettes en place un Web Map Service via un server WMS comme Maperver, Geoserver,... Pour simplifier, le principe est le suivant, le serveur lit les donnees et suite a une requete du navigateur client genere une image des donnees correspondant a l'emprise de l'affichage. Avec ce systeme tu peux esperer afficher tres rapidement de gros volume de donnees et ceci de maniere transparente pour l'utilisateur. Par contre je te l'accorde, c'est un peu plus complique a mettre en place qu'une simple creation de points a la volee via Google Map ou OpenLayers. Si tu as besoin de quelques pistes tu peux me contacter, mais si tu es bien la ou je pense tu dois avoir autour de toi quelques personnes ressources je suppose.
Rodolphe
Hors ligne
#4 Thu 24 July 2008 15:42
- fabrice.marteau
- Participant occasionnel
- Lieu: Marseille
- Date d'inscription: 5 Jul 2007
- Messages: 11
Re: Afficher environ 1500 point sur une carte...
Bonjour et merci pour vos promptes réponses!
Effectivement, je suis au "DEPARTMENT OF CIVIL, ENVIRONMENTAL & GEOMATIC ENGINEERING", mais c'est à l'University College London.
Voila l'idée que j'ai suite à vos conseils:
*création d'un WMS avec GeoServer à partir de la BD MySQL déjà en place
*superposition du layer WMS avec les fonds Google Maps avec Openlayers
A votre avis, sera-t-il possible de conserver la structure de la base et d'afficher les pop-up d'information des points (il contiennent du HTML pour la mise en forme).
Je vais devoir utiliser la librairie "MySQL DataStore" pour me connecter, est-ce la seule possibilité?
Sachant que je n'ai jamais monté de serveur carto, cela vous semble faisable en 4 semaines?
Fabrice
Hors ligne
#5 Thu 24 July 2008 15:51
Re: Afficher environ 1500 point sur une carte...
Bonjour,
Cela dépend de tes compétences en informatique ;)casera un peu juste, mais tu devrais pouvoir proposer une preuve de la faisabilité de ta proposition.
Pour le code HTML je pense que cela sera possible, par contre il te faudra protéger le code HTML lors de l'appel AJAX, sinon ca va buguer
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#6 Thu 24 July 2008 16:08
- Guillaume Sueur
- Participant assidu
- Lieu: Toulouse
- Date d'inscription: 23 Sep 2005
- Messages: 331
- Site web
Re: Afficher environ 1500 point sur une carte...
envoyer 1500 points en vectoriel dans le client web ne semble pas très raisonnable, mais il y a des méthodes très intéressantes d'aggrégation des points en fonction de l'échelle qui permettent de contourner le problème. Voir par exemple la petite carte de http://nyc.everyblock.com/building-viol … e/473-493/
Guillaume
Hors ligne
#7 Thu 24 July 2008 16:13
Re: Afficher environ 1500 point sur une carte...
envoyer 1500 points en vectoriel dans le client web ne semble pas très raisonnable, mais il y a des méthodes très intéressantes d'aggrégation des points en fonction de l'échelle qui permettent de contourner le problème. Voir par exemple la petite carte de http://nyc.everyblock.com/building-viol … e/473-493/
Guillaume
Bonjour,
c'est d'ailleurs mis en œuvre sur la carte des membres :
http://georezo.net/forum/map.php
A+
Nicolas
Hors ligne
#8 Thu 24 July 2008 16:15
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: Afficher environ 1500 point sur une carte...
Oui effectivement, 4 semaines ca parait juste pour bien finaliser le projet, mais comme Yves je pense que tu devrais deja avoir une bonne "maquette".
L'idee que tu proposes semble bien tenir la route car basee sur de bonnes briques. Toutefois dans une perspective d'ameliorer encore le systeme meme si tu n'auras probablement pas le temps, mais un stage c'est aussi fait pour faire des propositions de developpements futurs, l'utilisation d'une base PostgreSQL/PostGIS pourrait etre une alternative a MySQL notemment parcequ'elle propose des fonctions spatiales plus nombreuses/poussees.
Pour MySQL DataStore, je peux pas t'aider, je connais tres peu Geoserver et je l'ai jamais utilise avec MySQL.
Rodolphe
Hors ligne
#9 Thu 24 July 2008 16:57
Re: Afficher environ 1500 point sur une carte...
Bonjour Fabrice,
Utiliser des techniques de clustering de markers style :
http://www.acme.com/javascript/Clusterer2.js
Bien cordialement
--
Peio Elissalde
Magic Instinct Software
Hors ligne
#10 Thu 24 July 2008 17:49
- fabrice.marteau
- Participant occasionnel
- Lieu: Marseille
- Date d'inscription: 5 Jul 2007
- Messages: 11
Re: Afficher environ 1500 point sur une carte...
Re
Désolé, j'avais oublié de préciser une chose...pas de clustering!
Le commanditaire veut montrer une carte aussi "busy" que possible (pour la com sur le succès du projet).
Effectivement, cartographiquement parlant, c'est bidon de se faire chevaucher des points et d'en afficher plus qu'il n'est possible d'en distinguer sur une zone...
Le clustering ne sera utilisé qu'en dernier recours, et donc en tant que stagiaire, j'ai pour mission d'essayer et de voir les possibilités.
Pour monter le GeoServer avec MySQL, je vais tâcher de me faire épauler!
En tout cas, merci, et si quelqu'un a une idée qui lui vient...qu'il n'hésite pas! Si je peux implémenter et tester, c'est toujours bon a prendre comme expérience.
@+
Fabrice
PS: savez-vous qui a fait la carte des membres et avec quelles techniques précisément? je n'ai pas trouvé en cherchant sur le forum et cela m'intéresserait beaucoup de savoir comment il l'a interfacé avec le forum!
Hors ligne
#11 Thu 24 July 2008 21:45
- Ludovic G
- Membre
- Lieu: Annecy
- Date d'inscription: 5 Sep 2005
- Messages: 124
Re: Afficher environ 1500 point sur une carte...
Bonjour Fabrice,
Je réponds au PS (merci à Nicolas de m'avoir réveillé) : pour la carte des membres il s'agit d'un algo php écrit spécifiquement pour l'occasion. Ca commence à dater (2005) donc je ne me souviens plus très bien. Le principe c'est un simple calcul de distance en PHP . J'avais au feeling défini pour chaque seuil de zoom Google une distance d'agglomération des points. Le calcul se lance à chaque action de zoom et évalue pour chaque point sa distance par rapport aux agglomérations existantes. Si elle est < à la distance défini pour le seuil je le raccroche à l'agglo concernée.
Je suis étonné ça semble toujours tenir le choc (hein Fred !?. Pas de base géographique ni serveur cartographique. hébergement classique Php + Mysql. un champ latitude, un champ longitude. Gratté à droite à gauche pour gagner en perf : notamment utilisation du JSON pour envoyer les données si mes souvenirs sont bons. Je n'ai pas lu tous les messages mais si ton nombre de points n'évolue pas plus, c'est une alternative pour t'éviter de sortir l'artillerie. Tu feras signe si jamais tu souhaites aller plus loin et qu'il te faut de l'aide.
Pour l'interface avec le forum je m'en souviens plus bcp non plus, on a juste essayé avec Fred d'avoir un minimum d'impacts sur le forum pour ne pas gêner son évolution.
Ludovic
Hors ligne