我已经搜索了一个小时左右,但似乎找不到解决方案。
我在Node.js应用程序中有一个定义的多边形,存储为:
[[-0.4449,51.4532],[-0.4586,51.4562],[-0.4591,51.4572],...
每个点均以[lng,lat]
给出。
在我的MongoDB集合中,我具有以下结构的对象:
_id: ...
givenID: ...
location: [lng, lat]
...
我将location
属性表示为:
location: {
type: [Number]
},
在我的mongoose
模式中。
我可以查询所有记录,而schema
正确地映射了location
,并且我按预期返回了[lng, lat]
,但是我似乎无法执行intersects
在我收藏的任何文件中。
我的查询如下:
let geoJson ={
"type": "Polygon",
"coordinates": geozone
};
try {
const test = await GpsLog.where('location').intersects().geometry({
type: "Polygon",
coordinates: geozone
});
其中geozone
是上面列出的多边形。
我在每个文档的2dsphere
上都有一个location
索引,以供参考。
如果我将geospatial type
作为LineString
传递,我会返回0条记录,但是如果将它作为Polygon
传递给我geojson coordinates must be an array
,但就我而言可以看出它们是一个数组(很明显)。
有什么我想念的吗?我确定该错误是我尚未发现的微小错误。
答案 0 :(得分:0)
严重的错误,必须将coordinates
属性包装在{em}的另一个{em}集合中,才能使其成为有效的[ ]
。现在工作正常。