django - 在 geodjango 按纬度排序

标签 django geodjango

我有以下模型:

class Stop(models.Model):
    name = models.CharField(max_length=50)
    point = models.PointField()
    objects = models.GeoManager()

我想从北到南对我的停靠点进行排序。我该怎么做呢?Stop.objects.order_by('point')将它们从西到东排序。

谢谢。

这是我的完整模型:
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse

class Stop(models.Model):
    gtfs_stop_id = models.IntegerField(db_index=True, unique=True)
    name = models.CharField(max_length=50)
    point = models.PointField()
    parkings = models.GeometryCollectionField(null=True, blank=True)
    objects = models.GeoManager()

    def get_absolute_url(self):
        return reverse('core:stop', args=(self.id,))

    def __str__(self):
        return self.name

最佳答案

由于您的点场是几何而不是地理,因此您很幸运。

from django.db.models import F, Func
Stop.objects.annotate(lat=Func('point',function='ST_X')).order_by('lat')

我在这里使用 ST_X 而不是 ST_Y 因为 PostGIS 是最好的 geodjango 数据库,惯例是存储 lng,lat
如果您的点字段是 geography,则上述函数调用将不起作用,因为 ST_X和 ST_Y 仅适用于几何字段。 Geography 字段需要转换为 Geometry 才能使用这些函数。

关于django - 在 geodjango 按纬度排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37380265/

相关文章:

python - celery worker 无法连接到 docker 实例上的 redis

javascript - 如何将 Geodjango 与 Google Maps API 3 集成?

django - GeoDjango,dwithin 和 distance_lt 之间的区别?

python - 验证 CreateView 表单中日期时间输入的唯一性

python - 如何在每个月底运行 Celery 定期任务

python - 如何使用 Python 和 OSM 获取我附近的列表?

python - GeoDjango 和混合器。 'PointField'没有属性 '_meta'

postgresql - 在 AWS Beanstalk 或 EC2 实例中使用 GeoDjango 支持设置 Django

javascript - Django Rest 框架正在从数据库中返回 'u 前缀到 Angular

django - 使用 Apache WSGI 通过 DJANGO_SETTINGS_MODULE 环境变量设置 Django 设置文件