我需要一些帮助:如何将geojson多边形插入mongodb数据库并根据某个点的坐标查询位于该点一定距离的所有多边形
以下是我将使用的geojson样本:
var testJson = {
"type" : "Polygon",
"properties": {},
"geometry" : [
[
[ 40.8003, -73.9580 ],
[ 40.7968, -73.9498 ],
[ 40.7648, -73.9737 ],
[ 40.7681, -73.9814 ],
[ 40.8003, -73.9580 ]
]
]
};
我想将它保存到mongodb数据库中并能够查询它。 为此,我执行以下操作:
我创建了一个mongoose架构:
var GeoSchema = mongoose.Schema({ "输入":{" type":String}, "属性":{" type":Object}, " geometry":{ "输入":数组, "索引":' 2dsphere' } });
我创建了一个猫鼬模型:
var GeoModel = mongoose.model(' GeoModel',GeoSchema);
我将geojson保存到我的数据库:
var post = new GeoModel(testJson);
post.save(function(err,doc){ if(err)throw err; 的console.log( "保存后:\ n%s",JSON.stringify(doc,undefined,4)); });
最后,我搜索并找到记录:
GeoModel.find({ 几何:[ [40.8003,-73.9580], [40.7968,-73.9498], [40.7648,-73.9737], [40.7681,-73.9814], [40.8003,-73.9580] ] },function(err,records){ if(err)return console.log(err); 的console.log(记录); });
我需要帮助的问题:
我将以多边形的形式加载大量的geojson数据。
假设我位于以下坐标: 40.8003,-73.9580
对于x公里的距离,我希望能够使用范围内的所有多边形。
所以,我正在考虑做一个类似于此的查询,这当然不起作用:):
GeoModel.find(
{
geometry: {
$near : {
$geometry : {
type : "Point" ,
coordinates : [40.8003, -73.9580]
},
$maxDistance : 20000
}
},
}, function(err, records) {
if (err) return console.log(err);
console.log(records);
}
);
我收到了这个错误:
{ [MongoError: Unable to execute query: error processing query: ns=coverageMap.geomodels limit=1000 skip=0
Tree: GEONEAR field=geometry maxdist=20000 isNearSphere=0
Sort: {}
Proj: {}
planner returned error: unable to find index for $geoNear query]
name: 'MongoError',
message: 'Unable to execute query: error processing query: ns=coverageMap.geomodels limit=1000 skip=0\nTree: GEONEAR field=geometry maxdist=20000 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query',
'$err': 'Unable to execute query: error processing query: ns=coverageMap.geomodels limit=1000 skip=0\nTree: GEONEAR field=geometry maxdist=20000 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query',
code: 17007 }
关于如何解决这个问题的任何想法?
谢谢!