Choix d'une commune sur carte

Bonjour,

Développeur web, je travaille sur un site internet (sur la drôme uniquement pour l’instant) listant les évènements d’une ville choisie et des environs classé par distance. En gros, je veux savoir ce qui se passe à Dieulefit et alentours ce soir, je consulte mon site et je trouve mon info.

Convaincu par le libre, j’ai deux besoins pour lesquels j’aimerais utiliser OSM :

  • Pour choisir la ville à l’arrivée sur le site, nous aimerions pouvoir afficher une carte sur laquelle il suffirait de cliquer sur une ville pour accéder au contenu. Ou peut être cliquer sur un pointeur basé sur le centre de la ville si c’est plus simple ergonomiquement.
  • Pour calculer la distance d’une évenement par rapport à la ville sélectionnée par l’internaute, nous calculons actuellement un distance à vol d’oiseau à partir des coordonnées du centre des villes. Ce n’est pas très réaliste, d’autant plus que notre coin est bien vallonné… existe-t-il un moyen de calculer la distance par la route ?

Novice sur OSM, je ne trouve pas comment procéder. Auriez vous des pistes ?

Merci de votre aide !

Salut,

Pour afficher ta carte et choisir la ville, ça se fait très bien avec OpenLayers. C’est plus simple avec des marqueurs sur chaque ville, car sinon il te faudra une base de données spatiales pour trouver la ville la plus proche.

Pour calculer la distance d’un événement, tu peux précalculer la distance d’un événement à une ville en utilisant OSRM. Si ta zone à couvrir n’est pas trop grande, c’est très rapide et peu gourmand. Pour donner un ordre d’idée, je calculais 67000 distances sur le département du cantal en quelques secondes sur mon portable.

Ton projet est intéressant :slight_smile:

Bonjour, et bienvenu sur OSM !

Pour ça, j’utiliserais je logiciel openlayers (afficher une carte, et mettre des points cliquables)
Pour récupérer les points cliquables depuis OSM, il faut extraire une partie de la base, et pour ça il il faut savoir si tu veux toute ville/village/hameau ayant un nom ou si tu veux en rester au communes françaises.
Si 1) alors tu peux construire la requête à l’aide de XAPI dont la documentation est ici : http://wiki.openstreetmap.org/wiki/Xapi (définir les limites, définir quel type de points, donc de “tags” tu veux)
Tu récupérera un fichier xml qu’il te faudrait retraiter sans doute pour le convertir dans un format utilisable par openlayers
Si 2) alors il faut savoir que les communes sont présents dans OSM sous forme de polygones, il faut alors soit les extraire toi même avec XAPI à nouveau (pas forcément simple ni rapide) soit, par exemple ré-utiliser ça :
http://export.openstreetmap.fr/contours-administratifs/export-communes/
C’est au format “shapefile” qu’il va aussi te falloir re-traiter, par exemple avec Qgis afin de produire un fichier utilisable par openlayers et surtout de trouver une combine pour avoir le barycentre du polygone ou “point dans la surface”
A noter que si tu veux que le point soit mieux positionné qu’un simple barycentre qui sera approximatif (genre sur le centre ville s’il existe) tu peux alors lire cette documentation qui explique comment ajouter des communes dans OSM, ce qui t’indiquera aussi comme ça fonctionne pour les traiter :
http://wiki.openstreetmap.org/wiki/WikiProject_France/Limites_administratives/Tracer_les_limites_administratives

Il existe en effet un “role” nommé “admin_centre” qui indique quel point est le centre ville, c’est lui qu’il te faudra récupérer si tu veux “bien faire” mais ça nécessite sans doute un peu de coder

  • Pour calculer la distance d’une évenement par rapport à la ville sélectionnée par l’internaute, nous calculons actuellement un distance à vol d’oiseau à partir des coordonnées du centre des villes. Ce n’est pas très réaliste, d’autant plus que notre coin est bien vallonné… existe-t-il un moyen de calculer la distance par la route ?

ça se corse :wink:
2 solutions générales :

  • Si vous souhaitez ne dépendre de personne, il faudra installer toi même un logiciel de routage qui te permettra de calculer une distance sur route
    OSMR : http://wiki.openstreetmap.org/wiki/Open_Source_Routing_Machine est celui dont j’entends le plus parler en ce moment, mais je ne sais pas ce que ça vaut
    la page : http://wiki.openstreetmap.org/wiki/Routing t’en donne d’autre
  • S’il est acceptable de dépendre d’un service en ligne (donc gagner du temps de mise en place !)
    tu peux faire appel à des logiciels déjà installés sur Internet qui fournissent une API pour les interroger, je crois que le OSMR que j’ai cité sait aussi faire ça, à vérifier sur sa page de documentation et il me semble qu’il y en a une version installée quelque part que tout le monde peut interroger (mais je ne sais pas s’il y a des limites)

Merci pour ces infos précieuses. Je vais devoir apprendre ce nouveau vocabulaire… :astonished:
Je vous tiendrais au courant de la solution retenue.

En complément des deux messages précédents, voici une URL (requête XAPI) qui renvoie dans un fichier OSM (il faut le renommer en .osm) les noeuds pour chacune des communes d’une zone géographique qui couvre la Drôme (mais qui doit déborder pas mal)

http://www.overpass-api.de/api/xapi?node[place=][ref:INSEE=][bbox=4.5,44.1,6.0,45.4][@meta]

Cette requête demande la présence de la description ref:INSEE sur le noeud, donc cela doit limiter les résultats à un noeud par commune.
Il n’y a donc pas les lieux-dits.
Tu peux utiliser JOSM pour le visualiser. Et normalement OpenLayers doit pouvoir l’utiliser comme base pour afficher des marqueurs