구글맵 위젯을 쓸려고 커스텀 GeometryWidget 만들면서, Web Mercator

 
Chinseok Lee

구글맵 위젯을 쓸려고 커스텀 GeometryWidget 만들면서, Web Mercator 로서 map_srid 를 900913 로 지정해서 만들었습니다. 그런데 form 의 validation 이 실패하더군요. 에러메세지는 형식이 틀렸다고만 알려주더군요. 물론 기본 widget 으로는 잘 되구요.

테스트환경 : 우분투 14.04LTS, apt 로 geodjango + postgresql + postgis + gdal 설치

에러를 추적해서, 다음 메세지를 찾았습니다.
GDAL_ERROR 6: EPSG PCS/GCS code 900913 not found in EPSG support files. Is this a valid EPSG coordinate sysetm?

1) db 의 spatial_ref_sys 테이블을 확인해보니, 900913 이 잘 들어있습니다.

2) Web Mercator 에 대해 900913 을 쓰기도 하지만, 공식적으로는 3857 이더군요. map_srid 를 3857 로 하면 잘 됩니다. 그런데, 900913 이 왜 안되는 지 궁금합니다.

3) django 소스코드를 까보니, gdal 이 가용할 때 3857 을 쓰고 폴백으로 900913 을 쓰도록 되어있네요.
https://github.com/django/django/blob/master/django/contrib/gis/forms/widgets.py#L115

4) 개발머신 (맥) 에 설치된 Postgres.app 에서는 잘 되었었습니다. 맥머신과 우분투머신을 비교해보니, share/gdal 의 wkt 구성이 다르더군요. (gdal 버전은 동일했습니다.) 다른 파일 중에 cubewerx_extra.wkt 파일에 900913 명세가 있는 것을 확인했습니다. cubewerx_extra.wkt 파일을 우분투머신에 적용하니, widget 의 map_srid 를 900913 으로 적용해도 잘 됩니다.
https://github.com/gwaldron/godzi-web-control/blob/master/3rdParty/gdal-1.6.0/data/cubewerx_extra.wkt#L48

—-
결론 : Web Mercator 을 적용하실 때에는, 필히 공식 map_srid 인 3857 로 적용해주세요. 900913 로 지정된 좌표를 처리하셔야 될 때에는, cubewerx_extra.wkt 파일을 체크해보세요.

Advertisements