대학교 4학년 1학기 캡스톤 디자인때 있었던 일이다.
농작물 원격 제어 애플리케이션을 만들던 중, 공공데이터인 기상청 데이터를 불러왔으나, 내 현재 위치에서 가장 가까운 관측소의 데이터를 불러오는 것에 문제가 생겼다. 수도 없이 많은 관측소 가운데 내 위치와 가장 가까운 관측소를 선택하려면 어떻게 해야할까?
내 현재 위치와 주변 관측소의 거리를 비교하고 가장 가까운 것을 선택하는 것이 맞을 것이다.
그러나 카카오 맵 AOS API에서는 특정 두 좌표간 거리를 구하는 공식적인 방법이 존재하지 않았다.
물론 카카오 맵 WEP API에는 아래 주소와 같이 선의 거리를 계산하는 API가 존재했지만 AOS에서 저런 동작이 가능할까 싶었다. (좌클릭으로 좌표 지정, 우클릭으로 종료) 개발자가 따로 동작을 지정해주고 사용자가 따로 익혀야하는 번거로움 + 당시 실력으로는 rest API를 온전히 가져다 쓸 수 없을거라 생각하여 저 방법은 포기하였었다.
https://apis.map.kakao.com/web/sample/calculatePolylineDistance/
따라서 다른 방법을 강구했는데, 그에 많은 도움을 준 글이 이 글이다.
https://devtalk.kakao.com/t/topic/42237/2
요점만 말하자면 A 좌표와 B 좌표 모두 위경도계라면 2번의 좌표 변환을 통해 피타고라스 정리를 사용한다면 실제 거리를 측정해낼 수 있다는 것이었다.
2번의 좌표 변환을 거치는 이유는 보통 경위도좌표계 WGS84를 사용하는데, 이는 타원체를 기준으로 한 지점의 위치를 위도, 경도, 평균해수면으로부터의 높이인 고도를 나타내는 좌표계지만, 위도가 0.00001도 차이나면 약 1.1m 차이 나는 등 오차 범위가 존재한다.
따라서 투영좌표계를 사용하여 거리를 구하자는 것인데, 이 좌표계는 3차원 지구타원체를 2차원 평면의 네모난 지도에 펼쳐 놓은 것으로 TM 좌표계는 지도상에 표시된 숫자와 숫자간격이 1,000m 이며 좌표계에서 표현하는 숫자는 1단위가 1m 이므로 도분초 방식보다 훨씬 쉽게 이해할 수 있기 때문이다.
좌표계에 관련하여 좀 더 자세히 알고 싶다면 다음 주소를 참고하였으면 한다.
1. https://blog.tadadakcode.com/3
2. https://m.blog.naver.com/comjabi/80211682723
아무튼 위경도계를 TM 좌표계로 변경하여 피타고라스의 정리를 사용하면 거리를 구할 수 있다는 것이다.
그렇게 작성했던 것이 다음 사진이다.
저러한 프로세스를 통해 해결한 문제는 다음과 같이 적용되었다.
해당 프로젝트는 정리가 되어있지 않고 조약한 코드 덩어리라 건질만한 것을 찾긴 쉽지 않을 것이다.
본문에서 언급된 부분을 찾고자한다면 아래 두 주소를 참고하면 좋을 것이라 사료된다.
1. 위 움짤의 맵 뷰 + 리스트 + 검색이 포함되어 실제로 동작하는 부분
2. 위경도 좌표계를 TM 좌표계로 변경하기 위해 rest api를 사용하는 부분
https://github.com/hwisulee/CRCS/blob/main/CRCS/app/src/main/java/com/teamcrop/CRCS/transCoord.java
해당 프로젝트 : https://github.com/hwisulee/CRCS
'개발 > 안드로이드' 카테고리의 다른 글
날씨 앱 기록 02 (2) | 2023.10.13 |
---|---|
날씨 앱 기록 01 (1) | 2023.10.06 |
kapt에서 KSP로 이전 (0) | 2023.10.05 |
AndroidStudio에서 API Key, Auth Key 관리하기 (0) | 2023.09.19 |
안드로이드에 파이어베이스 추가시 SHA1, SHA-256값 얻는 방법 (0) | 2023.03.21 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!