2011-07-06 16 views
4

我試圖將座標信息添加到我的數據庫中,並在我的應用程序中添加了django.contrib.gis支持。我正在寫一個south數據遷移,它從數據庫中獲取地址,並要求Google提供座標(到目前爲止,我認爲我最好的選擇是使用geopy)。使用GeoDjango在座標系之間轉換

接下來我需要將返回的座標從Google座標系WGS84:4326轉換爲我的座標系WGS84:22186

我迷失在GeoDjango文檔中,試圖找到一種方法來做到這一點。這一步,我猜我需要這樣做:

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

但後來,我不知道如何使用CoordTransform對象..似乎是由GDAL的數據對象被使用,但是這是矯枉過正,因爲我想要的東西要做..

回答

5

沒有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 

請注意,點被轉換到位。

+2

值得記住的是,點是可變的,因此當您轉換它時原始座標將會改變(即使它已被分配給一個新變量)。你可以創建一個你的觀點的副本,創建一個新的觀點,不會突變。例如:new_point = Point(old_point.x,old_point.y),所以當您轉換old_point時,new_point將保留在舊投影中。 –

5

如果你已經安裝了所有正確的庫就沒有必要使用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)'