Geodjango GeoJSON Serializer几何总是' null'

时间:2015-11-15 06:51:11

标签: postgis geojson geodjango serializer

您好GeoDjango的朋友和GeoJSON serlizer。我正在关注官方的GeoDjango教程: https://docs.djangoproject.com/en/1.8/ref/contrib/gis/tutorial/

所以最后我有一个PostgreSQL + PostGIS数据库,里面有他们的name,他们的iso3代码等国家/地区。特别是它们在mpoly中的几何形状为MultiPolygon(存储在wkb中)。我想使用GeoDjango从数据库中检索contries。我正在努力争取。

我可以一个接一个地检索一个对象的属性:

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文件。 Django为此创建了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

所以它序列化了一切,但不是几何。这是为什么?我究竟做错了什么?特别是?如何使用GeoDjango以GeoJSON格式从PostGIS数据库中获取几何图形?任何帮助表示赞赏。

谢谢:)

2 个答案:

答案 0 :(得分:1)

如果有其他人遇到此问题:

似乎问题出在Django 1.8中,几何必须在字段中传递才能被序列化。

更多https://code.djangoproject.com/ticket/26138

答案 1 :(得分: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未被序列化的事实。