김형준 GIS 연구소 (for Developers)  
Front Page
Notice | E-Mail | Admin | Write Article   
 
2011/09/07 10:59 2011/09/07 10:59
[Java] 가벼운 좌표 변환 오픈소스

오픈소스를 검색하고 사용할만하다.. 라는 항목 중에 하나가 "가볍다"입니다. 필요한 기능은 "딱" 하나인데.. 이 하나의 기능을 사용하기 위해 다른 라이브러리가 덕지 덕지 붙어야만 하는 라이브러리는 아무리 기능이 좋아도 사용할 수 없는 상황(모바일 GIS 개발)입니다..

GPS로부터 받은 WGS84 경위도좌표를 우리나라에서 흔히 사용하는 좌표계로 변환하기 위한 자바 기반의 오픈소스를 검색하던 중.. 가벼운 녀석을 찾았고.. 다시 몇일 동안의 검증을 통해 사용하기로 결정된 좌표변환 오픈소스가 바로 Java Map Projection Library입니다.

이 오픈소스가 참조하고 있는 또 다른 오픈소스 라이브러리는 행렬계산을 위한 Jama라는 오픈소스 라이브러리입니다. Jama는 이미 행렬계산을 위해 제가 예전부터 사용하고 있던터라.. 문제가 없었습니다. 아래는 간단히 경위도 좌표를 카텍 좌표계로 투영하는 코드의 예입니다.

경도 128, 위도 38이 (400000, 600000)으로 투영되는 카텍좌표 투영에 대한 정보에 대한 인자로써 7~16라인의 코드에 params라는 문자 배열로 정의하고 있습니다. 이러한 인자값은 C언어 기반의 PROJ.4의 인자.. 바로 그것입니다. PROJ.4를 유용하고 사용하고 있는 저에게는 매우 반가운 방법입니다. 실제로 투영을 위한 Projection이라는 클래스의 객체를 생성하는 코드는 18번으로 앞서 정의한 인자값을 인자로 받습니다. 그리고 경도 128, 위도 38에 대한 좌표 변환은 20번 코드이고.. 21번 코드를 통해 화면에 출력해 확인하고 있습니다.

사용자 삽입 이미지

네, 위의 화면이 실행결과입니다. 그런데 석연치 않은 부분이 있습니다. 바로 20번 코드의 transform의 입력 인자로 받은 경도 128, 위도 38에 해당하는 타원체가 무엇인지에 대한 것입니다. WGS84 타원체일까... 아니면 Bessel 타원체 일까... 답은 Bessel인데요. 이유는 Projection 클래스의 객체를 생성하기 위해 정의했던 인자들 중 11번째 코드의 +ellips=bessel에 따릅니다. 그렇다면 앞서 말씀드렸던 목표.. GPS에서 수신받은 좌표체계인 WGS84 경위도가 아니라는 것입니다.

그렇다면 WGS84 경위도좌표계를 Bessel 경위도좌표계로 변환하고 이렇게 변환된 경위좌표를 카텍으로 변환해 주면 되겠군요. 하지만 여기서 문제는 이 Java Map Porjection 오픈소스가 타원체 간의 경위도 좌표 변환을 지원하지 않는다는 점입니다. 여기에 대한 해결점은 또 다른 포스팅(http://www.gisdeveloper.co.kr/740)을 통해 공유해 드리겠습니다.
Track this back : http://www.gisdeveloper.co.kr/trackback/738
Commented by 권세영 at 2012/03/11 23:28  r x
안녕하세요. 덕분에 많은 도움이 되었습니다.
요즘 좌표변환때문에 자료를 찾고 있는데 많은 도움이 되었구요
올히신 JAMA라는 라이브러리를 활용해 보려하는데 위 소스와 반대로 WGS84좌표를 카텍좌표로 바꾸는방법은 어떻게 될까요? 오픈소스라 그런지 자료가 많지 않네요 ^.^
Replied by 김형준(Dip2K) at 2012/03/15 09:51 x
JAMA는 자바기반의 행렬 라이브러리인데요...?
여튼.. WGS84를 카텍으로 변환하는 것은.. 타원체가 서로 다르므로 위의 라이브러리로는 않되구요. http://www.gisdeveloper.co.kr/740에서 제공하는 라이브러리와 연계해서 활용하셔야 합니다.
Commented by 코봉히 at 2012/05/14 09:20  r x
동부->중부 좌표변환할 일이 생겨서 사용했는데 잘되네요 ^^
동부에서 중부로 좌표변환을 하기위해서 동부->경위도->중부 이렇게 경위도로 변환후 다시 변환하는 방법으로 좌표변환을 했는데요.. 혹시 경위도를 거치지않고 바로 변환할수 있는 방법이 있는지 궁굼하네요.. lon_0, lon_1 이렇게 사용하는 부분이 보여서 이런걸 이용해서 어떻게 하는것이 있는지 궁굼해서 여쭙게 되었습니다. ^^
활지찬 한주 되세요 ^^
Replied by 김형준 at 2012/05/15 19:38 x
안녕하세요~ 코봉히님.
위의 툴은 타원체간의 변환은 지원하지 않습니다.
동부->경위도->중부로 변환했다고 하셨는데...
경위도로의 변환은 이 글의 라이브러리만으로는 않됩니다.
이 글의 하단 부분을 읽어보시길 바랍니다. ^^

name    password    homepage
 hidden
BLOG main image
 Notice
DuraMap-Xr 소개 및 다운로드
[오픈소스] SimpleSHP v0.1
FingerEyes-Xr 소개 및 다운로드
OpenGL Tutorials
 Category
전체 (552)
GIS 개발 (155)
프로그래밍 (240)
스치는 생각들 (128)
번역 또는 집필 (3)
영작학습 (6)
 TAGS
GIS Xr OpenGL Shader BlackPoint FingerEyes Algorithm Java Map Engine WPF
 Calendar
«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
 Recent Entries
English Writing Study
English Writing Study
English Writing Study 4
English Writing Study 3
English Writing Study 2
 Recent Comments
안녕하세요~ 코봉히님....
김형준 - 05/15
동부->중부 좌표변환할 일...
코봉히 - 05/14
잘봤습니다.
지나가다 - 05/11
지금 사용하고 있는 dem...
김형준 - 05/04
단면도 측정 결과를 보고....
아무개 - 05/02
출처를 밝히시면 마음껏...
김형준(Dip2K) - 05/02
하나더 말씀을 안드렸네요...
Begginer - 05/02
고맙습니다. OpenGL으로...
Begginer - 05/02
네, 기존 버전에 대해 불...
김형준(Dip2K) - 05/01
정말 감사합니다..새로운...
조성각 - 05/01
 Archive
2012/05
2012/04
2012/03
2012/02
2012/01
2011/12
2011/11
2011/10
2011/09
2011/08
2011/07
2011/06
 Link Site
Adobe Flex 3 Help
Cartograph 2.0
GADM
GIS 위키디피아
GIS 프로그래밍 연구소
MapTools.org
OGC
OGRE3D
OSGeo 한국 지부
Paul Bourke Site
Wikipedia
국가수자원관리 정보시스템
국립지리원
국토연구원
국토해양부
네이버 과학
대한측량협회
류광님의 블로그
이민파님의 공간분석과 리...
지오서비스(GeoService)
 Visitor Statistics
Total : 982092
Today : 114
Yesterday : 582
태터툴즈 배너
rss