JA:Relation:multipolygon

From OpenStreetMap Wiki
Jump to navigation Jump to search
Public-images-osm logo.svg multipolygon
Multipolygon Illustration 6.svg
説明
マルチポリゴンリレーションは複雑なエリアを表すのに使用します。 Show/edit corresponding data item.
グループ: プロパティ
メンバー

  • ウェイ - outer
  • ウェイ - inner
状態:事実上の標準


マルチポリゴンタイプのリレーションは、複雑なエリアを表すために使われます。

単純なエリアは、1本の環状のウェイを作成し、環状のウェイではなくエリアとして意味を持つものでタグ付けすることで、 OSM にマッピングされます。例えば、 landuse=forest でタグ付けされた環状のウェイはエリアと想定されますが、 junction=roundabout とタグ付けされた環状のウェイはそうなりません。

しかし、このモデルは穴がない、1本のウェイで輪郭を構成する単純なエリアにのみ有効です。それより複雑な(複数のウェイを接続して輪郭が構成されていたり、エリアが不連続の複数のエリアから構成されていたり、穴があったりするような)エリアには、マルチポリゴンリレーションが必要となります。

つまり、マルチポリゴンリレーションは outer ロールのウェイ(外郭線)と、inner ロールのウェイ(穴部)を含むことができ、マルチポリゴンを形成するためには、有効な環状をした何らかの形でなければなりません。

ドイツを中心に、境界リレーションとして type=boundary の代わりに type=multipolygon が使われていることもあります。この方法は広く受け入れられておらず、非推奨と考えてください。

タグ

キー 説明
type multipolygon メンバーに対してエリアの構築ルールを使用するようアプリケーションに指示します。
boundary * 使用しないでください (非推奨)。 代わりに type=boundary を使用します。 (これらは類似のリレーションですが、特定のロールを持つウェイではないメンバーが追加されています。)
natural * エリアを覆う地物の種類(自然、土地利用、建物など)を表現する、少なくとも1つのタグを使用します。
これらのタグのほとんどは相互に排他的です。(必要に応じて別のマルチポリゴンを使用します。共通の規則は「1つの機能は1つの要素」です。) なぜなら追加的な情報のタグで解釈が矛盾する可能性があるためです。
landuse *
building *
man_made *
amenity *
leisure *
highway pedestrian
waterway riverbank
... ...
layer * オプションの追加タグ (地物のサブタイプや階層、名前、参照など)。上記の地物の種類に応じた解釈があります。
name *
ref *
note *
... ...

メンバー

ウェイかノード ロール 出現回数 説明
ウェイ or エリア ロール outer 1つ以上 エリアの外郭を表す1本か複数のウェイ
ウェイ or エリア ロール inner 0以上 エリアの内側を表したウェイ。内側のエリアは外郭のエリアの内部に完全に収まっている必要があります。
ウェイ or エリア なし 使用しないでください (非推奨)。ツールはこれを outer として扱うか、有効な役割を推測しようとして失敗する場合があります。
ノード 任意 0 使用しないでください
リレーション 任意 0 使用しないでください

利用法

マルチポリゴンの推奨される利用方法は以下の通りです。

  • マルチポリゴンについて記述するタグ(landuse=forest など)は、リレーションに設定してください。外郭のウェイは、それ自身について記述するものがない限り、タグ付けせずにおいてください。例えば、四方をフェンスによって区切られた森林で、4本のウェイが barrier タグでタグ付けされている場合であっても、さらに森林リレーションの "outer" メンバーとして使用することができます。
  • もし内側のウェイが自身に何らか表す場合(例えば、森林に穴部があり、穴部が湖である場合など)、内側のウェイはそのようにタグ付けして構いません
  • それ以外の内側のウェイはタグなしにしてください。
  • ウェイの向きは関係ありません
  • リレーションのメンバーの順番は関係ありません(が、一覧を正しく並べ替えておくと、人間がエディタで完全性を検証するのに役立ちます)。

有効なマルチポリゴンの条件

一般に、マルチポリゴンのリレーションは "OGC Simple Feature standard" (OGC適合の図の例) に準拠したマルチポリゴンを構築できます。 この基準に適合しないマルチポリゴン (例えば、リングが交差するポリゴン) は無効なマルチポリゴンのリレーションと見なす必要があります。(内側のリングに接するものを除く。以下参照)

「有効な(閉じた)ポリゴン」は、複数のウェイの組み合わせで構成した場合は、それらの端点が結合され閉じた状態のものと定義します。

「閉じていないウェイ」は始点と終点のノードが異なっている、ノードの組み合わせと定義します。

有効なマルチポリゴンのリレーションを満たす条件は下記のようになります。

  • マルチポリゴンのリレーションのメンバーとなるウェイは1つ以上の閉じたポリゴンを構成する必要があります。リレーションに属するウェイを組み合わせる場合は、1つ以上の閉じたチェーンを構成する必要があります。[1]
  • 同一の2つの閉じていないウェイは端点を共有できません
    • 端点が2つ未満の閉じていないウェイで共有されている場合は、ポリゴンは閉じられず不正な形式になります。( 無効な例1 )
    • 端点が2つ以上の閉じていないウェイで共有されている場合は、不正な形式になり、閉じたポリゴンを明確に構成することができません。( 無効な例2 )
      (例外:偶数の閉じていないウェイで共有されているポイントは、接している内側のリングの一部である可能性があり、これは問題ありません。)
  • 内側のポリゴンは(上記のような孤立したノードを除いて)外側のポリゴンに重なったり接することはできません。重なりは形状を変更することで完全に回避することができます。

1つの outer と 1つの inner のリング

一番簡単で最もよく使われる例は1つの外側のリングと1つ以上の内側のリングで、それぞれが1つの閉じたウェイで構成されたものです。
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="inner" />
</relation>
図1: 1つの outer と 1つの inner のリング
実際の地物のタグづけの例

上の例として森の中の池を表現すると仮定します。これらの機能にタグづけする2つの方法を示します。

<relation id="1">
  <tag k="type" v="multipolygon"/>
  <member type="way" id="1" role="outer"/>
  <member type="way" id="2" role="inner"/>
</relation>
<way id="1">
  <tag k="natural" v="forest"/>
  <tag k="name" v="Grey Wood"/>
  <nd ref="101"/><nd ref="102"/><nd ref="103"/>
  <nd ref="104"/><nd ref="105"/><nd ref="101"/>
</way>
<way id="2">
  <tag k="natural" v="water"/>
  <tag k="water" v="pond"/>
  <tag k="name" v="Whitewater"/>
  <nd ref="201"/><nd ref="202"/><nd ref="203"/>
  <nd ref="204"/><nd ref="201"/>
</way>

こちらは正しくありません(推奨しません)。 マルチポリゴンは幾何学的な面のみを表現し地物のタグがありません。そして1の森林の面が2の池の面を完全に覆ってしまいます。レンダラーやアプリケーションはこの表現を正しく処理できず、池は正しく描画されても森林のエリアでマスクされ非表示になる場合があります。

<relation id="1">
  <tag k="type" v="multipolygon"/>
  <tag k="natural" v="forest"/>
  <tag k="name" v="Grey Wood"/>
  <member type="way" id="1" role="outer"/>
  <member type="way" id="2" role="inner"/>
</relation>
<way id="1">
  <nd ref="101"/><nd ref="102"/><nd ref="103"/>
  <nd ref="104"/><nd ref="105"/><nd ref="101"/>
</way>
<way id="2">
  <tag k="natural" v="water"/>
  <tag k="water" v="pond"/>
  <tag k="name" v="Whitewater"/>
  <nd ref="201"/><nd ref="202"/><nd ref="203"/>
  <nd ref="204"/><nd ref="201"/>
</way>

こちらは正しいです。 forest のタグが outer のウェイから multipolygon に移動しています。 森林のエリアは自身のタグを持つ内側の池のエリアに重なることがなくなります。タグのないウェイは1つ以上のリレーションのメンバーとして参照される場合、OSMで有効です。

1つの outer と 2つの inner のリング

<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>
図2: 1つの outer と2つの inner のリング

複数のウェイによる1つのリング

マルチポリゴンは複数のウェイからなる、内側や外側のリングを構成できます。これは非常に大きな領域を囲むマルチポリゴンに便利です。1本のウェイで全体を囲むのは実用的ではありません。
<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>
図3: 複数のウェイによる1つのリング

2つの分離した外郭

単純なマルチポリゴンとは異なり、マルチポリゴンのリレーションでは複数の outer のリングを含めることができるので、真のマルチポリゴンです。
<relation id="1">
  <tag k="type" v="multipolygon" />
  <member type="way" id="1" role="outer" />
  <member type="way" id="2" role="outer" />
</relation>
図4: 2つの分離した外郭

2つの分離した外郭と複数のウェイで構成するリング

複数のウェイの組み合わせでリングを作る機能は外側のリングだけでなく、内側のリングでも使用できます。
<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>
図5: 2つの分離した外郭と複数のウェイで構成するリング

複雑な組み合わせ

この例はすべての機能の複雑な組み合わせを示しています。3つの外郭のうち2つは1つ以上の内側のリングを持ち、それらの多くは複数のウェイで構成されています。
<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>
図6: すべての機能の複雑な組み合わせ

穴の中の島

1つのリレーションが複数の外郭を持てるので、穴の中に島を作ることができます。
<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>

このような構図は以前は、外郭の way 1 と内側の way 2 を使ったマルチポリゴン、および外郭の way 2 と内側の Way 3 のマルチポリゴンと異なったマルチポリゴンのリレーションを必要としました。そのような多段構造は中央にある『島』が外側のエリアとは別のものの時には必要ですが、『島』が外側の地物と同じ場合には穴の中の穴を作ることができます。

図7: 穴の中の島

複数の内側のリングが接する場合

複数の内側のリングを接触させるためにマルチポリゴンのリレーションを使う人もいます。
<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>

マルチポリゴンの実装では隣接するリングを1つのリングであるかのように表示しようとします。これは OpenStreetMap が OGC のシンプルで標準的な機能から逸脱したケースです。OGCの標準機能では、隣接した内側のリングは意味がないためサポートされていません。OpenstreetMapでは、個別にタグ付けするなら時に意味をなし、たとえば湖と農場で半分ずつを占めるように開拓された森林という、森林の中に2つの『穴部』があるなら、1本は natural=water として、もう1本は landuse=farmland としてタグ付けしています。これは便利なショートカットで、そうでなければ森の中に1つの穴部を作成し、湖と農地として個々にポリゴンを作らなければなりません。手順を節約しましょう。

内側のリングが外側のリングに接するようなマルチポリゴンを作ることは避けてください。

この節についての議論が、英語版の議論ページにあります。

図8: 複数の内側のリングが接する場合

無効な例

無効なマルチポリゴンリレーション の例です。この例にあるようなことをしないでください

閉じていないポリゴン

無効なマルチポリゴンの例です。ウェイ #2 とウェイ #3 が閉じていないからです。
図9: 無効な、閉じていないポリゴン

オーバーラッピングした、同じロールに属する閉じていないメンバーのウェイ

無効なマルチポリゴンの例です。ウェイ #2 とウェイ #3 の端点が2つ以上のウェイで共有されているからです。
図10: 無効な、曖昧なマルチポリゴンのリレーション

上記以外の例

実装ノート

  • 描画スタイルは常にリレーションのタグづけから取得されます。
  • 内側の領域の描画はマルチポリゴンとは独立して処理されます。内側のウェイはエリアとして閉じたリングを形成したり、マルチポリゴンの外郭にもなることがあります。
  • 境界の描画ルールを含むエリアのスタイルは競合につながることがあります。内側のウェイはライン(例:フェンス)やエリア(例:水域)、マルチポリゴン(例:森林)になる可能性があります。それぞれのソフトは異なる描画順序を定義できますが、一般的なルールはラインのスタイルに最高の優先順位を与え、マルチポリゴンの内側のウェイに最低の優先順位を与えます。
  • マルチポリゴンを処理する アルゴリズムの提案 があります。
  • 2017年5月以前には、一部のマルチポリゴンではマルチポリゴンのリレーションにはタグがなく outer のウェイにタグがありました(ウェイが1つのみかすべてのウェイが同じタグを持つ場合)。古いOSMデータを扱う場合にはこのような古いスタイルのマルチポリゴンも処理する必要があります。
  • 互換性のための実装 - もしリレーションがタグづけされていない場合は、outer のウェイの描画スタイルを使用します。
    • 1本以上の outer ウェイがある場合:
      リレーションにタグがある場合
      リレーションのタグを使います。ウェイのものはすべて無視します。
      リレーションにタグがないが、1本以上の outer ウェイが同じタグの組み合わせを持っている場合
      有効なデータであり、タグ付けされた区間からタグを取得し、すべての outer ウェイに適用します。
      リレーションにタグがなく、構成する outer ウェイのタグ付けが異なっている
      問題となる場合で、未定義の結果になります。

援助ツール

  • OSM Inspector でマルチポリゴンのチェックができます。

参照

  • The Future of Areas : OSMでエリアの扱い方の改善方法についての議論のページ