django json序列化程序不实现geojson [重复]
Posted
技术标签:
【中文标题】django json序列化程序不实现geojson [重复]【英文标题】:django json serializer does not implement geojson [duplicate] 【发布时间】:2010-11-20 19:27:37 【问题描述】:我正在geodjango 上建立一个网站。在前端,我有一张关于 openlayers 的地图,我希望能够在一些 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
我想创建一个视图:
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 序列化程序而不完全滚动我自己的最佳方法是什么?如果涉及到我自己的滚动,我从哪里开始?
【问题讨论】:
【参考方案1】:您需要编写自己的序列化程序。只继承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)
【讨论】:
【参考方案2】:所以...我做了一些不太漂亮的事情。我对序列化程序的非 geojson 部分进行了硬编码,并使用 GEOS 中的 json 函数来获取 geojson 部分。
所以模型中的方法是这样的:
def get_footprint_json(self):
geojson=self.footprint.json
json='"type": "Feature","geometry": %s,"properties": "name":"%s","url_name":"%s"'%(geojson,self.name,self.url_name)
return json
而且...我的视图如下所示:
json=' "srid":4326, "type": "FeatureCollection","features": ['+','.join([asset.get_footprint_json() for asset in assets])+'] '
return HttpResponse(json)
我很想知道其他人是否有更好的方法,或者 django 是否更新了他们的序列化程序以包含 geojson。
【讨论】:
以上是关于django json序列化程序不实现geojson [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JSON 使用 simplejson 序列化 Django 模型
使用 Django REST 框架序列化程序将 JSON 请求保存到数据库