我正在尝试使用简单的geodjango应用程序,其中包含商店列表,当您在其中放置地址时,它会将最近的商店返回到您的位置。
我正在学习使用PostgreSQL和Postgis的教程,但是我想使用SQLite和SpatiaLite(我想稍后在另一个使用SQLite的应用程序中使用它,所以我不知道我是否赢了#t搞砸了,如果我试着将它改成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不支持大地坐标系上的线性距离计算。
我读过SRID,我想我应该改变我的模型。但我不知道如何写下来。并且我有可能在尝试获取排序数据方面存在问题。
答案 0 :(得分:0)
我认为你的models.py中存在一个问题
您的模型管理器仍然是默认的模型管理器。
你的模型看起来应该是这样的。
from django.contrib.gis.db import models
from django.contrib.gis import geos
class Shop(models.Model):
name = models.CharField(max_length=200)
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
location = models.PointField(u"longitude/latitude", geography=True, blank=True, null=True)
objects = models.GeoManager()
所以这个模型与geodjango模型管理器相关联。它也不需要从不同的源导入modelfields。 德尔>
如果你将srid设置为4326(WGS84),你可以摆脱另一个问题SQLite does not support linear distance calculations on geodetic coordinate systems
。您可以找到更多信息here。
或者您基于三角测量实现自己的距离计算。
请查看this以获得进一步的解释。