Proposed features/Fr:Numérotation des rues
|
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.
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
Bases
Les maisons sont géolocalisées à coté 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 du chemin (way) représentant la rue (pas sur le chemin !). Vous pouvez aussi utiliser une surface (area) qui décrit le contour du bâtiment.
- Un ensemble de maisons le long d'une rue est représenté par un chemin (way). Les numéros de début et de fin sont placés sur les nœuds (nodes) extrêmes de ce chemin. Le type de numérotation (pair/impair) est indiqué sur le chemin lui même.
Tags
Nous utilisons les tags suivants :
| Tag | nécessité | Type d'élément | Valeur | Description |
|---|---|---|---|---|
addr:housenumber |
nécessaire | |
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é | |
chaîne de caractères | Le nom de la rue en rapport |
addr:interpolation |
nécessaire si interpolation | |
even/odd/all/alphabetic | Comment interpoler le numéro de la maison en rapport avec la rue en question. |
addr:full |
optionel | |
chaîne de caractères | Adresse postale complète. |
addr:postcode |
optionel | |
chaîne de caractères | Code postal du bâtiment ou adresse de la zone |
addr:city |
optionel | |
chaîne de caractères | Nom de la ville utilisée dans l'adresse postale du bâtiment / de la zone. |
addr:country |
optionel | |
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)
<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
<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)
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).
- addr:interpolation=odd (interpolation impair)
- addr:interpolation=even (interpolation pair)
<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
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
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
<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 :
-
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 une 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) : le chemin (route, rue, voie de service) qui doit être utilisé 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 avoir un 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.
Algorithme
Un implémentation possible devrait fonctionner comme suit :
- Charger le chemin en mémoire
- Charger tous les nœuds et chemins liés à ce chemin, via les relations type=associatedStreet
- 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
- 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
- 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
- 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
- posNumeric = X / (B - A)
- Si le segment ne consiste qu'en les nœuds marqués A et B, la position cherchée est triviale à interpoler
- 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
- 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.





