7. navigator를 이용한 현재 위도,경도 출력하기

BOM의 navigator 내장객체란?

Jquery에는 DOM과 BOM이 있다고 했어요.

 

그 중에서 BOM (Browser Object Model)의 내장객체중에서 navigator이 있습니다.

 

인터넷 웹 서칭을 하다보면 지도를 많이 볼 수 있을거에요. 지도를 직접 웹에 불러오도록 하는 것을 아래 코드를 통해서 보여드릴게요.

 

우선, 이번 글에서는 navigator를 통해서 현재 ip의 위도,경도를 브라우저에 출력하도록 할게요.

 

버튼타입을 누름으르써, 해당 결과값이 출력되도록 설계를 할 수 있습니다.
그렇다면, 아래와 같이 input타입의 button 결과를 받아볼 수 있도록 div를 만들어 주면 됩니다.

 

1
2
3
4
5
<body>
<input type='button' value='내  위치조회'><br>
<div id='result'></div
</body>
 
 
 

 

기본적인 틀이 만들어 졌다면, 이제 Jquery를 통한 기능들을 작성해야겠죠?

 

 

 

 

Script태그안에서 무엇을 적으면 될까요?

 

 

 

navigator.geolocation API

원래 한동안 위치정보는 일반적으로 앱을 통해서만 제공되었던 특징적인 정보이었지만, HTML5을 통해 각종 모바일 장비들의 브라우져들이 직접 위치 정보를 수집하기 시작하였다. 따라서 이제는 네이티브 앱이나 하이브리드 앱을 통해서 위치 정보를 수집할 필요 없이 직접 웹에서도 위치 정보를 수집할 수 있다. 그것이 바로 navigator.geolocation API이다.            

* 위치 정보 수집 함수

getCurrentPosition 함수는 위치 정보를 수집하는 API로 첫번째 인자는 요청이 성공 했을 경우의 콜백함수, 

두번째 인자는 요청이 실패 했을 경우의 콜백 함수, 그리고 세번째 인자는 수집 옵션을 인자로 받고 있다. 여기서 PositionOptions는 아래와 같은 인자들을 설정할 수 있다.

 

 

따라서 아래의 코드에서, navigator.geolocation.getCurrentPosition(success, error)는 성공시 success함수가 호출되고, 실패시 error함수가 호출되도록 작성된 코드입니다.

 

이때, 성공했을경우position이라는 위치정보객체를 매개변수로 사용하여

var lat = position.coords.latitude : 위도값 저장

var lon= position.coords.longitude: 경도값 저장

이를 div의 text안에 넣는다. (출력되도록)

 

반면에 , 실패했을경우, 오류객체 e를 매개변수로 div의 text안에 e.code와 e.message를 넣는다. (출력되도록)

 

 

참고할, 위치 객체
사용자의 위치는 Position 객체로 표현되며 Coordinates 객체를 참조합니다.
Position 객체는 아래의 프로퍼티를 갖는 자바스크립트 객체입니다 :
coords
 Coordinates 객체, 현재의 위치를 정의하는 객체임.
timestamp
위치를 수집한 시간을 표현하는 숫자임.
Coordinates 객체는 아래의 프러퍼티를 갖는 자바스크립트 객체입니다 :
latitude
위도, 소수점을 포함하는 숫자임.
longitude
경도, 소수점을 포함하는 숫자임.
altitude
고도, 해수면을 기준으로 미터 단위, null 일 수 도 있습니다.
accuracy
미터로 위도와 경도의 정확도를 나타내는 숫자임.
altitudeAccuracy
미터로 고도의 정확도를 나타내는 숫자, null 일 수 도 있습니다.
heading
장치가 움직이는 방향을 나타내는 숫자. 이 값은 정북에서 벗어난 각을 나타냅니다. 0도는 정북향을 나타내며 방향은 시계방향(동쪽은 90도이고, 서쪽은 270도라는 의미)입니다.  speed 값이 0이면 heading 값은 NaN이 됩니다. 장치에서 heading 정보를 제공 할 수 없을 때 이 값은 null이 됩니다.
speed
장치의 속도를 나타내며, 초당 미터 값을 숫자로 나타냅니다. 이 값은 null 일 수 도 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<head>
<meta charset=UTF-8">
<script src='jquery-3.2.1.min.js'></script>
<script>
    $(document).ready(function(){
        $('input:button').on('click',function(){
            navigator.geolocation.getCurrentPosition(success, error)
            //navigator.geolocation은 위치객체생성
            //(성공시 호출함수, 오류시 호출함수, (생략가능=gps/기지국[ip]))
        });    //Callback은 즉각적x 때가되면 알아서 생성되도록
    }); //ready-end
    
    //getCurrentPosition에 의해 위치가 성공적으로 파악이되면 success를~ 실패하면 error를~
    function success(position){ //성공객체_위치정보객체
        var lat = position.coords.latitude; //위도를 저장
        var lon = position.coords.longitude; //경도를 저장
        $('#result').text('나의위도='+lat+'나의 경도='+lon) 
    }
    function error(e){ //오류객체
        $('#result').text(e.code+':'+e.message);
    }
 
</script>
</head>
 
 
더보기
<코드결과>