我试图在距离给定纬度/长度4公里半径范围内的附近厨房。 我的空间后端是空间和设置,
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.gis', 'rest_framework', 'oauth2_provider', 'kitchen', ) DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.spatialite', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
这是我的模特
from django.contrib.gis.db import models from django.contrib.gis.geos import Point class Kitchen(models.Model): id = models.CharField(max_length=100,primary_key=True) #id = models.AutoField(primary_key=True) name = models.CharField(max_length=100,blank=False) address = models.CharField(max_length=1000, blank=True, default='') contact_no = models.CharField(max_length=100,blank=True, default='') location = models.PointField(srid=4326, geography=True, blank=True, null=True) objects = models.GeoManager()
来自Django shell的查询是,
from kitchen.models import Kitchen from django.contrib.gis import measure from django.contrib.gis import geos current_point = geos.fromstr('POINT(%s %s)' % (76.7698996, 17.338993), srid=4326) Kitchen.objects.filter(location__distanc e_lte=(current_point, measure.D(km=4)))
返回以下值错误,
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.
在模型中设置不同的投影srid(例如3857,24381等)会返回不正确的结果。 这里的一些帮助将不胜感激。
答案 0 :(得分:1)
最有可能的问题是SRID。似乎在没有投影坐标系的字段上,spatialite不支持这种类型的距离查询。
因此,您处于正确的轨道上,但只要您在模型定义中启用geography=True
,将srid设置为其他值就不起作用。地理类型强制srid为4326,如django geography docs中所述。
因此,请尝试将geography=False
和srid设置为您尝试的其中一个投影坐标系。