【问题标题】:MongoDB $geoIntersects cannot find Polygons that contain a given PointMongoDB $geoIntersects 找不到包含给定点的多边形
【发布时间】:2017-03-12 12:56:17
【问题描述】:

我在数据库中有一个包含“多边形”属性的文档,据我所知,它是一个有效的 GeoJSON 对象。我想使用 GeoJSON Point 对象搜索数据库,以查找多边形属性中的多边形包含该点的文档。为此,我使用 $geoIntersects 运算符,但是,每当我执行查找时,MongoDB 都会返回错误:[错误:无法使用 $geoIntersects]。

数据库中唯一的对象:

{  
    "_id": ObjectId("581540795fd2da1b188eb09c"),
    "name":"String",
    "polygon":{  
        "coordinates":[  
            [ -90, -180 ],
            [ 90, -180 ],
            [ 90, 180 ],
            [ -90, 180 ],
            [ -90, -180 ]
        ],
        "_id": ObjectId("581540795fd2da1b188eb09d"),
        "name": "String",
        "type": "Polygon"
    },
    "__v":0
}

我正在使用猫鼬搜索数据库。用于执行搜索的查询:

{
    polygon: {
        $geoIntersects: {
            $geometry: {
                type: 'Point',
                coordinates: [<long>, <lat>]
            }
        }
    }
}

如果我将纬度和经度设置为简单的值,例如 (0, 0) 或 (1, 1)。它返回错误。根据我在别处阅读的内容,应该返回此错误的唯一原因是因为数据库中的文档不是有效的 GeoJSON 对象,但我看不出数据库中唯一的对象有任何问题。

【问题讨论】:

    标签: node.js mongodb mongoose geojson


    【解决方案1】:

    我认为您缺少 geoJSON 多边形坐标上的外部数组。您的文档应如下所示:

    {  
        "_id": ObjectId("581540795fd2da1b188eb09c"),
        "name":"String",
        "polygon":{  
            "coordinates":[[  
                [ -90, -180 ],
                [ 90, -180 ],
                [ 90, 180 ],
                [ -90, 180 ],
                [ -90, -180 ]
            ]],
            "_id": ObjectId("581540795fd2da1b188eb09d"),
            "name": "String",
            "type": "Polygon"
        },
        "__v":0
    }
    

    来自 geoJSON 规范,http://geojson.org/geojson-spec.html#id4

    Polygon 的坐标是 LinearRing 坐标数组的数组。数组中的第一个元素代表外环。任何后续元素都表示内部环(或孔)。

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 2014-01-08
      • 2014-06-02
      • 2017-06-01
      • 1970-01-01
      • 2020-03-11
      • 2020-12-28
      • 1970-01-01
      相关资源
      最近更新 更多