GeoDjango distance query with srid 4326 returns 'SpatiaLite does not support distance queries on geometry fields with a geodetic coordinate system.'
我正试图去附近的厨房,距离给定的纬度/长度在4公里范围内。
我的空间后端是空间和设置,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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'), } } |
这是我的模特
1 2 3 4 5 6 7 8 9 10 11 | 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的查询是,
1 2 3 4 5 6 7 8 | 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))) |
返回以下值错误,
1 | 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等)会返回不正确的结果。
这里的一些帮助将不胜感激。
很可能你的问题是SRID。 看起来,在没有投影坐标系的字段上,spatialite不支持这种类型的距离查询。
因此,您处于正确的轨道上,但只要在模型定义中启用
因此,尝试将