gpt4 book ai didi

python - GeoDjango & SpatiaLite - 过滤附近的物体

转载 作者:行者123 更新时间:2023-11-28 19:10:30 24 4
gpt4 key购买 nike

我的 models.py 具有包含此字段的用户和业务模型:

location = PointField(geography=True)

我通过地理编码服务从用户指定的地址获取 Google map 坐标(在 EPSG 4326 中)。
然后我将其保存在上面的字段中(也是 EPSG 4326)。

现在,我想要的是根据用户位置获取指定半径(例如 1 公里)内的所有业务对象:

Business.gis.filter(location__distance_lt=(request.user.location, D(km=1)))

但是它不起作用,它给了我这个错误:

ValueError: SpatiaLite does not support distance queries on geometry fields with a geodetic coordinate system. Distance objects; use a numeric value of your distance in degrees instead.

那么,有谁知道如何正确解决这个问题?提前致谢!

最佳答案

理论:

这是一个与这两个相关的非常模糊的错误:

由于您使用的是大地坐标系(如 EPSG 4326),因此您需要提供以度为单位的距离。

关于如何足够准确地将公里转换为度数,这里有一个很好的解释:How do I convert kilometres to degrees in Geodjango/GEOS?

最后我建议使用 dwithin .


实践:

  • 1km ~= 0.008 deg
  • 查询现在应该如下所示:

    Business.gis.filter(location__dwithin=(request.user.location, 0.008))

关于python - GeoDjango & SpatiaLite - 过滤附近的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40948532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com