관리 메뉴

올해는 블록체인이다.

좌표변환 JAVA 소스 본문

Android/Tip&Tech

좌표변환 JAVA 소스

리엑티브한 행복한 수지아빠 2010.12.13 18:23

이 코드는 구글맵경위도좌표계(wgs84), 다음/콩나물맵(변형 tm), 네이버맵(katech 또는 tm128) 좌표계를
서로 변환해 주는 소스코드입니다.
이 코드는 aero, hyosang 님등의 블로그를 참고로 만들었으며,
오픈소스와 카피레프트의 정신에 따라 공개하니 자유롭게 사용하시기 바랍니다.

자세한 이론적인 배경은 aero 님 블로그 (http://aero.sarang.net/map/analysis.html) 을 참고해 주세요.
사실 이런 기능은 이미 야후나 다음 맵 오픈 API 등을 통하여 이미 온라인 서비스하고 있지만
안드로이드 앱 내에 포함시키는 경우에 간혹 필요할 수도 있습니다.

사용 가능한 메소드는 다음과 같습니다. 참고로, 질문/답변 란에 올려져 있는 원래 코드를 static 메소드들로 변환하였습니다.

public static GeoPoint convert(int srctype, int dsttype, GeoPoint in_pt); //srctype,dsttype 은 GEO(경위도), TM, KATEC 중 하나
public static double getDistancebyGeo(GeoPoint pt1, GeoPoint pt2); //wgs84(경위도) 좌표계에서 두 지점 간 거리
public static double getDistancebyKatec(GeoPoint pt1, GeoPoint pt2); //tm 좌표계에서 두 지점 간 거리
public static double getDistancebyTm(GeoPoint pt1, GeoPoint pt2); //katec 좌표계에서 두 지점 간 거리

다음은 테스트 코드입니다. (여기서 GeoPoint 는 구글맵 API 의 클래스가 아닌 자체 제작한 간단한 클래스입니다)

GeoPoint in_pt = new GeoPoint(127., 38.);
System.out.println("geo in : xGeo="  + in_pt.getX() + ", yGeo=" + in_pt.getY());
GeoPoint tm_pt = GeoTrans.convert(GeoTrans.GEO, GeoTrans.TM, in_pt);
System.out.println("tm : xTM=" + tm_pt.getX() + ", yTM=" + tm_pt.getY());
GeoPoint katec_pt = GeoTrans.convert(GeoTrans.TM, GeoTrans.KATEC, tm_pt);
System.out.println("katec : xKATEC=" + katec_pt.getX() + ", yKATEC=" + katec_pt.getY());
GeoPoint out_pt = GeoTrans.convert(GeoTrans.KATEC, GeoTrans.GEO, katec_pt);
System.out.println("geo out : xGeo=" + out_pt.getX() + ", yGeo=" + out_pt.getY());
GeoPoint in2_pt = new GeoPoint(128., 38.);
System.out.println("geo distance between (127,38) and (128,38) =" + GeoTrans.getDistancebyGeo(in_pt, in2_pt) + "km");

마지막으로, 코드를 개발하고 오류를 수정하도록 동기를 부여해주시고 격려해주신
SGLEE님, 자바개발자님께도 감사의 말씀을 드립니다.

덧말: 본래는 aero 님 블로그의 매쉬업 서비스를 안드로이드에서 구현하면 참 좋겠다는 생각이 들어서
osmand 와 같은 오픈소스 프로그램을 들여다보다가 이 코드를 구현하게 되었습니다.
5 Comments
댓글쓰기 폼