3

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

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)

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

所以它给了我:

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

代替:

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

合乎逻辑的答案是在序列化程序中定义字段:

geo_field = eventlocation__location

但这似乎对输出没有任何影响,这让我认为它可能不起作用,但它可能应该起作用。有人做过这项工作吗?如果有,怎么做?

4

2 回答 2

1

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

Django Rest Framework - 在序列化程序中获取相关模型字段

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

于 2015-01-26T13:23:06.923 回答
1

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

class AreaSerializer(gis_serializers.GeoFeatureModelSerializer):

    class Meta:
        model = Area
        geo_field = "geom"

也许不需要在 geo_field 中引用模型,而只是直接说明该字段?

这是我的序列化程序的存储库,如果这可能有帮助:

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

于 2015-01-27T13:00:41.107 回答