用值()获取Django GeometryField的坐标

时间:2013-09-19 19:48:06

标签: django json gis postgis geodjango

我有一个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()中只会返回加密的十六进制值。如何让它吐出坐标?

1 个答案:

答案 0 :(得分:2)

经过大量研究,不得不像这样使用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。