django-rest-framework-gis GeoFeatureModelSerializer在序列化时返回更改/错误的坐标

时间:2018-06-26 18:24:02

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

当前,我有一个GeometryField,其中有一个Polygon,这是一个GEOSGeometry。我打印了多边形的坐标,在我指定的位置,它们看起来很好。然后,我保存了模型的实例,然后使用GeoFeatureModelSerializer进行反序列化,结果发现多边形的坐标已更改为非常小的并且接近赤道。

这是最初存储在GEOSGeometry中的GeometryField,并存储在数据库中。

POLYGON ((-79.94751781225206 40.44287206073545, 
          -79.94751781225206 40.44385187931003, 
          -79.94502872228624 40.44385187931003, 
          -79.94502872228624 40.44287206073545, 
          -79.94751781225206 40.44287206073545))

此后将其与GeoFeatureModelSerializer序列化并返回。

[[-0.000718176362453, 0.000363293553554], 
 [-0.000718176362453, 0.000363316438548], 
 [-0.000718135112337, 0.000363316438548], 
 [-0.000718135112337, 0.000363293553554], 
 [-0.000718176362453, 0.000363293553554]]

我不知道是什么原因造成的。

非常感谢。

1 个答案:

答案 0 :(得分:2)

此问题通过指定SRID来解决。根据Django文档,SRID为

  

为模型选择适当的SRID是开发人员应仔细考虑的重要决定。 SRID是一个整数说明符,对应于将用于解释空间数据库中数据的投影系统。 (https://docs.djangoproject.com/en/2.0/ref/contrib/gis/model-api/

我对具有特定SRID的多边形执行操作,然后返回具有不同SRID的另一个多边形。我只需要使用GEOSGeometry(polygon, srid=some_value)将要返回的多边形“投射”到想要的SRID。基本上,我要返回的多边形被投影成我不想要的其他格式。