Proposed features/Fr:Numérotation des rues

From OpenStreetMap Wiki
Jump to: navigation, search

+/-
Other languages:

English  •  Deutsch  •  Español  •  Suomi  •  Français  •  Italiano  •  Русский  • 

Ce schéma est utilisé pour un premier essai de numérotation des maisons

Il s'agit seulement d'une proposition parmi d'autres.

Housenumber-karlsruhe-de.png

Cela peut changer à tout moment, quand des améliorations sont faites sur l'acquisition des données et leur organisation sur la carte.


Un bel exemple : http://www.openstreetmap.org/?lat=49.03101&lon=8.36384&zoom=17&layers=0B00FTF


Contents

Bases

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

Tags

Nous utilisons les tags suivants :

Tag nécessité Type d'élément Valeur Description
addr:housenumber nécessaire Node Area 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 "," par exemple : "12b,12c"
addr:street recommandé Node Area chaîne de caractères Le nom de la rue en rapport
addr:interpolation nécessaire si interpolation Way even/odd/all/alphabetic Comment interpoler le numéro de la maison en rapport avec la rue en question.
addr:full optionel Node Area chaîne de caractères Adresse postale complète.
addr:postcode optionel Node Area chaîne de caractères Code postal du bâtiment ou adresse de la zone
addr:city optionel Node Area chaîne de caractères Nom de la ville utilisée dans l'adresse postale du bâtiment / de la zone.
addr:country optionel Node Area 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. 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 taggé comme polygone 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 maison de long d'un chemin (way)

HouseNumbersInterpolation.png

Parallèle au chemin (way) représentant la rue, nous construisons n nœuds (nodes) connectés entre eux. Ce nouveau chemin (way) va nous permettre d'indiquer le numéro de début et de fin de rue ainsi que le type de numérotation (pair ou impair).

<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 du chemin 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 chemins doivent être dessinés (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 le "chemin d'interpolation" soit une construction temporaire. À terme, dans OSM, chaque maison individuelle sera dessinée avec les contours du bâtiment et sera tagguée avec son numéro, de telle sorte que l'interpolation deviendra progressivement inutile.

Néanmoins ces chemins 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 pair/impair/tous (par exemple "12b"). Les points finaux des interpolations du type "pair", "impair" 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 un chemin (way) marqué avec addr:interpolation=alphabetic. Vous ne pouvez pas mélanger l'interpolation alphabétique avec les autres méthodes d'interpolation.

Donner des indices pour choisir la rue (optionnel)

Les relations sont la méthode préférée pour fournir une connexion entre numéro de bâtiment et rue, puisqu'ils sont faciles à évaluer dans un logiciel. Cependant, si vous ne voulez pas bidouiller avec, n'hésitez pas à utiliser le tag addr:street, comme décris dans la section suivante.

D'après Marcus Wolschon, un seul des deux (addr:street ou la relation associatedStreet) devrait être suffisant (voir le courriel "Re: Hausnummernmapping & Relationen (Karlsruher Schema)" (de) du 2009-04-15 09:18:48 GMT sur la liste allemande talk-de).

Cas : Choix de la rue à laquelle le bâtiment appartient

HousePolygonNextToRoadWName.png

Nom des rues (facile pour les humains)

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

Seulement les chemins 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.

Cas : relations (facile pour les ordinateurs, difficile pour les humains)

Tags

Clef Valeur Discussion
type associatedStreet utiliser "associatedStreet" lors du tagging, mais l'analyse autorise aussi "street"
name streetname optionnel ?!?! pour une utilisation facilitée de JOSM :)

Membres

Chemin ou nœud Rôle Récurrence ? Discussion
Way street unique La rue associée
Node Way house un ou plusieurs Un ou plusieurs numéros de bâtiments (utiliser "house" lors du tagging mais l'analyse autorise aussi : addr:houselink)


Les programmes peuvent facilement ajouter ces relations là où ils sont manquants lors du pré-traitement en délimitant une zone.

<node id="1" lat=... lon=...>
  <tag k="addr:housenumber" v="10" /> 
</node>
<relation id="??">
  <tag k="type" v="associatedStreet" /> 
  <member type="node" ref="11" role="house" />
  <member type="way" ref="???" role="street" />
</relation>

Indication : les programmes qui ont besoin de parcourir les numéros de bâtiments peuvent créer ces relations en interne, comme étape du pré-traitement. Des pré-processeurs appropriés seront fournis.

Cas : sélection de la rue à laquelle un bâtiment, représenté par son polygone building, appartient

HousePolygonNextToRoadWRel.png

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

ou

<relation id="??">
  <tag k="type" v="associatedStreet" /> 
  <member type="node" ref="11" role="house" />
  <member type="way" ref="???" role="street" />
</relation>

Cas : sélection de la rue à laquelle appartient une série de numéros de bâtiments

<node id="1" lat=...lon=...>
  <tag k="addr:housenumber" v="10" /> 
  <tag k="addr:street" v="AStreet" /> 
</node>
<node id="2" lat=... lon=...>
  <tag k="addr:housenumber" v="20" /> 
</node>
<node id="3" lat=... lon=...>
  <tag k="addr:housenumber" v="100" /> 
</node>
<way id="11">
  <nref id="1"/>
  <nref id="2"/>
  <nref id="3"/>
  <tag k="addr:interpolation" v="even" />
</way>

ou

<relation id="??">
  <tag k="type" v="associatedStreet" /> 
    <member type="way" ref="11" role="house" />
    <member type="way" ref="???" role="street" />
</relation>

Donner des indices à propos de l'adresse complète (optionnel)

<node id="01" lat=... lon=...>
  <tag k="addr:housenumber" v="10" />
  <tag k="addr:postcode" v="52700" />
  <tag k="addr:full" v="10 Rue du Général Leclerc
                           52700 Rimaucourt
                           France" />
</node>

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é p.e. 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 :

Usage

Algorithme

Un implémentation possible devrait fonctionner comme suit :

  1. Charger le chemin en mémoire
  2. Charger tous les nœuds et chemins liés à ce chemin, via les relations type=associatedStreet
  3. Si l'étape 2 ne garantie pas de retourner tous les résultats pertinents : charger tous les nœuds et chemins avec le tag addr:housenumber ou addr:interpolation dans une région autour des chemins qui ont ce chemin comme plus proche voisin
  4. S'il y a des nœuds ou région trouvés en étape 2 ou 3 avec le bon numéro de bâtiment sont trouvés, 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 la position cherchée est, 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.

Personal tools
Namespaces
Variants
Actions
site
Toolbox