我在数据库中有一个包含"多边形的文档"据我所知,属性是一个有效的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对象,但我看不出数据库中唯一的对象有什么问题。
答案 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坐标数组的数组。数组中的第一个元素代表外环。任何后续元素代表内环(或孔)。