RethinkDB r.polygon()-GeoJSON LinearRing必须至少有四个位置

RethinkDB r.polygon() - GeoJSON LinearRing must have at least four positions?

本文关键字:位置 四个 polygon -GeoJSON LinearRing RethinkDB      更新时间:2023-09-26

我在数据库中插入geoJSON多边形时遇到问题。

这是我试图插入的数据:

{
    "feature": {
        "type": "Feature",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    -71.17351189255714,
                    42.350224666504324
                ],
                [
                    -71.1677360907197,
                    42.34671571695422
                ],
                [
                    -71.16970919072628,
                    42.35326835618748
                ],
                [
                    -71.14341516047716,
                    42.36174674733808
                ],
                [
                    -71.17559093981981,
                    42.368232175909064
                ],
                [
                    -71.17351189255714,
                    42.350224666504324
                ]
            ]
        },
        "properties": {}
    },
    "name": "New Polygon"
}

这是我试图执行的代码:

r.table( 'homebases' ).insert( {
    xid: data.xid,
    name: data.name,
    geoType: "polygon",
    geoPoly: r.geojson( data.feature.geometry )
} ).run().then( function ( doc ) {
    return res.send( doc.generated_keys[ 0 ] )
} ).error( function ( err ) {
    console.error( err.message )
    return res.send( 500, err.message )
} )

我得到这个错误:

GeoJSON LinearRing must have at least four positions

我不太确定这里发生了什么,因为我可以用geoJSON点做同样的事情,而且效果很好。它在API文档中说,我可以添加一个"type":"Polygon"geoJSON对象。

我试着到处找,但找不到任何解决方案。我不太确定如何进行这项工作。任何帮助都将不胜感激!!!非常感谢。

输入数据不是有效的GeoJSON多边形。

根据规范[1]:

对于类型"多边形","坐标"成员必须是LinearRing坐标数组的数组。

让我们看看什么是"LinearRing坐标阵列"[2]:

LinearRing是具有4个或更多位置的闭合LineString。第一个位置和最后一个位置是相等的(它们表示相等的点)。虽然LinearRing没有明确表示为GeoJSON几何类型,但它在多边形几何类型定义中被引用。

简而言之,这里提到的输入数据在coordinates字段中缺少一个嵌套数组。多边形的coordinates必须是坐标的数组。这样,您就可以构造一个包含孔的多边形(多边形中的第一个LinearRing是外侧边,coordinates阵列中的任何后续LinearRings都将被视为孔)。

以下内容应该有效:

{
    "feature": {
        "type": "Feature",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [
                        -71.17351189255714,
                        42.350224666504324
                    ],
                    [
                        -71.1677360907197,
                        42.34671571695422
                    ],
                    [
                        -71.16970919072628,
                        42.35326835618748
                    ],
                    [
                        -71.14341516047716,
                        42.36174674733808
                    ],
                    [
                        -71.17559093981981,
                        42.368232175909064
                    ],
                    [
                        -71.17351189255714,
                        42.350224666504324
                    ]
                ]
            ]
        },
        "properties": {}
    },
    "name": "New Polygon"
}

[1]http://geojson.org/geojson-spec.html#polygon

[2]http://geojson.org/geojson-spec.html#linestring