我正在尝试使用$near
选项在 pymongo 和 asyncmongo 中获取地理索引。但它总是返回错误的附近位置。谁能帮我解决问题。
self.application.db.citydetails.find({"loc":{"$near":(latitude, longitude)}}, limit=20, callback=self.loadMoreSearchResponse)
我正在尝试使用$near
选项在 pymongo 和 asyncmongo 中获取地理索引。但它总是返回错误的附近位置。谁能帮我解决问题。
self.application.db.citydetails.find({"loc":{"$near":(latitude, longitude)}}, limit=20, callback=self.loadMoreSearchResponse)
首先,确保您的citydetails.loc
数据存储为 GeoJSON 点:
{loc: {type: "Point", coordinates: [ longitude, latitude ]}}
请注意,保存地理空间点时,经度必须放在coordinates
数组中的 0 索引处。
然后,更改您的代码在查询中将经度放置在纬度之前:
self.application.db.citydetails.find({"loc":{"$near":(longitude, latitude)}}, limit=20, callback=self.loadMoreSearchResponse)
我没有意识到,我在这里有点傻。一旦我得到POST
论据,我试图在查询中传递它
coordinates = self.get_argument("coordinates", "")
latitude = coordinates.split("_")[0]
longitude = coordinates.split("_")[1]
self.application.db.cityinfo.find({"loc":{"$near":(longitude, latitude)}}, limit=20, callback=self.loadMoreSearchResponse)
看来,我正在将字符串传递给查询。我刚刚转换为float
然后它工作正常
coordinates = self.get_argument("coordinates", "")
latitude = float(coordinates.split("_")[0])
longitude = float(coordinates.split("_")[1])
self.application.db.cityinfo.find({"loc":{"$near":(longitude, latitude)}}, limit=20, callback=self.loadMoreSearchResponse)
希望,它会在未来对其他人有所帮助。