OpenStreetMap

Aroche's Diary

Recent diary entries

Depuis quelques temps, je commence à me lasser de ma zone habituelle de mapping. Je me suis alors posé la question : où pourrais-je mapper pour changer un peu ? Je parle bien évidemment ici d’“armchair mapping”, à partir d’imagerie Bing principalement. Ce que je cherchais à obtenir, c’est une zone assez petite pour ne pas avoir à y passer des heures (plus petite qu’une commune française standard), prise au hasard sur le territoire français (on peut bien sûr envisager un autre territoire) L’idée, c’est une sorte de Maproulette, mais non restreint à des éléments à corriger.

Le principe de la méthode : créer un fichier de points aléatoires sur le territoire, chaque point correspondant au centre d’une zone à mapper. Pour cela, j’utilise QGIS pour créer une base Spatialite, qui permettra de générer des URL définissant des zones de données à télécharger dans JOSM.

  1. Récupérer un fichier vectoriel de type polygone représentant le contour de la zone voulue (il peut être séparé en plusieurs entités). Personnellement, j’utilise le fichier des régions issues d’OSM simplifié à 100 m. (disponible dans http://osm13.openstreetmap.fr/~cquest/openfla/export/) Attention : plus les entités sont nombreuses et complexes, plus la génération va prendre du temps.
  2. Afficher ce shp dans QGIS.
  3. Utiliser l’outil dans le menu Vecteur>outils de recherche>points aléatoires. Sélectionner la couche de polygones en entrés, et indiquer un nombre de points important (3000 par exemple). Indiquer un shapefile en sortie et lancer le traitement. Afficher le résultat dans QGIS.
  4. Exporter le shapefile vers une nouvelle base Spatialite (clic droit sur la couche>sauvegarder sous, format Spatialite.)
  5. ouvrir la base Spatialite dans le DBManager (ou dans tout autre gestionnaire de base Spatialite : le plugin QGIS QSpatialite, spatialite-gui…)
  6. Nous allons ensuite créer une vue qui donne une URL OSM prête à l’emploi pour un ensemble de points pris au hasard dans la table : dans la fenêtre de requête, rentrer le code SQL suivant :

    CREATE VIEW zones_proposees as select ‘http://www.openstreetmap.org/#map=16/’ || st_y(st_transform(Geometry, 4326)) || ‘/’ || st_x(st_transform(Geometry, 4326)) url from order by random() limit 10

Une petite explication des choix faits dans la requête : le “16” représente ici le niveau de zoom de la carte générée, et donc l’étendue de la zone de données téléchargée. On peut le modifier, cela dépend aussi de la taille de l’écran utilisé ; je trouve que cette valeur me donne une zone pas trop étendue, pour mapper assez rapidement. Le “limit 10” est facultatif : il donne une liste de 10 résultats. On n’est pas non plus obligé de mentionner le “order by random()”, si on veut utiliser chaque zone séquentiellement.

Il ne reste plus qu’à utiliser les URL ainsi proposées : Visualiser la vue et copier une ligne de résultat dans le presse-papier. Dans JOSM, cliquer sur le téléchargement de données, puis sélectionner l’onglet “zone délimitée” et coller l’url. Une zone de téléchargement sera déterminée automatiquement.

Avec ce procédé, j’obtiens une zone d’environ 2 x 2 km, au hasard sur la France. On peut aussi bien tomber sur un centre-ville dense que sur une forêt ou une zone de grandes cultures. En général, on trouve toujours quelques éléments à ajouter, améliorer. La variété des situations rencontrées évite trop de répétitivité.

Améliorations possibles :

Au lieu de créer une couche de points aléatoires, il vaudrait mieux générer les points dynamiquement, donnant lieu à une infinité de points possibles.

On peut aussi envisager d’enregistrer dans la base Spatialite les zones qu’on a déjà mappées, de façon à ce qu’elles ne soient plus proposées par la vue.