我的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不支持几何体上的距离查询 具有大地坐标系的字段。距离物体;用一个 以度为单位的距离的数值。
那么,有谁知道如何妥善解决这个问题?提前谢谢!
答案 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))