FR:Numérotation des rues

From OpenStreetMap Wiki
Jump to navigation Jump to search
Housenumber-karlsruhe-de.png

Bases

Les maisons sont géolocalisées à côté des rues. Leur géolocalisation est indépendante des rues.

  • Une maison isolée est représentée par un nœud (node) près d'une voie (way) représentant la rue (pas sur la voie !). Vous pouvez aussi utiliser une surface (area) qui décrit le contour du bâtiment par un polygone.
  • Un ensemble de maisons le long d'une rue est représenté par une voie (way). Les numéros de début et de fin sont placés sur les nœuds (nodes) extrêmes de cette voie. Le type de numérotation (paire/impaire) est indiqué sur la voie elle-même.

Exemple d'utilisation : https://www.openstreetmap.org/?lat=49.03101&lon=8.36384&zoom=17&layers=0B00FTF

Tags

Nous utilisons les tags suivants :

Tag nécessité Type d'élément Valeur Description
addr:housenumber nécessaire nœud zone chaîne de caractères Le numéro de la maison. (Peut contenir aussi d'autres éléments que des chiffres). Si une seule entrée a plusieurs numéros de maisons, séparez les par ";" avec par exemple : "12b;12c" ou "3; 5; 7; 9"
addr:street recommandé nœud zone chaîne de caractères Le nom de la rue en rapport
addr:interpolation nécessaire si interpolation chemin even/odd/all/alphabetic Comment interpoler le numéro de la maison en rapport avec la rue en question.
addr:full optionnel nœud zone chaîne de caractères Adresse postale complète.
addr:postcode optionnel nœud zone chaîne de caractères Code postal du bâtiment ou adresse de la zone
addr:city optionnel nœud zone chaîne de caractères Nom de la ville utilisée dans l'adresse postale du bâtiment / de la zone.
addr:country optionnel nœud zone chaîne de caractères à 2 lettres ISO 3166-1 alpha-2 code à 2 lettres pour le pays, en majuscules. (regarder wikipedia:ISO 3166-1 alpha-2). Ceci est nécessaire car les codes postaux sont seulement uniques au sein d'un pays. Exemple: "FR" pour la France, "DE" pour l'Allemagne ou "CH" pour la Suisse. Attention: La norme ISO 3166-1 alpha-2 code à deux lettres pour la Grande-Bretagne est "GB" et non "UK".

Utilisation

Maison isolée notifiée comme un nœud (node)

NodeNextToRoad.png

<node id="1">
  <tag k="addr:housenumber" v="10" />
</node>

L'adresse de la maison est associée au nom de la rue la plus proche.

Bâtiment individuel tagué comme polygone de construction (building)

HousePolygonNextToRoad.png

<way id="1">
  <tag k="addr:housenumber" v="10" />
  <tag k="building" v="(yes|apartments|...)" /> 
</way>


Le cas est similaire, nous utilisons juste un polygone pour le bâtiment. Là où un point particulier est nécessaire mais qu'aucun point convenable ne peut être déterminé (entrée principale, par exemple), il est possible d'utiliser le centre du polygone.

Utilisation de "interpolation" pour marquer plusieurs maisons le long d'une voie (way)

HouseNumbersInterpolation.png

Parallèlement à la voie (way) représentant la rue, nous construisons n nœuds (nodes) connectés entre eux. Cette nouvelle voie (way) va nous permettre d'indiquer les numéros de début et de fin de rue ainsi que le type de numérotation (paire ou impaire).

  • addr:interpolation=odd (interpolation impaire)
  • addr:interpolation=even (interpolation paire)
<node id="01" lat=... lon=...>
  <tag k="addr:housenumber" v="10" /> 
</node>
<node id="02" lat=... lon=...>
  <tag k="addr:housenumber" v="20" /> 
</node>
<node id="03" lat=... lon=...>
  <tag k="addr:housenumber" v="100" /> 
</node>
<way id="??">
  <node ref="01"/>
  <node ref="02"/>
  <node ref="03"/>
  <tag k="addr:interpolation" v="even" />
</node>


On utilise une interpolation linéaire le long de la voie entre chaque série de deux points consécutifs représentant un numéro de maison intégré.

Pour les numéros manquants (par exemple, n°12 manquant) deux voies doivent être dessinées (par exemple "1-11" et "13-25").

S'il y a un numéro de bâtiment sur un simple nœud ou sur un polygone de bâtiment, et que le numéro apparaît aussi en tant que résultat d'une interpolation, le logiciel devrait traiter cela sans problème et favoriser le tag individuel de numéro de bâtiment comme étant la position réelle. De tels conflits devraient être corrigés tôt ou tard dans les données.

Nous nous attendons à ce que la "voie d'interpolation" soit une construction temporaire. À terme, dans OSM, chaque maison individuelle sera dessinée avec les contours du bâtiment et sera taguée avec son numéro, de telle sorte que l'interpolation deviendra progressivement inutile.

Néanmoins ces voies d'interpolation sont utiles pour faire un démarrage rapide avec les numéros de bâtiment, et d'autre part, il y aurait également, en attente d'importation, des données nécessitant également l'interpolation.

Les nœuds qui n'ont pas un nombre entier pour leur tag addr:housenumber sont ignorés pour l'interpolation paire/impaire/tous (par exemple "12b"). Les points finaux des interpolations du type "paire", "impaire" ou "tous" ne peuvent pas avoir des numéros de bâtiments non entiers.

Interpolation de numéros non-entiers

Vous pouvez utiliser la méthode d'interpolation "alphabetic" pour interpoler les caractères alphabétiques dans les numéros de bâtiments. Ainsi, si vous avez tous les bâtiments entre 7a et 7f à la suite, vous pouvez les connecter ensemble par une voie (way) marquée avec addr:interpolation=alphabetic. Vous ne pouvez pas mélanger l'interpolation alphabétique avec les autres méthodes d'interpolation.

Association avec une rue

Les relations sont la méthode préférée pour fournir une connexion entre numéro de bâtiment et rue, puisqu'elles sont faciles à évaluer dans un logiciel et limitent la redondance de données. Cependant, si vous n'êtes pas à l'aise avec l'utilisation des relations, vous pouvez utiliser le tag addr:street, comme décrit dans la section suivante.

Relations associatedStreet (recommandée)

Tags

Clef Valeur Discussion
type associatedStreet Obligatoire
name Nom de la rue Recommandé

Membres

voie ou nœud Rôle Récurrence Discussion
chemin street >= 1 La rue associée (ou les "morceaux" de rue si elle est découpée)
nœud chemin house >= 1 Un ou plusieurs numéros de bâtiments

Nom de la rue avec le numéro (préférer les relations)

HousePolygonNextToRoadWName.png

<node id="1" lat=... lon=...>
  <tag k="addr:housenumber" v="10" /> 
  <tag k="addr:street" v="AStreet" /> 
</node>

Seulement les voies avec un tag highway sont appelés rues (i.e. ceci n'associera pas un bâtiment numéroté avec le segment d'une grille ou d'une ligne électrique). Merci de lire la section "donner des indices" pour que cette association avec une rue soit plus précise.

Donner des indices sur l'accès routier (optionnel)

<relation id="??">
  <tag k="type" v="roadAccess" />
  <member type="node" ref="11" role="accessto" />
  <member type="node" ref="12" role="accessvia" />
  <!-- (facultativement, plusieurs <member type="node" ref="11" role="accessvia" />
        pour plusieurs accès à l'endroit adressé par exemple pour
        les centres de conventions) -->
  <member type="way" ref="???" role="accessfrom" /> <!-- optionnel -->
</relation>

En d'autre termes : créer une relation de type "roadAccess" avec ces membres :

  • accessto : le nœud d'adresse marqué addr:housenumber=*, comme indiqué ci-dessus. Puisque les nœuds d'adresse sont, pour la plupart, loin de "leur" rue, ils devraient être, en plus, marqués avec addr:street=*.
  • accessvia : un nœud (d'accès) sur une rue (trivial) ou proche de la rue (e.g. portail). Un algorithme de routage devrait traiter ce nœud comme le début ou la fin d'une route, de la même manière qu'il traiterait un nœud d'adresse sans cette relation. Si plus d'un nœud d'accès est donné, l'algorithme devrait choisir le meilleur (e.g. la route la plus courte ou la plus rapide).
  • accessfrom (optionnel) : la voie (route, rue, voie de service) qui doit être utilisée pour accéder à cette adresse.

Usage

  • Quelques rues dans Karlsruhe ont leur numéros de bâtiments marqués de cette manière. D'autres endroits ont également ces données ;
  • Traveling Salesman a une application en ligne de commande org.openstreetmap.osm.data.searching.HouseNumberFinderTest qui permet de chercher un couple rue + numéro de bâtiment, et d'obtenir une géolocalisation de ce bâtiment ;
  • Osmarender est modifié pour rendre joliment les numéros de bâtiments : maisons seules, interpolation ;
  • JOSM a un paramètre pour facilement ajouter les tags addr:* ;
  • Potlach a aussi un tel paramètre : cliquer sur l'icône 'preset type' jusqu'à ce qu'il devienne un cachet de la poste, puis sélectionner "adresse' ;
  • OSM Inspector a une vue pour afficher les adresses.
  • Osmose a un test de vérification de la cohérence de la numérotation des adresses. Osmose

Algorithme

Une implémentation possible devrait fonctionner comme suit :

  1. Charger la voie en mémoire
  2. Charger tous les nœuds et autres voies liés à cette voie, via les relations type=associatedStreet
  3. Si l'étape 2 ne garantit pas de retourner tous les résultats pertinents : charger tous les nœuds et voies avec le tag addr:housenumber ou addr:interpolation dans une région autour des voies qui ont cette voie comme plus proche voisine
  4. Si, pour tous les nœuds ou les polygones des constructions trouvés en étape 2 ou 3, les numéros de bâtiment sont corrects, alors les retourner et abandonner
  5. Itérer sur tous les addr:interpolation des étapes 2 et 3, et déterminer soit le premier soit tous ceux qui peuvent contenir le numéro à trouver
  6. Déterminer la longueur du segment entre deux numéros A et B de l'interpolation trouvée, dans laquelle le numéro cherché X est contenu
  7. posNumeric = X / (B - A)
  8. Si le segment ne consiste qu'en les nœuds marqués A et B, la position cherchée est triviale à interpoler
  9. Si le segment contient plus de nœuds, déterminer le segment dans lequel se trouve la position cherchée, en utilisant la somme des longueurs des segments et posNumeric
  10. Déterminer la position cherchée sur le segment trouvé, en utilisant la longueur du segment et la somme des segments avant celui-ci


Note : l'étape 3 peut être entièrement supprimée via un pré-traitement. Les pré-traitements appropriés peuvent être écrits pour le format osm-xml, ou comme un nouveau osmosis-task, utilisable par tout le monde, au lieu de l'implémenter dans chaque application. Avec un tel pré-traitement, aucune requête de région n'est requise.

Une implémentation de référence est disponible sur AdvancedAddressDBPlaceFinder du navigateur Traveling Salesman.