web-dev-qa-db-ja.com

複数の穴を持つGeoJSON MultiPolygon

以下は、2つの「穴」を持つ1つのポリゴンを含む GeoJSON MultiPolygonオブジェクト を作成する方法です。

サービス http://geojson.io/ を使用してこのオブジェクトを検証すると、エラーeach element in a position must be a numberが返されてレンダリングされませんが、「穴」のネストを削除すると、それらの1つを削除すると機能します。

多角形に複数の穴があるMultiPolygonを説明する方法を探しています。

穴のあるポリゴンを作成する方法をコードで探していません。

GeoJSON仕様を使用して、複数の穴を持つマルチポリゴンを表す方法を探しています。

enter image description here

{
  "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
          ]
        ]
      ]
    ]
  ]
}
13
ThomasReggi

これはどのように機能するかです:

{
  "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
        ]
      ]
    ]
  ]
}
23
ThomasReggi

実際の例では、それは実際には(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つ少ないことに注意してください。

8
verdy_p

私の知る限り、wktからgeographyに変換する場合はSUBSTR(JSON_EXTRACT(ST_ASGEOJSON(WKT))関数を使用できます。これにより、マップで表すことができます。bigqueryで見つかったのは、穴座標の穴切り替え位置を持つマルチポリゴンのようです。 u ST_ASGEOJSON()を使用し、次のリンクを確認してください: https://dev.socrata.com/docs/datatypes/multipolygon.html#

0
Topgyal Gurung