gpt4 book ai didi

python - 如何反序列化 GeoServer WFS GeoJSON?

转载 作者:行者123 更新时间:2023-12-02 06:49:25 27 4
gpt4 key购买 nike

TL:DR
我想将 GeoJSON 格式的 GeoServer WFS FeatureCollection 反序列化为 GeometryField/GeometryCollection

<小时/>

让我们从模型开始:

class Layer(models.Model):
name = models.CharField(max_length=50)
layer = GeometryCollectionField(null=True)

和序列化器:

class LayerSerializer(GeoFeatureModelSerializer):

class Meta:
model = Layer
geo_field = 'layer'
fields = ('id', 'name', 'layer')

现在示例 WFS GeoJSON 如下所示:

{
"type": "FeatureCollection",
"totalFeatures": 1,
"features": [
{
"type": "Feature",
"id": "some_id",
"geometry": {
"type": "MultiLineString",
"coordinates": [
[
[4.538638998513776, 50.4674721021459],
[4.5436667765043754, 50.47258379613634],
[4.548444318495443, 50.47744374212726],
...
},
"geometry_name": "the_geom",
"properties": {
...
}
}
],
"crs": {
"type": "name",
"properties": {
"name": "urn:ogc:def:crs:EPSG::4326"
}
}
}
}

在尝试反序列化上述内容时,出现以下错误:

"layer": [
"Unable to convert to python object:
Invalid geometry pointer returned from \"OGR_G_CreateGeometryFromJson\"."
]
<小时/>

PS:我更喜欢一种解决方案(如果存在),不需要修改 GeoJSON 即可将其转换为 GeometryCollection,就像我所做的那样成功了。

最佳答案

我也遇到过类似的情况。我认为问题在于解析 GeoJSON,因为它已转换为 Python 字典。我使用 json.dump 将其恢复为 JSON 格式。

这就是我解决问题的方法。首先是为 GIS 领域制作一个字段序列化器。就我而言,我使用了 GEOSGeometry:

#serializers.py
from django.contrib.gis.geos import GEOSGeometry
import json

class GeometryFieldSerializer(serializers.Field):
def to_representation(self, instance):
if instance.footprint:
instance = json.loads(instance.footprint.geojson)
else:
instance = None
return instance

def to_internal_value(self, data):
data = str(json.dumps(data))
meta = {"footprint": GEOSGeometry(data)}
return meta

之后,您可以将其合并到您的主序列化器中。例如:

#serializers.py
class ModelSerializer(serializers.ModelSerializer):
footprint = GeometryFieldSerializer(source='*')

class Meta:
model = Model

这是我要 POST 的示例 JSON:

{"name": "test",
"footprint": {"type": "Polygon",
"coordinates": [[ [121.37, 14.02], [121.62, 14.02],
[121.62, 14.26], [121.37, 14.26],
[121.37, 14.02] ]]}
}

关于python - 如何反序列化 GeoServer WFS GeoJSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51752001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com