FR:Relation:multipolygon

From OpenStreetMap Wiki
Jump to navigation Jump to search
Public-images-osm logo.svg multipolygon
Multipolygon Illustration 6.svg
Description
La relation multipolygon est utilisée pour représenter les surfaces complexes. Modifier ou traduire cette description.
Groupe: Propriétés
Membres
  • chemin - outer
  • chemin - inner
Statut : de fait

Les relations du type multipolygon sont utilisées pour représenter des surfaces complexes.

Les surfaces simples sont cartographiées dans OpenStreetMap en créant un chemin fermé et en l’étiquetant avec une clef suggérant qu'il s'agit d'une surface plutôt que d'un chemin circulaire. Par exemple, en utilisant l'étiquette landuse=forest, on saura qu'il s'agit d'une surface alors qu'avec l'étiquette junction=roundabout, on saura qu'il s'agît d'un chemin circulaire (un rond point).

Toutefois, ce modèle ne fonctionne que pour les surfaces formées par un unique chemin et qui n'ont pas de trous. Toute surface plus complexe (e.g, parce qu'elle est formée de plusieurs chemins liés ensemble, ou parce qu'elle est formée de plusieurs polygones disjoints ou parce qu'elle comporte des trous) nécessite une relation multipolygon.

Les relations de type multipolygon sont utilisées pour représenter des surfaces de tout type et de différentes formes. On peut dire que les relations multipolygon sont les objets OpenStreetMap pour représenter les surfaces.

Pour résumer, une surface représentée à l'aide d'un multipolygon est constituée d'un ou plusieurs chemins formant le ou les polygones extérieurs (outer en anglais) et un ou plusieurs chemins formant le ou les polygones intérieurs (inner).

Attributs

Clef Valeur Explication
type multipolygon Indique aux applications qui utilisent les données OpenStreetMap d'employer les règles de construction de surface à partir des membres de la relation.

Membres

Chemin ou nœud Rôle Récurrence Explication
chemin outer un ou plusieurs Les chemins formant les bords externes du polygone.
chemin inner zéro, un ou plusieurs Les chemins formant les enclaves ("trous") du polygone.
chemin aucun 0 Obsolète, a été accepté pendant un certain temps mais maintenant les membres d'un multipolygone doivent tous être définis avec un rôle outer ou inner.

Utilisation

On utilise les polygones multiples de la manière suivante :

  • Les étiquettes qui décrivent les polygones multiples (exemple: landuse=forest) doivent s'appliquer à la relation. Les chemins du contour externe ne doivent pas être étiquetés, à moins qu'ils décrivent un élément de manière indépendante. Par exemple, une forêt peut être délimitée par quatre routes qui seront étiquetées en highway mais qui pourront être utilisées comme membres externes de la relation forêt.
  • Si vous avez un chemin fermé qui forme le contour extérieur et qu'il ne décrit rien à lui seul, vous pouvez également ajouter ces étiquettes à ce contour et laisser la relation non étiquetée. Si vous avez plus d'un chemin externe (voir plus bas), alors, ça n'a plus de sens. Il est alors suggéré de toujours étiqueter sur la relation.
  • Si le chemin interne représente un objet (exemple: une forêt avec un trou qui est un lac), alors le chemin interne doit être étiqueté.
  • Dans les autres cas, les chemins internes ne doivent pas être étiquetés.
  • La direction des chemins n'a pas d'importance.
  • L'ordre des membres de la relation n'a pas d'importance (néanmoins, des listes bien triées facilitent la vie des humains chargés de vérifier la complétude des surfaces).
  • En général, une relation multipolygon peut être employée pour construire des polygons multiples selon les standards OGC (http://www.opengeospatial.org/standards/sfs). Tout objet qui n'est pas un polygone multiple selon ce standard (exemple : des polygones avec des anneaux qui s'intersectent) doivent être considérés comme non valides à l'exception des anneaux internes adjacents (voir plus bas).

Exemples

Un anneau externe et un anneau interne

L'ancienne relation multipolygon ne permettait qu'un seul anneau externe pour un nombre illimité d'anneaux internes. Les anneaux étaient formés par un seul chemin fermé. Ce type de polygone (qui n'est pas vraiment un polygone multiple mais plutôt un polygone multi-chemins) est bien entendu toujours géré mais les règles ont été assouplies de manière à implémenter ce cas dans la relation générale des polygones multiples.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
</relation>
Figure 1: Un anneau externe et un anneau interne

Un anneau externe et deux anneaux internes

<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
</relation>
Figure 2: Un anneau externe et deux anneaux internes

Chemins multiples formant un anneau

Le modèle de données avancé des polygones multiples permet aux anneaux internes et externes d'être constitués de plus d'un chemin. C'est intéressant pour les polygones multiples qui s'étalent sur des grandes surfaces où il est peu pratique d'avoir un seul chemin qui en fait le tour :
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
  <member type="way" id="3" role="inner" />
</relation>
Figure 3: Chemins multiples formant un anneau

Deux anneaux extérieurs disjoints

À l'inverse de l'ancienne méthode, la relation avancée des polygones multiples permet un nombre infini d'anneaux externes, formant un véritable polygone multiple :
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
</relation>
Figure 4: Deux anneaux extérieurs disjoints

Deux anneaux extérieurs disjoints et plusieurs chemins formant un anneau

La possibilité de combiner un anneau depuis plusieurs chemins n'est pas limitée aux anneaux extérieurs, elle s'applique également aux anneaux internes:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
  <member type="way" id="4" role="outer" />
  <member type="way" id="5" role="inner" />
</relation>
Figure 5: Deux anneaux extérieurs disjoints et plusieurs chemins formant un anneau

Combinaison complexe des fonctionnalités avancées

Cette exemple illustre une combinaison complexe des fonctionnalités avancées : trois anneaux externes dont deux qui ont un ou plusieurs anneaux internes et qui sont formés par plus d'un chemin.
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
  <member type="way" id="3" role="outer" />
  <member type="way" id="4" role="outer" />
  <member type="way" id="5" role="inner" />
  <member type="way" id="6" role="inner" />
  <member type="way" id="7" role="inner" />
  <member type="way" id="8" role="inner" />
  <member type="way" id="9" role="inner" />
  <member type="way" id="10" role="inner" />
  <member type="way" id="11" role="inner" />
  <member type="way" id="12" role="outer" />
  <member type="way" id="13" role="outer" />
  <member type="way" id="14" role="outer" />
  <member type="way" id="15" role="outer" />
  <member type="way" id="16" role="inner" />
  <member type="way" id="17" role="inner" />
  <member type="way" id="18" role="inner" />
  <member type="way" id="19" role="inner" />
  <member type="way" id="20" role="outer" />
</relation>
Figure 6: Combinaison complexe des fonctionnalités avancées

Une île au milieu d'un trou

Grâce à la possibilité d'avoir plusieurs anneaux externes dans une seule relation, il est possible de créer facilement des "îles" à l'intérieur d'un trou :
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="outer" />
</relation>

Une telle construction aurait auparavant imposé l'utilisation de plusieurs relations de polygones multiples: une avec le chemin 1 décrit comme extérieur et le chemin 2 comme intérieur, une autre avec le chemin 2 décrit comme externe et le chemin 3 comme interne. Un tel enchaînement est toujours indiqué lorsque "l'île" au milieu est un objet qui n'a rien à voir avec l'extérieur. Elle est alors qualifiée de trou dans un trou.

Figure 7: Une île au milieu d'un trou

Anneaux internes adjacents

Quelques cartographes utilisent la relation "multipolygon" pour combiner des anneaux externes ou internes qui se touchent:
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
  <member type="way" id="3" role="inner" />
</relation>

Les implémentations des polygones multiples devrait essayer de représenter ces objets comme si les anneaux adjacents formaient un seul anneau. C'est l'un des seuls cas où OpenStreetMap dévie du standard des fonctionnalités simplifiées de l'OGC. Dans ce standard, les anneaux internes adjacents ne sont pas gérés car ils ne sont pas utiles. Dans OpenStreetMap, ils sont parfois utiles lorsqu'ils sont étiquetés individuellement, par exemple, une forêt avec une clairière qui est occupée à moitié par un lac et par une parcelle agricole. il faudra bien gérer deux trous dans la forêt, l'un étiqueté avec natural=water et l'autre avec landuse=farmland. C'est un raccourci pertinent: demander aux cartographes de créer un seul trou dans la forêt et de créer ensuite tous les polygones individuels pour le lac et la parcelle agricole prendrait plus de temps.

Figure 8: Anneaux internes adjacents

Des trous dans les trous

Il est possible d'avoir des trous dans les trous d'un polygone multiple (par exemple, une forêt avec une clairière qui comporte un bouquet d'arbres au milieu).
Exemple à trouver.

On peut y parvenir en respectant la spécification des fonctionnalités simplifiées de l'OGC en alternant la création d'anneaux internes et externes. Dans notre exemple, l'extérieur de la forêt et le bouquet d'arbres seront les anneaux extérieurs. La clairière sera l'anneau interne. On peut augmenter la complexité des cas mais il vaut mieux faire simple de manière à ne pas trop embrouiller les autres cartographes.

Ce mode n'est pas forcément géré par tous les moteurs de rendus cartographiques.

Illustration à trouver.

Plus d'exemples

Plus d'exemples sont disponibles sur la page Multipolygon_Examples.

Étiquetage

  • Il est suggéré d'étiqueter les clefs qui décrivent la surface sur la relation et non sur les chemins. Dans de nombreux cas, le non-respect de cette règle aboutirait à de nombreux chemins non étiquetés.
  • Implémentation pour la compatibilité :
    • Le style de rendu est fonction de l'étiquette de relation.
    • Si la relation n'est pas étiquetée, le style du chemin externe est utilisé.
    • Si le style du chemin externe ne correspond pas ou si le style n'est pas trouvé, il faut remonter une erreur.
    • Un étiquetage sur un chemin interne implique une représentation de ce chemin intérieur. Si le style de ce chemin est le même que celui du chemin externe, le style interne est vide.

Étiquetage détaillé

Cette section concerne les développeurs logiciels, les utilisateurs doivent ajouter des étiquettes uniquement à la relation et non aux chemins !

L’étiquetage des relation de polygones multiples peut être réalisé de manière variée. Voici une liste de cas, de problèmes et de leurs solutions:

  • Il y a plus d'un chemin outer :
    La relation dispose d'étiquettes
    Utiliser ces étiquettes et ignorer celles des chemins.
    La relation n'a pas d'étiquettes mais un ou plusieurs des chemins externes ont des étiquettes identiques
    Valider les données et prendre les étiquettes des segments en appliquant le tout à l'ensemble du chemin extérieur.
    La relation n'a pas d'étiquettes et les chemins extérieurs sont étiquetés de manière hétérogène
    Il y a un problème et le rendu n'est pas garanti.
  • Il y a plus d'un chemin inner :
    Un chemin fermé n'a pas d'étiquette mais un autre en dispose
    Le chemin sans étiquette est rendu sous forme d'un trou, les chemins étiquetés le sont, selon le contenu de l'étiquette.
    Différents chemins fermés avec des étiquettes différentes
    Chaque trou est rendu selon le contenu de l'étiquette.
    Un chemin fermé où les segments ont des étiquettes différentes
    Si quelques segments n'ont pas d'étiquettes, utiliser celles des autres. Si les segments ont des étiquettes différentes, le rendu n'est pas garanti.

Rendu

  • JOSM gère ces polygones multiples depuis la révision 1203.
  • Osmarender (T@H) gère les polygones multiples.
  • La configuration du rendu de Mapnik sur www.openstreetmap.org ne gère pas complètement les polygones multiples.
  • Géré complètement par mkgmap depuis la révision 1497.
  • [GpsMid] gère la majorité des polygones multiples.
  • Il existe un Algorithm pour gérer les polygones multiples.

Exemple avec Potlatch

Exemple avec Potlatch

Sous Potlatch, les rôles d'une relation de polygones multiples doivent être assignés à chaque membre de la relation et non comme des étiquettes indépendantes. Dans le mode d'édition, sélectionnez le membre concerné et ajoutez inner ou outer sur la même ligne où est indiqué multipolygon.

Outils d'aide

Voir aussi

  • Consultez également la page The Future of Areas pour trouver des discussions pour mieux gérer les surfaces dans OpenStreetMap.