![](/img/trans.png)
[英]GeoDjango distance query with srid 4326 returns 'SpatiaLite does not support distance queries on geometry fields with a geodetic coordinate system.'
[英]Django + SpatiaLite + srid + distance queries
我正在尝试做一个简单的geodjango应用程序,其中包含商店列表,当您在其中输入地址时,它会将最近的商店返回到您所在的位置。
我正在跟踪使用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不支持在大地坐标系上进行线性距离计算。
我已经阅读了有关SRID的信息,我想应该更改模型。 但是我不知道如何写下来。 我尝试获取排序后的数据可能存在问题。
我认为您的模型中存在一个问题。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模型管理器相关联。 也不需要从不同来源导入模型字段。
如果将纬线设置为4326(WGS84)之类,则SQLite does not support linear distance calculations on geodetic coordinate systems
的另一个问题。 您可以在此处找到更多信息。 或者,您可以根据三角测量实现自己的距离计算。 查看此内容以获得进一步的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.