![](/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.