簡體   English   中英

Django + SpatiaLite + srid +距離查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM