◆ ESSAY
좌표를 계산할 때는 이벤트 앞뒤에서 좌표가 확인되는 점을 고른다. 주변 위치를 설명할 때는 이름이 있는 점 중 이벤트와 가까운 것을 찾는다. 추가 위치 정보를 표시한다면 그 값이 기록된 점을 따로 골라야 한다.
| 필요한 값 | 기준점 선택 |
|---|---|
| 좌표 계산 | 이벤트 앞뒤에서 가장 가까운 좌표 보유 점 |
| 주변 위치명 | 이름이 있는 점 중 거리 차가 가장 작은 점 |
| 추가 위치 설명 | 해당 정보가 있는 점 중 거리 차가 가장 작은 점 |
한 행에서 좌표와 설명을 모두 가져오면 한 종류의 정보가 다른 계산을 막을 수 있다. 나는 목적에 따라 기준점을 나눴다. 같은 거리에 후보가 여럿일 때는 거리와 고유 식별값으로 순서를 고정했다. 데이터베이스 검색과 메모리 검색이 서로 다른 점을 고르지 않게 하려는 선택이다.
앞뒤 기준점의 거리를 d₀, d₁, 이벤트 거리를 D라고 하면 두 점 사이의 비율은 다음과 같다.
t = (D - d₀) / (d₁ - d₀)
위도와 경도 각각에 이 비율을 적용한다.
latitude = lat₀ + (lat₁ - lat₀) × t
longitude = lon₀ + (lon₁ - lon₀) × t
1,000m와 1,600m 사이에 있는 1,300m 이벤트라면 t는 0.5다. 이벤트가 두 기준점의 중간에 있으므로 좌표도 두 좌표의 중간값으로 계산된다.
기준점이 한쪽에만 있을 때는 외삽하지 않기로 했다. 첫 기준점이 1,000m부터 있고 이벤트가 900m라면 앞쪽 점이 없다. 좌표를 내놓기보다 위치를 알 수 없다고 반환해야 결과에 근거가 부족하다는 사실이 남는다.
이 방법은 위도와 경도를 각각 직선으로 보간한다. 실제 경로의 굴곡이나 우회는 반영하지 않는다. 경로를 따라 잰 거리와 지도 위의 두 점 사이 거리가 다를 수도 있다.
그래서 결과 좌표의 소수점 자릿수는 정확도의 증거가 아니다. 기준점 간격과 거리 측정의 오차가 결과에 영향을 준다. 사용자에게 위치를 보여 줄 때는 계산값임을 함께 전달해야 한다.
각 화면이나 메시지가 위치를 따로 계산하면 서로 다른 기준점을 고를 수 있다. 지도 마커와 본문의 기준점 이름이 어긋나는 일을 막으려고 좌표와 설명을 한 결과 객체에 모아 다음 단계에 넘겼다.
위치 결과
좌표
주변 위치와 거리
추가 위치 설명과 거리
도로명·지번 주소
경로상의 위치 비율
객체를 합치면 편의를 위해 값을 묶는 데 그치지 않고 계산 결과도 보존한다. 어떤 값은 보간으로, 어떤 값은 가장 가까운 후보 검색으로 정했다는 계산 결과를 다음 단계에서도 그대로 쓰게 한다.