以下は、2つの「穴」を持つ1つのポリゴンを含む GeoJSON MultiPolygon
オブジェクト を作成する方法です。
サービス http://geojson.io/ を使用してこのオブジェクトを検証すると、エラーeach element in a position must be a number
が返されてレンダリングされませんが、「穴」のネストを削除すると、それらの1つを削除すると機能します。
多角形に複数の穴があるMultiPolygon
を説明する方法を探しています。
穴のあるポリゴンを作成する方法をコードで探していません。
GeoJSON仕様を使用して、複数の穴を持つマルチポリゴンを表す方法を探しています。
{
"type": "MultiPolygon",
"coordinates": [
[
[
[
-73.98114904754641,
40.7470284264813
],
[
-73.98314135177611,
40.73416844413217
],
[
-74.00538969848634,
40.734314779027144
],
[
-74.00479214294432,
40.75027851544338
],
[
-73.98114904754641,
40.7470284264813
]
],
[
[
[
-73.99818643920906,
40.74550031602355
],
[
-74.00298643920905,
40.74550031602355
],
[
-74.00058643920897,
40.74810024102966
],
[
-73.99818643920906,
40.74550031602355
]
],
[
[
-73.98917421691903,
40.73646098717515
],
[
-73.99397421691901,
40.73646098717515
],
[
-73.99157421691893,
40.739061265535696
],
[
-73.98917421691903,
40.73646098717515
]
]
]
]
]
}
これはどのように機能するかです:
{
"type": "MultiPolygon",
"coordinates": [
[
{polygon},
{hole},
{hole},
{hole}
]
]
}
このようではありません:
{
"type": "MultiPolygon",
"coordinates": [
[
{polygon},
[
{hole},
{hole},
{hole}
]
]
]
}
ここに例があります!
{
"type": "MultiPolygon",
"coordinates": [
[
[
[
-47.900390625,
-14.944784875088372
],
[
-51.591796875,
-19.91138351415555
],
[
-41.11083984375,
-21.309846141087192
],
[
-43.39599609375,
-15.390135715305204
],
[
-47.900390625,
-14.944784875088372
]
],
[
[
-46.6259765625,
-17.14079039331664
],
[
-47.548828125,
-16.804541076383455
],
[
-46.23046874999999,
-16.699340234594537
],
[
-45.3515625,
-19.31114335506464
],
[
-46.6259765625,
-17.14079039331664
]
],
[
[
-44.40673828125,
-18.375379094031825
],
[
-44.4287109375,
-20.097206227083888
],
[
-42.9345703125,
-18.979025953255267
],
[
-43.52783203125,
-17.602139123350838
],
[
-44.40673828125,
-18.375379094031825
]
]
]
]
}
実際の例では、それは実際には(geoJSONの意味での)MultiPolygonではなく、単純なPolygon(穴に単一の外部リングと複数の内部リングがある)です。 OSMのマルチポリゴンとの違いに注意してください(ウェイを含むリレーションとしてそれらを表し、その最初と最後のノードは同じ「ノード」要素にマージする必要があります(geoJSONに存在しないもので、 2つのノードは同じ座標を持っていますが、実際には「ポリゴン」および「マルチポリゴン」タイプのGeoJSONの追加のセグメントによって自動的に閉じられます)
OSMエディター(JOSMなど)でgeoJSONをインポートすると、それらが同じ座標を持っていても、最初と最後のノードに別々のノードがインポートされることに注意してください-重ねられたノードを検出してマージするためにJOSMバリデーターを使用する必要がありますJOSMでのインポート後、OSMへの送信前。
ただし、スクリプトまたはgeoJSONの一般的な使用では、 "type": "Polygon"のすべてのリング(座標ペアの配列)または "type": "Polygon"のメンバーは、最後のノードに同じ座標を含める必要はありません。最初のノード。これは暗黙的であるためです(ただし、互換性のためにこの重複ノードを追加することをお勧めします)。このようなリングの閉鎖は、「ポリゴン」と「マルチポリゴン」(サーフェスを表すため)では暗黙的ですが、「ポリライン」と「マルチポリライン」(曲線を表すため)では、最初の同じ座標を2倍にする必要がある場合は暗黙的ではありません。閉じた曲線を取得する最後のノード。
OSMの「マルチポリゴン」を複数の「外部」リングで表すには、geoJSONの「MultiPolygon」タイプの座標のメイン配列にいくつかの「[{outer}、{inner *}]」を含める必要があります。
{"type":"MultiPolygon", "coordinates":[
[
[[x0,y0], [x1,y1], ... [x0,y0]], /*outer1*/
[[x0,y0], [x1,y1], ... [x0,y0]], /*inner1, optional*/
[[x0,y0], [x1,y1], ... [x0,y0]], /*inner2, optional*/
],[
[[x0,y0], [x1,y1], ... [x0,y0]], /*outer2*/
],...,[
[[x0,y0], [x1,y1], ... [x0,y0]], /*outer3*/
],[
[[x0,y0], [x1,y1], ... [x0,y0]], /*outer4*/
]
}
したがって、あなたの例では、解決策は次のとおりです。
{"type":"Polygon", "coordinates":[
[[x0,y0], [x1,y1], [x2,y2], [x3,y3], [x0,y0]], /*outer1*/
[[x4,y4], [x5,y5], [x6,y6], [x4,y4]], /*inner1*/
[[x7,y7], [x8,y8], [x9,y9], [x7,y7]] /*inner2*/
]}
複数の外部リングのみがある場合(サーフェスの結合を作成するためにオーバーラップしている可能性がありますが、これはお勧めしません)、MultiPolygonである必要があり、ここでは「穴」はありません。
{"type":"MultiPolygon", "coordinates":[
[[[x0,y0], [x1,y1], [x2,y2], [x3,y3], [x0,y0]]], /*outer1*/
[[[x4,y4], [x5,y5], [x6,y6], [x4,y4]]], /*outer2*/
[[[x7,y7], [x8,y8], [x9,y9], [x7,y7]]] /*outer3*/
]}
ここでは、例でメンバーを1つだけ含むマルチポリゴンの代わりに「ポリゴン」を使用できるため、[角括弧]のレベルが1つ少ないことに注意してください。
私の知る限り、wktからgeographyに変換する場合はSUBSTR(JSON_EXTRACT(ST_ASGEOJSON(WKT))関数を使用できます。これにより、マップで表すことができます。bigqueryで見つかったのは、穴座標の穴切り替え位置を持つマルチポリゴンのようです。 u ST_ASGEOJSON()を使用し、次のリンクを確認してください: https://dev.socrata.com/docs/datatypes/multipolygon.html# 、