使用GeoDjang在坐标系之间转换

2024-07-05 15:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我在GeoDjango的医生中迷失了方向。到目前为止,我想我需要这样做:

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

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


Tags: 数据对象django信息数据库应用程序googlecontrib
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

请注意,该点已在适当位置变换。在

如果您正确安装了所有库,则不需要使用CoordTransform对象,如果您知道所需的srid值,point对象的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)'

相关问题 更多 >