본문 바로가기
Frontend/JavaScript

JavaScript : Geolocation API를 사용하여 현재 위치를 가져와보자

by 코딩쥐 2024. 8. 11.

Geolocation API는 위도와 경도같은 현재 위치 정보를 검색하는 API로, 이 기능을 사용하기 위해서는 반드시 개인정보의 사용 허가가 필요하다. Geolocation API는 window.navigator.geolocation 객체를 통해 사용할 수 있다. 

  • navigator.geolocation.getCurrentPosition(성공시 함수, 에러시 함수 , 옵션);
    사용자의 현재 위치를 얻을 수 있다. 성공 시 함수는 위치 정보를 얻는 것을 성공했을 때 GeolocationPosition 객체를 매개변수로 받는 콜백함수를 이야기하며, 에러시 함수는 위치 정보를 얻는 것을 실패했을 때 GeolocationPositionError 객체를 매개 변수로 받는 콜백함수이다.

개인정보의 사용 허가 알람이 뜨고, 그 이후 허용을 누르면 사용자의 위치에 대한 정보를 얻을 수 있다. 허용을 누르고 Geolocation에 대한 내용을 살펴보자면, 콜백 함수에서 나오는 위치 정보를 나타내는 다양한 값이 있는 것을 알 수 있다. 값을 얻을 수 없을 경우 null값을 반환한다.

 

위치 정보 값

위치 정보 설명
event.coords.accuracy 위도 및 경도의 정밀도를 반환한다. (단위 : 미터)
event.coords.altitude GPS고도를 반환한다. (단위 : 미터)
event.coords.altitudeAccuracy GPS고도의 정밀도를 만환한다. (단위: 미터)
event.coords.heading 진행 방향을 0부터 360 사이의 수치로 반환한다.  (단위 : 도)
북: 0도, 동: 90도, 남: 180도, 서: 270도 
event.coords.latitude 위도를 수치로 반환한다. (단위: 도)
event.coords.longitude 경도를 수치로 반환한다. (단위: 도)
event.coords.speed 이동 속도를 수치로 반환한다. (단위: m/s)
event.coords.timestamp 위치 정보를 얻었을 때의 시간을 나타낸다.

 

위치 정보를 얻지 못했을 때 처리 

처리 설명
event.code 현재오류를나타내는코드번호를반환한다.

1: 위치 정보 수집 허가를 얻지 못한 경우(PERMISSION_DENIED)
2: 위치정보를 얻지 못한 경우(POSITION_UNAVALABLE)
3: 타임아웃이 발생한 경우(TIMEOUT)
event.message 오류 내용을 텍스트로 반환
event.PERMISSION_DENIED 항상 1을 반환
event.POSITION_UNAVALABLE 항상 2를 반환
event.TIMEOUT 항상 3을 반환

 

위치정보 권한을 거부했을 때, 위치정보를 얻지 못해서 show_error함수가 시행되었다. 1이 나왔는데 이는 위치정보 수집허가를 얻지 못해서 나온 코드이다. 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        navigator.geolocation.getCurrentPosition(
            // 위치 정보를 얻었을 때 실행할 함수
            show_location,
            // 위치 정보를 얻지 못했을 때 시행할 함수
            show_error
        );

        function show_location(){
            console.log("위치 확인 완료")
        };

        function show_error(event){
            console.log(event.code); // 1
            console.log(event.message); //User denied Geolocation
        };
    </script>
</body>

</html>

 

옵션 매개 변수 

매개변수를 정의하기 위한 속성 설명
enableHighAccuracy true를 지정하면 브라우저에 정확한 위치정보를 요청한다. (기본값 : false)
timeout 위치정보를 얻을때 까지 기다릴 시간을 밀리초단위로 지정한다.
maximumAge 캐시된 위치정보의 유효시간(밀리초)을 지정한다. (기본값 : 0)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function show_location() {
            console.log("위치 확인 완료")
        };

        function show_error(event) {
            console.log(event.code); 
            console.log(event.message); 
        };

        let position_options = {
        //정확한 위치 요청
            enableHighAccuracy: true,
        //위치 정보를 얻을 때까지 기다릴 시간
            timeout: 20000,
        //캐시 유효 기간
            maximumAge: 0
        }

        navigator.geolocation.getCurrentPosition(
            // 위치 정보를 얻었을 때 실행할 함수
            show_location,
            // 위치 정보를 얻지 못했을 때 시행할 함수
            show_error,
            // 위치 정보에 대한 옵션 인자
            position_options
        );
    </script>
</body>

</html>