【问题标题】:Get Django GeometryField's coordinates with values()使用 values() 获取 Django GeometryField 的坐标
【发布时间】:2013-09-25 01:37:13
【问题描述】:

我有一个带有GeometryField 的模型。像这样——

from django.contrib.gis.db import models as geo_models

class School(BaseModel):
    # Some fields
    centroid = geo_models.GeometryField(blank=True, null=True)

我正在使用 values() 方法过滤值,因为我必须从 QuerySet 中生成 JSON -

class SearchView(View, JSONResponseMixin):
    def get(self, *args, **kwargs):
        params = self.request.GET
        results = {}
        schools = School.objects.values('id', 'code', 'name')
        # More stuff here

但我也需要在 JSON 中返回纬度和经度。将centroid 放入values() 只会返回加密的十六进制值。如何让它吐出坐标?

【问题讨论】:

    标签: django json gis postgis geodjango


    【解决方案1】:

    经过大量研究,不得不像这样使用PostGIS的ST_AsGeoJSON()功能 -

    schools = School.objects.extra(
        select={
            'centroid': 'ST_AsGeoJSON("schools_school"."centroid")'
        }
    ).values('code', 'name', 'centroid')
    

    结果,我得到了 JSON 兼容数据 -

    {
        "results": [
            {
                "code": "12345678",
                "centroid": "{\"type\":\"Point\",\"coordinates\":[75.32559653,16.906422997]}",
                "name": "SCHOOL NAME"
            },
            // more
        ]
    }
    

    我仍然需要在客户端反序列化它,但我想这是可行且可以接受的。至少我得到了 JSON。

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2015-06-07
      • 2014-04-07
      相关资源
      最近更新 更多