2

我有一个带有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 中返回纬度和经度。放入只是返回加密的十六进制值centroidvalues()我如何让它吐出坐标?

4

1 回答 1

2

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

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。

于 2013-09-23T14:27:31.723 回答