使用GeoDjango在坐标系之间转换

Lac*_*ogy 4 python django geolocation geodjango geopy

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

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

我迷失在试图找到办法的GeoDjango文档中.到目前为止,我认为我需要这样做:

gcoord = SpatialReference("4326")
mycoord = SpatialReference("22186")
trans = CoordTransform(gcoord, mycoord)
Run Code Online (Sandbox Code Playgroud)

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

mon*_*kut 8

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

>>> 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)'
Run Code Online (Sandbox Code Playgroud)


Pil*_*ill 6

如果没有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
Run Code Online (Sandbox Code Playgroud)

请注意,点已转换到位.

  • 值得记住的是,这些点是可变的,因此在转换时原始坐标会发生变化(即使已将其分配给新变量).您可以通过创建一个不会突变的新点来创建您的点的副本.例如:new_point = Point(old_point.x,old_point.y)因此当您转换old_point时,new_point将保留在旧投影中. (2认同)