GeoDjango& SpatiaLite - 过滤附近的物体

时间:2016-12-03 13:54:14

标签: python django django-orm geodjango spatialite

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

location = PointField(geography=True)

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

现在,我想要的是根据用户位置获取指定半径范围内的所有Business对象(例如1km):

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

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

  

ValueError:SpatiaLite不支持几何体上的距离查询   具有大地坐标系的字段。距离物体;用一个   以度为单位的距离的数值。

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

1 个答案:

答案 0 :(得分:0)

<强>理论值:

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

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

以下是关于如何准确地将km转换为度数的非常好的解释: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))