下面我想要的是创建一个包含一个多边形的 object,其中有两个“洞”。
当我使用服务http://geojson.io/验证这个对象时,它会返回一个错误each element in a position must be a number,并且它不会呈现,但是如果我移除“漏洞”嵌套,删除其中的一个,那么它就能工作了。
我正在寻找一种方法来描述一个MultiPolygon,其中的多边形可以有多个洞。
我并不是在代码中寻找一种创建带有孔的多边形的方法。
我正在寻找一种方法来使用GeoJSON规范来表示有多个孔的MultiPolygons .

{
"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
]
]
]
]
]
}发布于 2017-05-02 14:33:32
这就是它的工作原理:
{
"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
]
]
]
]
}发布于 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*}“,即
{"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*/
]}注意,这里少了一层正方形大括号,因为我们可以在这里使用“多边形”,而不是在示例中只包含一个成员的多多边形。
发布于 2019-07-17 03:49:07
据我所知,如果从wkt转换到地理,可以使用SUBSTR(JSON_EXTRACT(ST_ASGEOJSON)函数)。这样你就可以用地图来表示。我在bigquery中发现的是,当您使用ST_ASGEOJSON()时,似乎是带有孔的多多边形切换孔坐标的位置。看看这个链接:https://dev.socrata.com/docs/datatypes/multipolygon.html#,
https://stackoverflow.com/questions/43645172
复制相似问题