Accueil Floss Manuals francophone

OpenStreetMap

Le modèle de données d'OpenStreetMap

Le modèle de données d'OpenStreetMap est une façon simple mais puissante de représenter l'information géographique. Sa compréhension vous sera nécessaire si vous désirez exploiter les données OpenStreetMap dans leur format natif, par exemple pour développer un éditeur de carte spécialisé, ou bien un convertisseur qui vous permettrait d'exploiter ces données dans une autre application.

Dans un système d'information géographique (SIG) traditionnel, les données cartographiques sont représentées de trois façons différentes : un point est un simple lieu de l'espace défini par ses coordonnées, une ligne (linestring) est un objet linéaire pouvant représenter, par exemple, une route ou une frontière, et un polygone est une surface fermée. Les données attachées à ces objets géographiques sont généralement stockées dans une base de données secondaire, liée à la base géographique.

Dans OpenStreetMap, ces trois concepts sont modélisés différemment, en nœuds (nodes), lignes (ways) et relations, complétés par des attributs (tags) décrivant chaque objet. Ce chapitre détaille ces concepts de base d'OpenStreetMap.

Tout ceci est un sujet un peu technique, qui vous aidera à décider si vous voulez vous plonger plus profondément dans OpenStreetMap, par exemple pour implémenter une fonctionnalité intéressante qui n'existe pas encore ou pour améliorer un outil existant. L'accès aux données brutes peut se faire soit en travaillant sur des jeux de données statiques (fichiers) soit en interrogeant une interface de programmation (API OpenStreetMap), comme l'API REST utilisée pour modifier les données OSM. Pour en savoir plus sur l'API REST, référez-vous à la page wiki http://wiki.openstreetmap.org/wiki/API_v0.6 (en anglais).

Les attributs

Les attributs (tags) sont des paires "clé=valeur" qui peuvent être liées à chaque élément géographique d'OpenStreetMap. Ces attributs décrivent l'objet géométrique. La clé et la valeur sont toutes deux des chaînes de caractères, de longueur maximale 255 caractères (en comptant les espaces), avec une seule contrainte : chaque clé doit être unique pour un même élément. Si un objet géographique ne porte aucun attribut, la plupart des moteurs de rendu ne le représenteront pas du tout.

Nœuds

Un point géographique est appelé un nœud, et il est représenté par sa latitude, sa longitude et autant d'attributs que nécessaire. Par exemple, des nœuds sont utilisés pour représenter des magasins, des arrêts de bus, des bancs, des sommets et des boîtes à lettres. Un nœud sans attribut sera toujours un sous-élément d'un autre élément.

Lignes

Une liste ordonnée de nœuds est appelée une ligne (way). Une ligne comporte un maximum de 2000 nœuds, pour s'assurer que les outils et les utilisateurs ne seront pas débordés par des objets énormes qu'il serait trop difficile de manipuler. Les lignes sont utilisées pour représenter des objets linéaires comme les chemins, les routes, les lignes de chemin de fer, les côtes et les frontières.

Pour l'instant, les polygones ne constituent pas un type de données particulier : ce sont simplement des lignes fermées, c'est-à-dire dont le dernier point est confondu avec le premier. Elles sont utilisées pour représenter les bâtiments, les parcs et les zones d'un plan d'occupation des sols.

Relations

Une relation est une liste ordonnée de nœuds, de lignes et de relations. Chaque membre d'une relation a un rôle optionnel qui ajoute une information à ce sous-élément. Comme les attributs, ces rôles sont stockés dans des chaînes de caractère (limitée à 255). Les relations peuvent représenter des itinéraires routiers ou cyclables, des frontières administratives ou des cours d'eau, là encore selon les attributs qui leur sont attachés.

Souvenez-vous que les relations ne sont pas des catégories et ne doivent pas être utilisées seulement pour regrouper des objets. Pour cela, il existe généralement des attributs dédiés. Pour plus de précisions à ce sujet, visitez la page wiki http://wiki.osm.org/wiki/FR:Relations/Relations_are_not_Categories.

Identifiants

Un élément dans la base de données OpenStreetMap, qu'il soit un nœud, une ligne ou un polygone, est identifié par un identifiant numérique unique. Cet identifiant n'a pas de signification particulière ; il ne sert qu'à repérer de façon univoque un élément. Une relation et une ligne utilisent ces identifiants pour référencer chacun de ses sous-éléments. Deux lignes se rencontrent uniquement si elles référencent au moins un même identifiant de nœud (et non pas deux nœuds de coordonnées identiques). De même, une ligne fermée représentant une surface référence obligatoirement deux fois le même identifiant de nœud.

Formats de fichier d'OpenStreetMap

Les fichiers de données OpenStreetMap sont traditionnellement distribués sous un format XML représentant les concepts de nœud, ligne et relation dans un schéma simple et direct. Nativement, ce format XML peut être extrêmement volumineux, de sorte qu'il est souvent fourni sous une forme compressée par un algorithme efficace comme gzip ou bzip2. La plupart des outils conçus pour travailler sur un format XML OSM savent aussi gérer le XML compressé.

Pour résoudre les deux problèmes de la taille et du temps d'analyse d'un gros fichier XML, un deuxième format a été conçu, utilisant le Protocol Buffers de Google ; il s'agit du format PBF. Il permet de compacter au maximum les données OSM dans un fichier binaire. Le résultat est même plus compact qu'un fichier compressé au format bz2, et permet un traitement bien plus rapide que du XML compressé. Il existe des bibliothèques dans les principaux langages pour lire ce format.