운영체제 : Windows 8.1 64bit Android Studio Version : 5.0.1 Android Develop Tool : Eclipse Luna 작성날짜 : 2016-01-05 |
다음지도에서 모바일 화면 영역의 상단왼쪽 좌표를 구하는 방법
다음지도 API에서 찾아보려했으나... 구글링에서도 찾지 못하여 직접 구현해보았다.
위도와 경도 근사값은 대략으로 정한 것으로... 틀릴 수도 있음을 유의.
Display display = getWindowManager().getDefaultDisplay(); // 모바일 화면의 디스플레이 영역의 크기를 가져옴 double init_lat = 0.0000005; // 디스플레이 크기 1당 다음지도 위도 크기 근사값 double init_lon = 0.0000008; // 디스플레이 크기 1당 다음지도 경도 크기 근사값 int zoomlevel = mapview.getZoomLevel(); // 지도 줌레벨에 따라 디스플레이 크기 1당 위도, 경도 값이 달라지니까 구함. double range = Math.pow(2, zoomlevel + 1); // 지도 줌레벨에 따라 축척이 변화하므로 축척에 따른 값을 구함
MapPoint mp = mapview.getMapCenterPoint(); // 다음지도 맵뷰의 가운데 값을 구함 MapPoint.GeoCoordinate gc = mp.getMapPointGeoCoord(); // 맵포인드를 WCONG 평면좌표계의 좌표값으로 변환
// 중앙 좌표에서 왼쪽상단 좌표를 구하기 위한 연산 double top_lat = gc.latitude + (init_lat * display.getHeight() * 1.5 * range); double top_lon = gc.longitude - (init_lon * display.getWidth() * 1.5 * range); |
Top(x, y)를 구하기 위해서 Center(x,y)를 이용하였다.
위도는 가로축이고, 경도는 세로축이니까.
위도는 왼쪽으로 갈 수록 값이 낮아지고, 오른쪽으로 갈 수록 값이 높아진다.
경도는 위로 갈 수록 값이 높아지고, 아래로 갈 수록 값이 낮아진다.
그래서, Top(x, y)를 구하는 식은.
Top(latitude) = Center(latitude) + (디스플레이 1당 좌표값 * 축척 초기값 * 2^(ZoomLevel + 1)
= Center(latitude) + (0.0000005 * 1.5 * 2^(ZoomLevel +1))
// 여기서 ZoomLevel 에 1을 더해주는 이유는 다음지도의 경우 최하 줌레벨은 -2부터 시작하기 때문임.
// 그리고 2인 이유는 축척이 거의 2배씩 증가하기 때문이고.
Top(longitude) = Center(longitude) + (디스플레이 1당 좌표값 * 축척 초기값 * 2^(ZoomLevel + 1)
= Center(longitude) + (0.0000008 * 1.5 * 2^(ZoomLevel +1))
여기서 Top(x,y)를 구한후 Bottom(x,y) 구하는건 쉽다.
Bottom(latitude) = Center(latitude) - (Top(latitude) - Center(latitude))
Bottom(longitude) = (Center(longitude) - Top(longitude) + Center(longitude)
그리고.. 특정 좌표가 화면 영역내에 존재하는지 유무를 알려면, 아래의 두 조건을 만족하여야 한다.
Top(x) <= Temp(x) && Temp(x) <= Bottom(x) Top(y) >= Temp(y) && Temp(y) >= Bottom(y) |
'Programming > Android' 카테고리의 다른 글
[Android] Android에서 jsp로 데이터 요청하고 json으로 받기 (4) | 2016.02.03 |
---|---|
[Android] 문자열로 Resource 가져오기 (0) | 2016.01.11 |
[Android] 한글 초성 검색 (0) | 2015.12.21 |
[Android] Android Custom View의 생성시 주의사항 (0) | 2015.10.21 |
[Android] 설치하기 - 구버전 (0) | 2015.04.16 |