【问题标题】:How to make a quick db select of the range of latitude and longitude in Django?如何在 Django 中快速选择经纬度范围?
【发布时间】:2015-08-16 16:08:16
【问题描述】:

有一些表:

class Place(models.Model):
    user = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='places_user')
    title = models.CharField(max_length=250)
    address = models.CharField(max_length=500)
    latitude = models.FloatField()
    longitude = models.FloatField()
    image = models.ImageField(upload_to='place-images')

    def __unicode__(self):
        return self.title

请告诉我如何快速选择一定范围的经纬度。

例如,大约有 100,000 条记录。我需要选择一条经度为 101.25..117.39 纬度为 223.46..232.55 的记录。

我认为使用 postgres 作为数据库。

结果我认为使用 Postgis + GeoDjango。 详情:GeoDjango blog page.

【问题讨论】:

  • 如果您对位置数据进行了大量认真的工作,请考虑使用 Postgis + GeoDjango。

标签: python django postgresql django-models


【解决方案1】:

使用range 查询:

Place.objects.filter(
    longitude__range=(101.25, 117.39),
    latitude__range=(223.46, 232.55),
)

【讨论】:

  • 谢谢,有加速的方法range?
  • 好吧,range 的 SQL 等效项是 SELECT ... WHERE ... BETWEEN ...,所以我认为使用原始 SQL 进行速度优化是不可能的。
【解决方案2】:

结果我认为使用 Postgis + GeoDjango。详情:GeoDjango blog page.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多