【问题标题】:Geodjango GeoJSON Serializer geometry always 'null'Geodjango GeoJSON 序列化器几何总是“空”
【发布时间】:2016-02-16 11:29:44
【问题描述】:

你好 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 从我的 PostGIS 数据库中获取 GeoJSON 格式的几何图形?任何帮助表示赞赏。

谢谢你:)

【问题讨论】:

  • 遇到同样的问题,你解决了吗?

标签: postgis geojson geodjango serialization


【解决方案1】:

如果有人仍然对答案感兴趣。在 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 没有被序列化。

【讨论】:

    【解决方案2】:

    如果其他人遇到这个问题:

    似乎问题出在 Django 1.8 中,必须在字段中传递几何图形才能对其进行序列化。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-25
      • 2020-05-08
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多