Сериализатор Django geojson выводит координаты в неправильном порядке

Я использую сериализатор geojson Django, но он не получает координаты в правильном порядке (согласно спецификация GeoJson). Вместо (восток, север) я получаю (широта, долгота), и когда я отображаю карту, я, очевидно, получаю неправильные позиции, поскольку долгота интерпретируется как широта, а широта как долгота.

Это мои исходные координаты:

[(38.8976094, -77.0367349), (19.4348892, -99.1447678)]

Это код сериализации:

from django.core.serializers import serialize
serialize('geojson', Place.objects.all(),  
          geometry_field='location', fields=('name', ))

И вот что я получаю при сериализации:

u'{"type": "FeatureCollection",
 "crs": {"type": "name", "properties": {"name": "EPSG:4326"}}, 
 "features": [{"geometry": {"type": "Point", "coordinates": [38.8976094, -77.0367349]}, "type": "Feature", "properties": {"name": "White House"}}, {"geometry": {"type": "Point", 
 "coordinates": [19.4348892, -99.1447678]}, "type": "Feature", "properties": {"name": "Palacio de Bellas Artes"}}]}'

Я установил GDAL, и все остальное работает нормально. Правильно ли я предполагаю, что сериализатор должен выбрать правильный порядок координат или мне нужно сделать это вручную?


person pascalin    schedule 29.06.2016    source источник


Ответы (1)


Вы получаете долготу и широту в своем выводе geojson, потому что у вас, похоже, выбран srid 4326 по умолчанию для поля местоположения в вашей модели Places. Сериализатор GeoJSON также использует 4326 в качестве srid по умолчанию при использовании . Вы пытаетесь преобразовать исходные координаты широты/долготы в другую систему координат/srid, чем 4326/WGS84 (вы, кажется, ожидаете восточного и северного направлений?) при сериализации координат? Пожалуйста, дополните.

Мое первоначальное предложение — попытаться реализовать приложение django-geojson в вашем проекте. «[D]jango-geojson — это набор помощников для (де)сериализации объектов (Geo)Django в GeoJSON.». Я использую его, если мне нужно вывести правильно отформатированный geojson.

person cassius    schedule 21.07.2016
comment
Спасибо @cassius, я решил эту проблему с сохранением моих координат в базе данных как долготу, широту вместо широты, долготу, таким образом, мой вывод GeoJSON теперь правильный, но я обязательно последую вашему предложению реализовать django-geojson в моем проекте, так как мне нужно будет сериализовать данные из более чем одной модели, а сериализатор GeoJSON по умолчанию от Django, похоже, не имеет такой опции. - person pascalin; 24.07.2016