MongoDB $ geoIntersects找不到包含给定Point的多边形

时间:2016-10-30 01:36:22

标签: node.js mongodb mongoose geojson

我在数据库中有一个包含"多边形的文档"据我所知,属性是一个有效的GeoJSON对象。我想使用GeoJSON Point对象搜索数据库,以查找polygon属性中的多边形包含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
}

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

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

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

1 个答案:

答案 0 :(得分:0)

我认为您在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坐标数组的数组。数组中的第一个元素代表外环。任何后续元素代表内环(或孔)。