首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多孔GeoJSON MultiPolygon

多孔GeoJSON MultiPolygon
EN

Stack Overflow用户
提问于 2017-04-26 21:54:15
回答 3查看 31.1K关注 0票数 22

下面我想要的是创建一个包含一个多边形的 object,其中有两个“洞”。

当我使用服务http://geojson.io/验证这个对象时,它会返回一个错误each element in a position must be a number,并且它不会呈现,但是如果我移除“漏洞”嵌套,删除其中的一个,那么它就能工作了。

我正在寻找一种方法来描述一个MultiPolygon,其中的多边形可以有多个洞。

我并不是在代码中寻找一种创建带有孔的多边形的方法。

我正在寻找一种方法来使用GeoJSON规范来表示有多个孔的MultiPolygons .

代码语言:javascript
复制
{
  "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
          ]
        ]
      ]
    ]
  ]
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-02 14:33:32

这就是它的工作原理:

代码语言:javascript
复制
{
  "type": "MultiPolygon",
  "coordinates": [
    [
      {polygon},
      {hole},
      {hole},
      {hole}
    ]
  ]
}

不是这样的:

代码语言:javascript
复制
{
  "type": "MultiPolygon",
  "coordinates": [
    [
      {polygon},
      [
        {hole},
        {hole},
        {hole}
      ]
    ]
  ]
}

举个例子!

代码语言:javascript
复制
{
  "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
        ]
      ]
    ]
  ]
}
票数 43
EN

Stack Overflow用户

发布于 2017-10-07 22:13:17

实际上,对于您的示例来说,它实际上不是一个MultiPolygon (在geoJSON的意义上),而是一个简单的多边形(有一个外部环和多个洞内环)。注意OSM中多多边形的区别(表示它们是一个包含方法的关系,其第一个和最后一个节点应该合并到同一个“节点”元素中(在geoJSON中不存在这种元素,只有两个节点具有相同的坐标,但实际上将由“多边形”和"MultiPolygon“类型的GeoJSON类型的附加段自动关闭)。

注意,当您在OSM编辑器(例如JOSM)中导入一个geoJSON时,它们将与第一个和最后一个节点的不同节点一起导入,即使它们具有相同的坐标--您需要使用JOSM验证器来检测叠加的节点,并在导入JOSM之后但在提交到OSM之前合并它们。

但是,在脚本或geoJSON的一般用法中,"type":"Polygon“或"type":"Polygon”中的所有环(坐标对数组)都不需要包含与第一个节点相同的最后一个节点的坐标,因为它是隐式的(但为了兼容性,仍然建议添加这个重复的节点)。对于“多边形”和"MultiPolygon“(因为它们代表曲面),环的这种闭包是隐含的,但是对于"Polyline”和"MultiPolyline“(因为它们代表曲线),您仍然需要为第一个和最后一个节点包含两倍相同的坐标才能得到闭合曲线。

若要表示具有多个“外部”环的OSM“多多边形”,必须在geoJSON "multipolygon“类型的主坐标数组中包含多个”{outer},{inner*}“,即

代码语言:javascript
复制
{"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*/
  ]
]}

因此,对于您的例子,解决方案是:

代码语言:javascript
复制
{"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,在这里您将没有“洞”:

代码语言:javascript
复制
{"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*/
]}

注意,这里少了一层正方形大括号,因为我们可以在这里使用“多边形”,而不是在示例中只包含一个成员的多多边形。

票数 16
EN

Stack Overflow用户

发布于 2019-07-17 03:49:07

据我所知,如果从wkt转换到地理,可以使用SUBSTR(JSON_EXTRACT(ST_ASGEOJSON)函数)。这样你就可以用地图来表示。我在bigquery中发现的是,当您使用ST_ASGEOJSON()时,似乎是带有孔的多多边形切换孔坐标的位置。看看这个链接:https://dev.socrata.com/docs/datatypes/multipolygon.html#

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43645172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档