날씨 앱을 만들어 보던 중 현재 위치 기반으로 현재 날씨를 보여주는 앱을 만들면 좋겠다 싶어서 관련 방법을 찾아보았다(솔직히 내부적으로 어떻게 돌아가는지 잘 이해는 안 된다. 그냥 정보를 가져올 수 있네? 같은 감탄만 가득).
찾아보니 Geolocation API 가 존재했고, 다행히 자바스크립트 자체적으로 내장된 API 였다.
Geolocation API 는 사용자의 위치를 지도에 표시하거나 사용자의 위치와 관련된 개인화된 정보를 표시하기 위해 웹 앱에서 사용자의 위치 정보를 검색하려는 경우 등에 활용하는 것으로 요약하자면 현재 위치 정보를 가져오는 API 이다.
이 API는 내부적으로 다양한 인스턴스를 가지지만, 대표적으로 위치 기반 관련 정보를 포괄적으로 가져오기 위해서는
getCurrentPosition() 을 활용하는 것이 편해 보였다. 거두절미 하고, 현재 위치 기반으로 정보를 받아오기 위해서는 다음과 같이 접근하면 된다(참고로 모든 브라우저 환경에서 지원이 된다고 하더라).
navigator.geolocation.getCurrentPosition(success, error, options);
// success : 성공 시 위치정보를 전달하는 콜백함수를 실행하는 영역
// error : 실패 시 에러 메시지를 전달하는 콜백함수를 실행하는 영역
// opthions : 기타 옵션들 (아래에 참고 옵션들이 있음)
navigator.geolocation.getCurrentPosition((position)=>{
console.log(position)
}, (error)=>{
console.log('error:',error)
})
입력 후 브라우저의 콘솔창으로 가보면 다음과 같이 위도, 경도 뿐만 아니라 그 외 참고 정보를 얻을 수 있었다.
참고용) options 들
const options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
enableHighAccuracy
응용 프로그램이 최상의 결과를 수신하려는 부울(불린) 값. 만약 true이고 기기가 더 정확한 위치를 제공할 수 있다면 응용 프로그램이 최상의 결과를 수신하려고 할 것이고. 이로 인해 응답 시간이 느려지거나 전력 소비량이 증가할 수 있다.
(예: 모바일 장치의 GPS 칩). 반면에, false인 경우, 장치는 더 빨리 응답하거나 더 적은 전력을 사용하여 자원을 절약할 수 있다. 기본값은 false
maximumAge
반환 가능한 캐시 위치의 최대 사용 기간(밀리초)을 나타내는 양수의 긴 값. 0으로 설정하면 장치가 캐시된 위치를 사용할 수 없으며 실제 현재 위치를 검색해야한다. Infinity로 설정된 경우 장치는 사용 기간에 관계없이 캐시된 위치를 반환해야 한다. 기본값은 0.
timeout
장치가 위치를 반환하는 데 걸리는 최대 시간(밀리초)을 나타내는 양수의 긴 값. 기본값은 Infinity이며, 이는 위치를 사용할 수 있을 때까지 getCurrentPosition()이 반환되지 않음을 의미.
<참고>https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition
<보면 좋은 자료> https://www.w3schools.com/html/html5_geolocation.asp
'자바스크립트' 카테고리의 다른 글
[javascript] 배열에서 중복값 제거 해보기 (2) | 2022.12.09 |
---|---|
[js 코드] 스크롤 시 특정 위치에서 div 배경색 바꾸기 (0) | 2022.12.02 |
[js 지식] 문서객체모델 과 노드 계층 구조 (0) | 2022.11.25 |
[javascript] 버튼 클릭 시 움직이는 슬라이딩 기능 (0) | 2022.11.10 |
[js입문] input 창에 숫자 입력을 방지토록 하는 방법?(이게 맞는지 몰겠지만) (0) | 2022.10.26 |