编程语言
首页 > 编程语言> > python-GeoDjango和SpatiaLite-过滤附近的对象

python-GeoDjango和SpatiaLite-过滤附近的对象

作者:互联网

我的models.py具有用户和业务模型,具有以下字段:

location = PointField(geography=True)

我正在通过Geocode服务从用户指定的地址获取Google Maps坐标(在EPSG 4326中).
然后,将其保存在上述字段中(还有EPSG 4326).

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

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.

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

解决方法:

理论:

这是与这两个有关的相当模糊的错误:

> GeoDjango dwithin errors when using django.contrib.gis.measure.D
> Geodjango distance query not retrieving correct results

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

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

最后,我建议使用dwithin.

实践:

> 1公里〜= 0.008度
>现在查询应如下所示:

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

标签:geodjango,spatialite,python,django,django-orm
来源: https://codeday.me/bug/20191011/1889199.html