我有来自欧洲的地理数据(lng,lat)数据库。 我尝试进行地理空间查询以获取圈内的所有元素。
所以,我创建了一个GeoJSON字段,并在其上创建了一个2dsphere索引。 看起来像这样:
{
"_id" : ObjectId("56c3484612aeb853a83ec336"),
"defaultLabel" : "Zoo de Mulhouse",
"weight" : NumberInt(1),
"country" : "FR",
"loc" : {
"type" : "Point",
"coordinates" : [
47.731673,
7.347819
]
}
}
和db.myCollection.createIndex({"loc":"2dsphere"});
到目前为止,这么好。 但后来我尝试了一些查询。 我从距离数据大约1,12公里(1120米)处取了一个点,并提出了一个半径为1200米的请求。
db.poi.find({loc:
{$geoWithin:
{$centerSphere:[
[47.728593,7.333486],
1200 / 6378100] // radius of earth ~6378.1Km
}
}
})
我没有结果。 有了相同的要求,我必须投入大约1650米来获得结果。 显然,这是不可接受的。
那么,我做错了什么?
答案 0 :(得分:0)
发现问题:坐标在我的遗产中存储为[lat,lgn],我在创建GeoJSON之前没有检查,所以它的顺序错误。