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