Si vous pensez qu'une thématique manque, n'hésitez pas à nous contacter pour en discuter !
Chaque nouvelle thématique consomme des ressources sur le serveur de magOSM, nous essayons donc de privilégier des thématiques utiles au plus grand nombre.
Pour enrichir le service d'une nouvelle couche de données sur une thématique, les étapes suivantes sont nécessaires:
- Ouvrir un pad collaboratif (Framapad ou équivalent)
- Y renseigner 3 sections :
- requête PGSQL correspondant à la thématique
- style SLD qui sera utilisé par défaut pour le format WMS
- fiche de métadonnées (le titre et la description suffisent)
- Nous vérifions/testons vos ajouts sur le serveur
- Vous réalisez une Pull Request sur le dépôt Github afin que votre contribution soit intégrée
La base de données magOSM est basée sur Osm2pgsql qui crée notamment 3 tables d'exploitation dans le schéma magosm :
- magosm.france_point
- magosm.france_line
- magosm.france_polygon
Pour créer une nouvelle thématique dans magOSM il faut commencer par créer une "vue" PGSQL.
Il est possible de s'inspirer d'une requête existante proche de votre thématique.
Généralités
Lors de l'import de la donnée OSM dans la base de données PGSQL à l'aide de Osm2pgsql, les attributs (tags) les plus "fréquents" sont importés dans des colonnes dédiées (ex : l'attribut "name"), et les moins fréquents sont tous relégués dans une colonne "tags" de type hstore qui est une succession d'associations clé/valeur.
Exemple de contenu de la colonne tags :
{"colour"=>"#dda0dd", "network"=>"Agglobus Cavem", "osm_uid"=>"0", "osm_user"=>"", "route_name"=>"11: Les Deux Collines => Lycée Camus", "osm_version"=>"66", "osm_changeset"=>"0", "osm_timestamp"=>"2018-11-22T17:53:42Z", "route_pref_color"=>"0", "public_transport:version"=>"2"}
.
- pour récupérer un attribut "fréquent" il suffit de faire un
SELECT tag_frequent
Exemple :SELECT name FROM magosm.france_line WHERE ...
- alors que pour récupérer un attribut "moins fréquent", il faut faire un
SELECT tags->'tag_peu_frequent' AS "tag_peu_frequent"
Exemple :SELECT tags->'network' AS "network" FROM magosm.france_line WHERE ...
La liste des attributs "fréquents" est définie par le style magosm.style utilisé par Osm2pgsql pour l'import. Si la clé de l'attribut d'intérêt n'est pas listé dans le fichier magosm.style, c'est qu'il se trouvera dans la colonne tags de type hstore.
Pour des questions de performance, on s'assurera qu'un index est déjà défini pour la colonne de filtrage correspondant à la thématique (exemple : la colonne "building" pour les bâtiments) : vérifiez dans la liste des index existants
On adopte la convention suivante : si la clé de l'attribut utilisé contient le caractère deux-points " : " (exemple : public_transport:version
) alors on remplacera le ":" par un tiret "-" dans l'alias, exemple :
- pour un tag "fréquent" :
SELECT "addr:housename" AS "addr-housename"
- pour un tag "peu fréquent" :
SELECT tags->'public_transport:version' AS "public_transport-version"
Les objets OSM de type "relation" sont également disponibles dans les tables france_line et france_polygon, avec un osm_id négatif égal à l'opposé de l'identifiant de la relation dans OSM (exemple : la ligne de bus 11: Les Deux Collines => Lycée Camus (8937340) est présente sous forme d'une multi-ligne dans la table france_line avec osm_id=-8937340
).
C'est pourquoi pour la thématique des lignes de bus on requête sur osm_id<0
: v_bus_routes_line.sql
Et la ligne de bus est consultable via le portail magOSM ici.
Dans le cas où l'on voudrait également récuper la liste des arrêts de bus (nodes) associés à la relation, la liste complète des identifiants des membres de la relation est disponible dans la table france_rels et les objets nodes se trouvent dans la table france_point.
S'inspirer d'un style existant. Exemple de styles simples :
- géométrie Point : france_police_point.sld
- géométrie Ligne : france_subway_routes_line.sld
- géométrie Polygone : france_pnr_polygon.sld
Se limiter aux champs "Titre" et "Résumé".
Exemples pour :
- une requête dans la table "point" et "polygone" avec calcul du centroïd : Localisations des brigades de gendarmeries et commissariats de police - France métropolitaine.xml
- une requête dans la table "line" avec osm_id>0 : Réseau routier - France métropolitaine
- une requête dans la table "line" avec osm_id<0 : Autoroutes - France métropolitaine
- une requête dans la table "polygon" : Parcs Naturels Régionaux - France métropolitaine
S'inspirer d'un couche déjà existante. Le fichier est ici. Quelques remarques :
- L'attribut
md_url
ne peut pas être complété tant que nous n'avons pas ajouté la couche dans GeoServer. - L'attribut
main_feature_infos
permet d'ajouter les informations importantes sur l'objet qui vont s'afficher sur le panneau de gauche lorsqu'un objet est sélectionné sur la carte. Il existe 4 catégorieshigh
,medium
,low
, etno
. Pour les trois premières, seul UN tag de la liste dessub_tags
va réellement s'afficher : c'est celui qui aura la valeur de priorité la plus importante ET qui est contenu dans la liste des tags de l'objet sélectionné. Pour la catégorieno
, tous les tags listés seront affichés.- Les valeurs de
priority
doivent débuter à 1, l'ordre n'est pas important mais il ne faut pas sauter d'entier. Par exemple, une liste avec"priority":1
puis"priority":3
sans un"priority":2
n'est pas valide. - Il n'y a pas de priorité pour
no
, les tags s'affichent dans l'ordre de la liste. - Rajouter si nécessaire des labels afin de mieux comprendre les valeurs qui seront affichées.
- Les valeurs de
Pour réaliser une pull request via l'interface Web de Github :
- Forker le dépôt magOSM via le bouton en haut à droite afin de créer une copie personnelle du dépôt de code magOSM
- Dans votre nouveau dépôt personnel :
- Ajout de la requête SQL dans un nouveau fichier ici : https://github.com/Magellium/magosm_db/tree/master/pg_views
- Ajout de l’index ici : https://github.com/Magellium/magosm_db/blob/master/pg_views/ind_useful-indexes.sql
- Ajout du style SLD dans un nouveau fichier ici : /styles
- Ajout de la fiche de métadonnées dans un nouveau fichier ici : /metadatas
- Créer une pull request depuis votre fork