개발 환경
웹앱을 개발하는 과정에서 현 위치 정보를 조회해야 했습니다. 따라서 React + Geolocation 조합으로 현 위치 정보를 가져오려했습니다.
문제 상황
아무래도 PC에서 현 위치를 조회하는 것이다보니 모바일 기기에서 GPS를 조회하는 것보다 오차가 클 수 밖에 없었습니다. Geolocation API를 사용하는 경우 인근 Wi-Fi 네트워크의 SSID와 신호 세기를 사용하여 위치 정보를 파악합니다. 따라서 위치가 실시간으로 이동 중일 경우에는 잘못된 정보를 받아올 확률이 높아질 수 밖에 없었습니다.
실제로 테스트 결과 서울시 강남구에 있음에도 중랑구의 위치 정보를 받아오는 경우도 있었습니다. 차량을 탑승한 채 위치 이동 중에 측정되는 비정상 데이터의 비율은 15%에 가까웠습니다.
따라서 위치 정보 데이터를 필터링 할 수 있는 최소한의 장치가 필요하다 생각했고, 다음과 같은 해결 방안을 고려했습니다.
해결방안
1. 이동 평균 필터
측정된 위치 데이터를 일정한 구간 동안 평균을 내어 노이즈를 줄이는 방식입니다. 새로운 위치값이 들어올 때마다 이전 값들과 함께 평균을 계산하여 점진적인 위치 변화만 반영되도록 하는 필터입니다.
원리
1) 윈도우 크기 설정
필터링을 위해 일정 수의 최근 데이터를 사용하는데, 이를 윈도우 크기라고 합니다. 예를 들어 최근 5개의 GPS 좌표값을 사용해 평균을 구할 수 있습니다. 이때 윈도우의 크기는 5라고 합니다.
2) 평균 계산
윈도우 안의 좌표값들의 평균을 구해 현재 위치를 더 매끄럽게 보정합니다.
3) 노이즈 감소
갑작스러운 위치 데이터 변화는 주변 좌표들의 평균을 구하는 과정에서 줄어듭니다.
장점
1) 단순함
계산이 매우 간단해 성능에 영향을 주지 않고 구현도 쉽습니다.
단점
1) 느린 반응성
갑작스러운 위치 변화에 빠르게 반응하지 못하는 경우가 있어, 신호가 급격하게 변화할 경우 실제 위치보다 뒤쳐진 값을 줄 수 있습니다.
2) 정밀도 부족
윈도우 크기에 따라 필터링 효과가 달라지고, 위치 데이터에 큰 오차가 발생할 경우 충분한 보정이 되지 않았습니다.
실제 적용 및 테스트를 진행한 결과 구현의 단순함은 아주 큰 장점으로 다가왔지만, 실제 잘못된 위치 정보를 보정하는 능력은 현저히 떨어졌습니다.
2. 확장 칼만 필터
예측 값과 관측 값을 결합해 최종 상태를 추정하고 노이즈를 제거해 정확한 보정 값을 도출하는 방식입니다. GPS 위치 보정에 대표적으로 쓰이는 방식이고, 여러 논문을 보며 적용하려 노력했지만 난이도가 너무 높아 프로젝트 적용에 어려움이 있었습니다.
3. Haversine 공식
지구를 둥근 구라고 가정 후 두 위치 지점의 직선 거리를 구하는 공식입니다.
장점
1) 쉬운 구현
수학 공식을 사용해 비교적 쉽게 구현할 수 있습니다.
2) 지구의 비 구형성
지구는 완전한 구가 아니기 때문에 매우 긴 거리에선 오차가 발생할 수 있습니다.
'🩵 React' 카테고리의 다른 글
[React] 컴포넌트 분리 기준에 관한 고찰 (0) | 2024.11.23 |
---|---|
[React] 리액트를 사용하는 이유 (컴포넌트 분리가 왜 중요할까 ?) (0) | 2024.11.11 |
[UI개발] Web에서 사용할 수 있는 BottomSheet를 만들어보자 ! (4) | 2024.07.22 |
[React] Geolocation API의 느린 문제 (2) - 해결방안 (3) | 2024.06.17 |
[React] Geolocation API의 느린 문제 (1) - 문제정의 (3) | 2024.06.17 |