2011-07-06 2 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 개체를 사용할 필요가 없으며 원하는 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)'