Récupérer et afficher des données d'openstreetmap


Il est possible de présenter sur une carte umap des données existantes sur Openstreetmap.
Pourquoi faire me direz-vous pouisqu'elles sont sur Openstreetmap et qu'Osm est utilisé comme fond de plan sur Umap ?
Il existe différentes façons de ramener de la données d'osm dans umap. Le choix va dépendre de plusieurs critères.

si vous travaillez sur une zone "fixe" de la carte

  • soit vous importez les données
    • avantages : affichage hyper rapide de la carte même si il y a beaucoup de données à afficher
    • désavantage : les données sont "datées" et donc pas en phase avec l'état d'osm (sauf à faire l'import chaque semaine)
  • soit vous importez une requête
    • avantages : les données sont toujours "à jour" avec les infos d'osm puisqu'il y a requête en temps réel
    • désavantage : ne fonctionne pas si il y a beaucoup de données à afficher, ça rame trop

si vous travaillez sur une zone "glissante" de la carte

  • il faudra importer une requête dynamique
    • avantages : quelque soit l'endroit où vous êtes, les données s'affichent
    • désavantage : compliqué et pas toujours fonctionnel ;-(

Récuperez les infos d'osm via l'api Overpass

Osm est une grande base de données avant d'être une carte.pour interroger ce gigantesque tableur, il existe l'api Overpass disponible sur https://overpass-turbo.eu
Grâce à elle, nous allons pouvoir interroger osm et en extraire soit des données, soit des requêtes à injecter ensuite dans Umap.
Pour interroger Overpass, il faudra utiliser les clés et les valeurs d'Osm (ex natural=tree pour les arbres).

Interroger Overpass pour ramener une requête

Le site Overpass Turbo propose un assistant qui facilite la rédaction d'une requête. Activez l'assistant et saisissez le texte suivant, qui permet d'extraire l'emplacement des arbres sur la zone affichée.
natural=tree


Cliquez ensuite sur construire et exécuter.
L'écran change et vous montre à gauche la requête construite et à droite sur la carte les données trouvées.
image assistantrequete.png (34.6kB)
image requetearbres.png (0.4MB)
Vous pouvez explorer un peu la requête en cliquant sur les points. Vous pouvez aussi constater que si vous faites glisser la carte, elle ne se met pas à jour => ce n'est pas une requête dynamique mais bien une requête liée à ce morceau de carte précis !

CETTE PARTIE N EST PLUS A JOUR
Adapter la requête pour uMap
Avant d'exporter la requête nous devons l'adapter. L'assistant Overpass Turbo produit des requêtes dont le résultat est au format JSON. uMap sait lire des données dans plusieurs formats, dont le format GeoJSON?, mais pas le format JSON produit par Overpass. Par contre uMap comprend très bien le format XML selon la syntaxe OSM (OpenStreetMap).

Pour que la requête produise des données au format XML/OSM, il suffit de modifier dans l'éditeur de requête la clause [out:json] par [out:xml]. Vous pouvez à nouveau exécuter la requête. Les données devraient de nouveau s'afficher sur la carte.
image requetexml.png (0.2MB)

Exporter la requête Overpass

Exportez la requête en cliquant sur Exporter : un panneau s'affiche. Ouvrez l'onglet Requête et cliquez sur compact à droite de Overpass QL. Un nouvel onglet intitulé Overpass API Converted Query apparaît. Faites un clic droit sur la ligne soulignée en bleu, et choisir Copier l'adresse du lien (avec Mozilla Firefox) : l'URL de la requête est copié dans le presse-papier.
image requetelienxml.png (34.8kB)

Utiliser la requête dans uMap
Dans un carte uMap, créez un calque et ouvrez l'onglet Données distantes. Collez dans la case URL le contenu du presse-papier et sélectionez le format osm.

Notez que l'URL est encodée pour pouvoir être utilisée comme requête HTTP : les caractères spéciaux comme “ sont convertis en %22. Ne les modifiez pas !

A SAVOIR : Pour les données importées via requête, il n'y a pas de possibilités de travailler le rendu de l'infobulle, ni de voir la table d'attributs, ni de contribuer sur ce calque.
image importrequetexml.png (30.9kB)

Interroger Overpass pour ramener des données "statiques"

Il arrive que les requêtes que l'on envoie sur Overpass prennent du temps à s'afficher (plusieurs secondes). Il y a "trop" de données sur la zone.
Ce délai est trop long pour une carte interactive. Aussi plutôt que d'exécuter le requête lors de l'affichage de la carte nous préférons extraire les données et les importer dans uMap.

Construisez votre requête dans Overpass comme précédemment et faites construire et éxecuter. Le résultat s'affiche sur la carte.
Cliquez sur Exporter, sélectionnez l'onglet Données puis cliquez sur Download/copy as GeoJSON. Cette opération convertit le résultat de la requête dans le format GeoJSON (un format standard pour transférer des données géographiques sur internet) et crée un fichier nommé export.geojson sur votre ordinateur (parfois compressé en .zip).

Dans la carte uMap importez le fichier ainsi produit dans un nouveau calque. Les données sont affichées.
Vous pouvez dans la section "édition des calques" voir les données importées (et les tags disponibles) en cliquant sur le petit tableau.
Vous pouvez aussi voir les données importées (et les tags disponibles) en demandant dans les options d'interaction du calque, un affichage tableau du popup et en cliquant sur les points (en ayant désactivé l'édition).
image tableattribut.png (66.0kB)

De la même façon qu'on peut customiser le look et le contenu de l'infobulle (voir tuto précédent), il est possible de remplir l'infobulle avec les valeurs importées dans le calque.
Pour ce faire, rendez-vous en mode édition dans les options d'interaction de votre calque. Dans gabarit du contenu de la popup :
  • par défaut pour l'affichage
  • et composez le contenu de l'infobulle en dessous en plaçant les tags entre {}

L'exemple ci à côté vous indique ce que cette infobulle rend sur la carte.
Attention : c'est très sensible, le moindre faux pas dans le nom du tag et pas d'affichage ;-(
image designinfobulletag.png (25.9kB)
image renduinfobulletag.png (16.6kB)

Le désavantage de cette méthode est que les données ne sont pas maintenue à jour par rapport à osm. C'est embêtant dans certains cas mais peut-être "compensé" par un import à fréquence régulière en "écrasant" les données du calque (Remplacer le contenu du calque).
Lorsqu'on ajoute un point sur ce calque, on est invité à rentrer toutes les informations du "tableau".

Astuce: si la quantité d'informations importées est trop grande, la carte peut s'en trouver fort encombrée et illisible. Vous pouvez alors activer dans les options de votre claque, un affichage en cluster (points regroupés) ou en heatmap (carte de chaleur).

Interroger Overpass pour ramener une requête dynamique

Important zone sensible et NON opérationnelle actuellement
Utiliser des données extraites plutôt qu'une requête présente un inconvénient : la mise à jour des données sur OpenStreetMap n'est pas répercutée sur notre carte. Pour pallier à cela nous vous proposons de modifier le calque montrant les parkings à vélos sous forme de marqueurs, de sorte qu'il utilise une requête dynamique.

Une requête dynamique permet d'injecter dans la requête des variables relatives à l'état actuel de la carte uMap. Nous allons utiliser une requête qui s'applique sur la seule partie visible de la carte, définie par un rectangle (ou bounding box). Cette requête s'exécutera à chaque zoom ou déplacement de la carte (d'où le terme dynamique) et récupérera les données demandées à l'intérieur de ce rectangle.

Simplifier la requête Overpass
Pour faciliter l'opération nous commençons par simplifier la requête Overpass. Les points importants sont :

[out:xml][bbox:{{bbox}}];
(
 node["natural"="tree"];
 way["natural"="tree"];
);
out center;


Adapter et exporter la requête

L'opération est délicate, et exige sang froid et concentration :
Par commodité la requête modifiée est reprise ci-dessous, où elle peut être copiée par un triple-clic :
http://overpass-api.de/api/interpreter?data=[out:xml][bbox:{south},{west},{north},{east}];(node["natural"="tree"];way["natural"="tree"];);out center;