HTML5 강좌 23강 - 위치 정보(Geolocation API), 지도 서비스

 

요즘 스마트폰이 대중화 되면서, 위치기반 APP이 아주 많이 개발됐죠.

HTML5에서도 위치를 찾고, 지도를 만들 수 있습니다.

 

*Geolocation API : 현재의 위치 정보를 검색할 때 사용

GPS가 내장된 스마트폰에서 훨씬 정확한 위치 정보 파악이 가능하여 모바일 브라우저에서 유용한 API 입니다.

위치 정보는 개인 정보 이므로 사용자의 동의가 필요하죠.

 

*현재 위치

현재 위치를 알아내기 위해서 navigator 객체의 getCurrentPosition() 메소드를 사용합니다.

-사용법-

navigator.geolocation.getCurrentPosition( 

successCallback, errorCallback, options )

 

*현재 위치 관련 정보 속성 : getCurrentPosition()로 구할 수 있는 위치 정보의 속성

•coords.longitude : 위도

•coords.altitude : 경도

•coords.latitude : 표고

•coords.altitudeAccuracy : 위도, 경도의 오차

•coords.heading : 표고의 오차

•coords.accuracy : 디바이스의 진행방향 (북쪽 기준으로 시계방향의 각도로 표시)

•coords.speed : 디바이스의 미터/초 단위의 진행 속도

•timestamp : 위치 정보를 얻은 시각

 

현재 위치 정보를 찾는 예제1

 

window.onload = function() { 

//브라우저에서 웹 지오로케이션 지원 여부 판단

if (navigator.geolocation) { 

navigator.geolocation.getCurrentPosition(MyPosition); 

} 

} 

function MyPosition(position) { 

var lat = position.coords.latitude; 

var lng = position.coords.longitude; 

alert("위도 : " + lat + " 경도 : " + lng ); 

}

 

위 코드를 테스트 해보겠습니다.

(크롬 설정 오류로 인해 익스플로러 9.0 버전에서 테스트를 진행했습니다)

 

 

html5_23_01.jpg

 

 

 

*현재 위치 관련 오류 속성

-getCurrentPosition()의 오류 정보와 관련된 속성-

•code : 오류 코드

•message : 오류 메시지

-오류 코드 값-

•UNKNOWN_ERROR : 0, 알 수 없는 오류

•PERMISSION_DENIED : 1, 권한 없음

•TIMEOUT : 2, 위치 정보를 얻을 수 없음

•POSITION_UNAVAILABLE : 3, 시간 제한 초과


*현재 위치 관련 지정 옵션

-getCurrentPosition()에서 지정할 수 있는 옵션-

•enableHighAccuracy : 정확도가 높은 위치 정보 요청

•timeout : 위치 정보 확인에 대한 시간 제한 설정(단위: ms, 시간 제한 초과 시 TIMEOUT 오류 발생)

•maximumAge : 위치 정보의 유효 기간 설정

-유효 기간보다 오래되면 해당 정보는 폐기하고 새 위치 정보 확인 시도

-0을 지정하면 항상 새로운 위치 정보를 요청

 

현재 위치 정보를 찾는 예제2

 

window.onload = function() { 

//브라우저에서 웹 지오로케이션 지원 여부 판단

if (navigator.geolocation) { 

var options={ enableHighAccuracy:true, timeout:1000, maximumAge:6000 };

navigator.geolocation.getCurrentPosition(MyPosition, ErrorCall, options);

} 

} 

function MyPosition(position) { 

var lat = position.coords.latitude; 

var lng = position.coords.longitude; 

alert("위도 : " + lat + " 경도 : " + lng ); 

}

//에러 발생 처리

function ErrorCall(error) { 

switch(error.code) { 

case error.TIMEOUT: 

alert("시간 제한을 초과했습니다."); break; 

case error.POSITION_UNAVAILABLE: 

alert("현재 위치를 구할 수 없습니다."); break; 

case error.PERMISSION_DENIED: 

alert("위치를 구할 수 있는 권한이 없습니다."); break; 

case error.UNKNOWN_ERROR: alert("알 수 없는 에러가 발생하였습니다."); break; 

default : alert (error.message); 

} 

}

 

첫 번째 예제와 비슷하지만 에외가 발생하면 처리하는 코드가 추가되었습니다.

 

 

html5_23_02.jpg

 

 

 

*현재 위치 추적

watchPosition() : 현재의 위치를 계속 추적하는 역할

clearPosition() : 현재 위치의 추적 종료

-사용법-

var 변수 = navigator.geolocation.watchPosition( successCallback, errorCallback, options );

navigator.geolocation.clearPosition(변수);

 

현재 위치 추적 예제

 

<input type="button" onclick="PositionStart()" value="위치 추적 시작"> 

<input type="button" onclick="PositionStop()" value="위치 추적 정지"><br> 

<div id="position"></div>

 

위치 추적을 시작하고 종료하는 버튼을 생성합니다.

 

var watchId; 

function PositionStart() { 

watchId = navigator.geolocation.watchPosition(MyPosition); 

} 

function MyPosition(position) { 

var lat = position.coords.latitude; 

var lng = position.coords.longitude; 

document.getElementById("position").innerHTML = "현재 위치 (위도 : " + position.coords.latitude + ", 경도 : " + position.coords.longitude + ")"; 

} 

function PositionStop() { 

navigator.geolocation.clearPosition(watchId); 

}

 

위치를 추적하고 종료하는 스크립트 함수입니다.

 

 

html5_23_03.jpg

 

 

 

*지도 서비스

지도 서비스 관련 API 제공 사이트들은 다음과 같습니다.

•구글 맵스

https://developers.google.com/maps/?hl=ko

•Bing Maps

http://www.microsoft.com/maps/

•네이버 지도

http://dev.naver.com/openapi/apis/map

•다음 지도

http://dna.daum.net/apis/maps

 

지도 서비스 활용 예제1

 

<div id="map" style="width: 500px; height: 500px"></div>

 

지도가 들어갈 영역입니다.

 

<!-- 위치정보 API를 위한 메타태그 -->

<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 

<!-- 위치정보 API를 가져오는 코드 -->

<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"> </script>

<script type="text/javascript"> 

//위치정보 API를 연동하는 코드

window.onload = function() { 

var latlng = new google.maps.LatLng(37.5634, 126.993); 

var options = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; 

var map = new google.maps.Map(document.getElementById("map"), options); 

}

</script>

 

 

html5_23_04.jpg

 

 

 

위 예제는 위치를 직접 입력한 코드입니다.

물론 위치를 추적해 지도를 만들수도 있습니다.

 

지도 서비스 활용 예제2

 

//위치정보 API를 연동하는 코드

window.onload = function() { 

if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(MyPosition); 

} 

} 

function MyPosition(position) { 

var lat = position.coords.latitude; 

var lng = position.coords.longitude; 

var latlng = new google.maps.LatLng(lat, lng); 

var options = { zoom: 15, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; 

var map = new google.maps.Map(document.getElementById("map"), options); 

}

 

기존 예제에서 위 부분의 코드만 수정되었습니다.

 

 

html5_23_05.jpg

 

 

 

그런데 PC 에서는 위치기반 GPS가 확실히 약하네요.

 

 

모든 코드는 직접 코딩하면서 테스트를 해보세요 :)

 

 

예제파일 다운로드

 

 

23.zip

 

 

번호 제목 글쓴이 날짜 조회 수
128 Web Speech API Example (HTML5 STT & TTS) file 황제낙엽 2025.04.14 731
127 모바일과 데스크톱을 포괄하는 사용자의 터치 이벤트(onPointerTap) 황제낙엽 2025.04.09 648
126 Web RTC 에 관하여 황제낙엽 2024.11.20 626
125 div와 span의 차이점 (from Bing) 황제낙엽 2023.06.16 685
124 flexbox (flexible box layout) 황제낙엽 2023.02.27 641
123 characters from ISO 8859-1 황제낙엽 2020.11.10 36946
122 HTML FRAMESET 태그 예제 황제낙엽 2020.11.06 718
121 스마트 기기에서 여러 단말기의 해상도에 대응하기 위해 사용하는 HTML viewport meta tag 황제낙엽 2020.11.06 644
120 네이버의 무료 나눔 글꼴 황제낙엽 2020.05.06 1762
119 서버의 이미지나 txt 파일을 웹브라우저에서 다운로드하기 황제낙엽 2019.05.13 867
118 When to encode space to plus (+) or %20? (application/x-www-form-urlencoded) 황제낙엽 2019.04.15 917
117 HTTP/2 소개 황제낙엽 2018.10.12 693
116 글자, 문자, 텍스트, 글꼴, 서체, 폰트와 관련한 속성들 / font-size , 크기 단위(em, px, pt, rem), 절대 단위, 상대 단위 황제낙엽 2018.04.18 842
115 Pragma와 Cache-Control 황제낙엽 2018.03.28 845
114 로드밸런싱(L4)+아파치를 운영시 etag제거로 캐시 성능 최적화 file 황제낙엽 2018.03.28 944
113 HTTP 요청 헤더 III - If-Match, If-Modified-Since, If-None-Match file 황제낙엽 2018.03.27 726
112 재미난 로그인 페이지 만들기 file 황제낙엽 2018.03.26 1592
111 HTTP Cache-Control 요청 지시어 황제낙엽 2018.03.09 713
110 내 웹사이트의 속도를 빠르게! file 황제낙엽 2018.03.07 859
109 성능을 위한 초간단 HTTP 304 Not Modified 구현 방법 file 황제낙엽 2018.03.07 816