django-rest-framework-gis相关领域

时间:2015-01-25 23:48:49

标签: python django django-rest-framework geodjango django-rest-framework-gis

我有一个地理模型结构,其中多个事件可以具有相同的位置:

class Event(models.Model):
    name = models.CharField(max_length=128, blank=True, null=True)
    location = models.ForeignKey('MarketLocation', null=True, blank=True)

class EventLocation(models.Model):
    location = models.PointField(srid=4326)

我使用django-rest-framework-gis提供的GeoFeatureModelSerializer输出单个JSON对象,但PointField呈现为字符串而不是坐标对:

所以它给了我:

"location": "POINT (-1.909 53.7094)"

而不是:

  "point": {
        "type": "Point",
        "coordinates": [-123.0208, 44.0464],
   },

逻辑上的答案是在序列化器中定义字段:

geo_field = eventlocation__location

但这并没有对输出产生任何影响,这让我觉得它可能不起作用,但可能应该这样做。有没有人做过这项工作?如果是这样的话?

2 个答案:

答案 0 :(得分:1)

今天早上我发现了它,它也适用于DRF-gis:

Django Rest Framework - Get related model field in serializer

我在EventLocation上创建了一个序列化程序,并在EventSerializer中将其定义为“位置”,并将该点输出为geojson几何体。

答案 1 :(得分:1)

我正在做类似的事情,但使用MultiPolygon而不是Point。这是我的序列化器:

class AreaSerializer(gis_serializers.GeoFeatureModelSerializer):

    class Meta:
        model = Area
        geo_field = "geom"

也许没有必要在geo_field中引用模型,而只是直接说明字段?

这是我的Serializer的回购,如果这可能会有所帮助:

https://github.com/kelvinn/alerted-us-web/blob/master/apps/alertdb/serializers.py