【问题标题】:Convert between coordinate systems with GeoDjango使用 GeoDjango 在坐标系之间转换
【发布时间】:2011-09-29 20:49:10
【问题描述】:

我正在尝试将坐标信息添加到我的数据库中,并将django.contrib.gis 支持添加到我的应用程序中。我正在编写一个 south 数据迁移,它从数据库中获取地址,并向 Google 询问坐标(到目前为止,我认为我最好的选择是为此使用 geopy)。

接下来,我需要将返回的坐标从 Google 的坐标系 WGS84:4326 转换为我的坐标系 WGS84:22186

我迷失在 GeoDjango 文档中,试图找到一种方法来做到这一点。到目前为止,我认为我需要这样做:

gcoord = SpatialReference("4326")
mycoord = SpatialReference("22186")
trans = CoordTransform(gcoord, mycoord)

但是,我不知道如何使用 CoordTransform 对象..似乎被 GDAL 的数据对象使用,但这对于我想做的事情来说太过分了..

【问题讨论】:

    标签: python django geolocation geodjango geopy


    【解决方案1】:

    如果您正确安装了所有库,则无需使用CoordTransform 对象,如果您知道所需的srid 值,点对象的transform 方法将为您完成工作。

    >>> from django.contrib.gis.geos import Point
    >>> pnt = Point(30, 50, srid=4326)
    >>> desired_srid = 22186
    >>> pnt.transform(desired_srid)
    >>> pnt.ewkt
    u'SRID=22186;POINT (11160773.5712331663817167 19724623.9116888605058193)'
    

    【讨论】:

      【解决方案2】:

      如果没有 GDAL,CoordTransform 将无法工作,这是真的。但剩下的就很简单了:

      >>> from django.contrib.gis.gdal import SpatialReference, CoordTransform
      >>> from django.contrib.gis.geos import Point
      >>> gcoord = SpatialReference(4326)
      >>> mycoord = SpatialReference(22186)
      >>> trans = CoordTransform(gcoord, mycoord)
      
      >>> pnt = Point(30, 50, srid=4326)
      >>> print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)
      x: 30.0; y: 50.0; srid: 4326
      >>> pnt.transform(trans)
      >>> print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)
      x: 11160773.5712; y: 19724623.9117; srid: 22186
      

      请注意,该点已就地转换。

      【讨论】:

      • 值得记住的是点是可变的,因此当你转换它时原始坐标会改变(即使它已被分配给一个新变量)。您可以通过创建一个不会改变您的观点的新观点来创建观点的副本。例如:new_point = Point(old_point.x, old_point.y) 所以当你变换 old_point 时,new_point 将保留在旧投影中。
      猜你喜欢
      • 2014-08-29
      • 2015-07-07
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 2013-10-30
      • 1970-01-01
      相关资源
      最近更新 更多