gpt4 book ai didi

django json序列化器没有实现geojson

转载 作者:行者123 更新时间:2023-12-02 04:41:28 25 4
gpt4 key购买 nike

我正在 geodjango 上建立一个网站。在前端,我在 openlayers 上有一张 map ,我希望能够在某些 django url 上触发 ajax 查询并获取 geojson。

问题是标准 django json 序列化器不执行 geojson。所以我有一个像这样的模型:

class Asset (models.Model):
objects = models.GeoManager()

url_name = models.CharField(max_length=200)
name = models.CharField(max_length=200)
point = models.PointField(srid=4326)

def __unicode__(self):
return self.name

我想创建一个 View :

def geojson_query(request):

#geographic query

...

assets = Asset.objects.all().filter(point__contained=bb_4326)
json = serializers.serialize("json", assets)
return HttpResponse(json)

但随后我得到的回复看起来更像是这样的:

"url_name": "Upper_Svaneti", 
"name": "Upper Svaneti",
"point": "POINT (43.0113899999999987 42.9163899999999998)"

而我想要的东西看起来像这样:

"url_name": "Upper_Svaneti", 
"name": "Upper Svaneti",
"geometry": {
"type": "Point",
"coordinates": [43.0113899999999987 42.9163899999999998]
}

所以我想我的问题是,在 django 中实现 geojson 序列化器而不完全滚动我自己的最好方法是什么?如果要自己动手,我该从哪里开始?

最佳答案

您需要编写自己的序列化器。只需继承 DjangoJSONEncoder,这是我创建的支持 Point 类型的一个:

from django.core.serializers.json import DjangoJSONEncoder
from django.contrib.gis.geos import Point

class GeoJSONEncoder(DjangoJSONEncoder):
def default(self, obj):
if isinstance(obj, Point):
return obj.coords
return super(GeoJSONEncoder, self).default(obj)

然后您可以像这样使用它:

from my_app.serializers import GeoJSONEncoder
from django.utils import simplejson

json = simplejson.dumps(data, cls=GeoJSONEncoder)

关于django json序列化器没有实现geojson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4234540/

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