【问题标题】:AsyncMongo and PyMongoDB geo index queryAsyncMongo 和 PyMongoDB 地理索引查询
【发布时间】:2013-12-30 14:54:42
【问题描述】:

我正在尝试使用 $near 选项在 pymongo 和 asyncmongo 中获取地理索引。但它总是返回错误的附近位置。谁能帮我解决这个问题。

self.application.db.citydetails.find({"loc":{"$near":(latitude, longitude)}}, limit=20, callback=self.loadMoreSearchResponse)

【问题讨论】:

    标签: python mongodb pymongo asyncmongo nosql


    【解决方案1】:

    首先,确保您的 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)
    

    【讨论】:

    • 谢谢Danypype。它不起作用。但是您帮助我使 GeoIndex 结构正确。
    【解决方案2】:

    我没有意识到,我在这里有点傻。一旦我得到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)
    

    希望,以后会对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2017-09-19
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多