【发布时间】:2015-07-22 15:02:39
【问题描述】:
我目前正在使用 OSM DB、常规 DB、DRF3 和 django-rest-framework-gis 编写 API。
OSM DB 使用 SRID 900913,但我希望 API 仅根据 SRID 4326 输出坐标。这可以通过在我的地理查询集上使用 transform(srid=4326) 来实现,但不幸的是,这不是我的选择(解释了为什么再往下)。
据我了解,我应该能够在模型的字段定义中指定另一个 SRID,如下所示:
class Polygon(models.Model):
osm_id = models.AutoField(primary_key=True)
name = models.CharField(null=True)
way = models.PolygonField(null=True, srid=4326)
admin_level = models.CharField(default='2', null=True)
objects = models.GeoManager()
class Meta:
db_table = 'osm_poly_lu'
但 API 不断返回坐标为 900913 格式的多边形。
我理解正确吗?我应该能够将我的多边形字段上的 srid 设置为 4326 以便 Django 自动将其从我的 DB 900913 转换吗?如果是这样,我想我一定错过了什么;有什么想法可能是错的吗?我觉得自己是这个领域的真正新手 - 非常感谢任何帮助。
我不能在我的查询集上使用transform() 的原因:
我正在做的是查询我的成员表,并且成员模型是常规模型。然而,它确实与 OSM 多边形表(字段称为 osm_id_origin)有关系,这是一个 geoDjango 模型。因此,当我使用 DRF3 序列化器序列化成员时,我在成员序列化器中有一个嵌套序列化器,它将成员模型中的 osm_id_origin 字段序列化为 geoJSON。我用于创建 geoJSON 的嵌套序列化程序是 django-rest-framework-gis 序列化程序GeoFeatureModelSerializer 的子类。由于我查询的是成员模型,它是一个常规查询集,我无法在其上运行transform(srid=4326)。
【问题讨论】:
标签: django django-rest-framework gis geodjango