2015-11-15 2 views
4

Привет, друзья GeoDjango и GeoJSON serlizer. Я после официального GeoDjango Учебника: https://docs.djangoproject.com/en/1.8/ref/contrib/gis/tutorial/Geodjango GeoJSON Сериализатор геометрия всегда 'null'

Так что в конце концов у меня есть база данных PostgreSQL + PostGIS полных стран, их name, их iso3 кода и так далее. И особенно их геометрия в mpoly как MultiPolygon (хранится в wkb). Я хочу получить контингенты из базы данных с помощью GeoDjango. Я борюсь с этим.

я могу получить свойства одного объекта, один за другим:

from django.http import HttpResponse 
from django.shortcuts import render 
from django.core.serializers import serialize 
from AppName.models import WorldBorder 

[...] 

WorldBorder.objects.filter(name='Germany')[0].name   # "Germany" 
WorldBorder.objects.filter(name='Germany')[0].iso3   # "DEU" 
WorldBorder.objects.filter(name='Germany')[0].mpoly.geojson # long & correct output 

Таким образом, данные корректно сохраняются в базе данных, и я могу получить свойства объектов. Теперь я хочу получить полный файл geojson для страны. Джанго создал сериалайзер GeoJSON для этого: https://docs.djangoproject.com/en/1.8/ref/contrib/gis/serializers/

Если я использую его описанным способом:

serialize('geojson', 
    WorldBorder.objects.filter(name='Germany'), 
    geometry_field='mpoly', 
    fields=('name',) 
) 

я получаю этот выход:

u'{"type": "FeatureCollection", "crs":{"type": "name", "properties": {"name": "EPSG:4326"}}, 
    "features": [{"geometry": null,"type": "Feature", 
    "properties":{"name": "Germany" }}]}' 

, что сводит меня с ума является "geometry": null

Таким образом, он сериализует все, но не геометрию. Почему это? Что я делаю не так? И особенно? Как получить геометрию из моей базы данных PostGIS в формате GeoJSON с помощью GeoDjango? Любая помощь приветствуется.

Спасибо :)

+0

Запуская эту проблему, вы ее разрешили? – artsim

ответ

1

В случае, если кто-то работает в этот вопрос:

Кажется, проблема заключается в Django 1.8, геометрия должна быть передана в поле для его сериализации.

Подробнее здесь https://code.djangoproject.com/ticket/26138

+0

Прохладный спасибо! Я попробую это позже :) – MenschMarcus

0

Если кто-то по-прежнему заинтересован в ответе. После обновления Django я мог бы исправить это, используя обычный сериализатор из пакетов django.

from django.core.serializers import serialize 

и затем сериализовать с помощью опции 'geojson':

serialize('geojson', 
    WorldBorder.objects.filter(name='Germany'), 
    geometry_field='geom', 
    fields=('id', 'name', 'other_properties_you_want') 

и он работал как шарм! За исключением того факта, что id не получил сериализацию.

Смежные вопросы