GeoDjango & SpatiaLite - 过滤附近的物体
GeoDjango & SpatiaLite - filtering nearby objects
我的 models.py
有包含此字段的用户和业务模型:
location = PointField(geography=True)
我正在通过地理编码服务从用户指定的地址获取 Google 地图坐标(在 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.
所以,有谁知道如何正确解决这个问题?提前致谢!
理论:
这是一个与这两个相关的非常模糊的错误:
- GeoDjango dwithin errors when using django.contrib.gis.measure.D
由于您使用的是大地坐标系(如 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))
我的 models.py
有包含此字段的用户和业务模型:
location = PointField(geography=True)
我正在通过地理编码服务从用户指定的地址获取 Google 地图坐标(在 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.
所以,有谁知道如何正确解决这个问题?提前致谢!
理论:
这是一个与这两个相关的非常模糊的错误:
- GeoDjango dwithin errors when using django.contrib.gis.measure.D
由于您使用的是大地坐标系(如 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))