Я пытаюсь сделать простое приложение geodjango, которое содержит список магазинов, и когда вы помещаете в него адрес, он возвращает ближайшие магазины в ваше местоположение.Django + SpatiaLite + srid + задание расстояния
Я следую руководству, использующему PostgreSQL и Postgis, но я хочу использовать SQLite и SpatiaLite (я хочу использовать его позже в другом приложении, использующем SQLite, поэтому я не знаю, не испорчу ли я, если я пытаюсь изменить его на PostgreSQL. Обычно я не работаю с Python или SQLite или PostgreSQL)
У меня проблема при попытке сделать запрос и подсчитать расстояние.
В моей models.py у меня есть:
from django.contrib.gis.db import models as gis_models
from django.contrib.gis import geos
from django.db import models
class Shop(models.Model):
name = models.CharField(max_length=200)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
location = gis_models.PointField(u"longitude/latitude", geography=True, blank=True, null=True)
gis = gis_models.GeoManager()
objects = models.Manager()
И в views.py У меня есть функция:
def get_shops(longitude, latitude):
current_point = geos.fromstr("POINT(%s %s)" % (longitude, latitude))
distance_from_point = {'km': 10}
shops = models.Shop.gis.filter(location__distance_lte=(current_point, measure.D(**distance_from_point)))
shops = shops.distance(current_point).order_by('distance')
return shops.distance(current_point)
Я получаю сообщение об ошибке:
SQLite does not support linear distance calculations on geodetic coordinate systems.
Я читал о SRID, я думаю, что я должен измените мою модель. Но я понятия не имею, как записать это. И есть вероятность, что есть проблема с тем, как я пытаюсь получить отсортированные данные.
У меня есть два менеджера, и они работают. Я изменил: PointField (u "longitude/latitude", geography = True, blank = True, null = True) в: PointField (srid = 4326, blank = True, null = True), и я могу добавлять магазины, но это все еще не поддерживает линейные расчеты расстояния. Когда я изменяю SRID на 3857, тогда сортировка по расстоянию работает, но добавление - нет. – ajgoralczyk
уверен, мой ошибка. Я наблюдал за этой строкой 'models.Shop.gis.filter (location__distance_lte = (current_point, measure.D (** distance_from_point)))' где вы запрашиваете правильный фильтр. Таким образом, проблема не в модели. Я обновляю свой ответ –