Получить координаты Django GeometryField со значениями ()

У меня есть модель с 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(), потому что мне нужно сгенерировать JSON из QuerySet -

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() просто возвращает зашифрованное шестнадцатеричное значение. Как заставить его выдавать координаты?


person Bibhas Debnath    schedule 19.09.2013    source источник


Ответы (1)


После долгих исследований пришлось использовать функцию 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.

person Bibhas Debnath    schedule 23.09.2013