Geolonia の地図で穴あきのポリゴン(ドーナツ)を表現する

Posted by kamataryo on · 1 min read

Photo by TownePost Network on flickr, licensed under CC BY 2.0

GeoJSON を Geolonia の地図で扱う

複雑なポリゴン

1つのポリゴン内で複数の領域を使用可能にすると、様々な形のポリゴンを考えることができます。例えば以下のような種類のポリゴンです。

  • 複数の領域があるポリゴン
  • 重複する領域があるポリゴン
  • 穴の空いたポリゴン(ドーナツ)

いろいろなポリゴン

GeoJSONのフォーマットでは、 geometry.coordinates の値に複数の領域を指定することでこれらのポリゴンが表現できます。

{
  "type": "Polygon",
  "coordinates": [
    [ /* 領域1の座標 */ ],
    [ /* 領域2の座標 */ ],
    ...
  ]
}

ドーナツについては少しコツがあるため、

ポリゴン、あるいは穴

私たちが無限の広がりを持つ平面上の空間で生活しているのであれば話は単純なのですが、残念ながら地球は有限です。穴のような図形が存在します。この投稿では、十分に小さい領域で穴とは認識できない領域を単に ポリゴン 、地球のほぼ全てを覆っていて十分に小さい穴を持っている領域を ホールポリゴン と呼ぶことにします。

ポリゴン
ポリゴン
ホールポリゴン
ホールポリゴン

GeoJSON の

ポリゴンとホールポリゴンは表裏一体で、どんなポリゴンでも 1 対 1 で対応するホールポリゴンを作ることができます。互いに対になるポリゴンとホールポリゴンは、外周のデータを共有します。外周のデータとは、 GeoJSON で言う geometry.coordinates を指します。

これは、逆に言うと、1 つのデータからポリゴンとホールポリゴンの 2 通りの解釈が可能と言うことで、これらを区別する仕様が無いかどうか RFC を調べてみました。

GeoJSON の右手ルール

GeoJSON の RFC である RFC7946 を見て見ると、Polygon の定義に以下のような記述があります。

A linear ring MUST follow the right-hand rule with respect to the area it bounds

線形リングはその領域に対して右手ルールに従わなければならない

A linear ring とは直線で構成された環、つまりポリゴンやホールの外周を指します。ポリゴンの場合は反時計回りになると言うことです。ホールポリゴンの場合はその外周のデータの順序は半時計回りに、

ドーナツポリゴン

単体のホールはあまり使い道がありませんし、QGIS などの汎用の ドーナツを表現する上で重要です。



Geolonia では、ウェブ地図や位置情報を利用したウェブアプリケーションや、モバイルアプリケーションの開発を承っています。

お問い合わせ