2016-09-02 12 views
1

Я пытаюсь найти соседние кухни в радиусе 4 км от данного лата/долго. Моя пространственная Бэкэнд SpatiaLite и настройки,Запрос расстояния GeoDjango с srid 4326 возвращает 'SpatiaLite не поддерживает дистанционные запросы в геометрах с геодезической системой координат.'

 

    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() 

Мой запрос от Джанго оболочки,

 

    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. 

Установка другой проецируемой строки в модели (напр. 3857, 24381 и т. Д.) Возвращает неверные результаты. Некоторая помощь здесь будет принята с благодарностью.

ответ

0

Скорее всего, ваша проблема - это SRID. Похоже, что пространственный объект не поддерживает этот тип запроса расстояния по полям с непроектированными системами координат.

Итак, вы находитесь на правильном пути, но настройка srid на другое значение не будет иметь эффекта, если в определении модели включена функция geography=True. Тип географии заставляет srid быть 4326, как описано в django geography docs.

Итак, попробуйте установить geography=False и проложить одну из проецируемых систем координат, которые вы пытались выполнить.

+0

С 'srid = 3857, geography = False', он возвращает неверные результаты (все кухни). – Dev

 Смежные вопросы

  • Нет связанных вопросов^_^