繁体   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