利用HTML5中Geolocation獲取地理位置調(diào)用Google Map API在Google Map上定位

字號(hào):


    剛開(kāi)始學(xué)習(xí)HTML5,現(xiàn)在對(duì)其中的Geolocation頗感興趣,結(jié)合Google Map的API實(shí)現(xiàn)基本的地圖定位功能主要是由以下幾個(gè)步驟:獲取當(dāng)前地理位置、調(diào)用Google Map API獲取當(dāng)前位置信息
    1.獲取當(dāng)前地理位置
    調(diào)用方法 void getCurrentPosition(onSuccess, onError, options);即可。
    其中onSuccess是獲取當(dāng)前位置信息成功時(shí)執(zhí)行的回調(diào)函數(shù),onError是獲取當(dāng)前位置信息失敗時(shí)所執(zhí)行的回調(diào)函數(shù),options是一些可選熟悉列表。其中第二和第三個(gè)參數(shù)為可選屬性。
    在onSuccess回調(diào)函數(shù)中,用到了參數(shù)position,代表一個(gè)具體的position對(duì)象,表示當(dāng)前位置。其具有如下屬性:
    •latitude:當(dāng)前地理位置的緯度。
    •longitude:當(dāng)前地理位置的經(jīng)度。
    •altitude:當(dāng)前位置的海拔高度(不能獲取時(shí)為null)。
    •accuracy:獲取到的緯度和經(jīng)度的精度(以米為單位)。
    •altitudeAccurancy:獲取到的海拔高度的經(jīng)度(以米為單位)。
    •heading:設(shè)備的前進(jìn)方向。用面朝正被方向的順時(shí)針旋轉(zhuǎn)角度來(lái)表示(不能獲取時(shí)為null)。
    •speed:設(shè)備的前進(jìn)速度(以米/秒為單位,不能獲取時(shí)為null)。
    •timestamp:獲取地理位置信息時(shí)的時(shí)間。
    在onError回調(diào)函數(shù)中,用到了error參數(shù)。其具有如下屬性:
    •code:錯(cuò)誤代碼,有如下值。
    1.用戶拒絕了位置服務(wù)(屬性值為1);
    2.獲取不到位置信息(屬性值為2);
    3.獲取信息超時(shí)錯(cuò)誤(屬性值為3)。
    •message:字符串,包含了具體的錯(cuò)誤信息。
    在options參數(shù)中,可選屬性如下:
    •enableHighAccuracy:是否要求高精度的地理位置信息。
    •timeout:設(shè)置超時(shí)時(shí)間(單位為毫秒)。
    •maximumAge:對(duì)地理位置信息進(jìn)行緩存的有效時(shí)間(單位為毫秒)。
    其中注意要寫上如下代碼,判斷瀏覽器是否支持HTML5獲取地理位置信息,以兼容較早不支持的瀏覽器。
    代碼如下:
    if (navigator.geolocation) {
    //獲取當(dāng)前地理位置信息
    navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
    } else {
    alert("你的瀏覽器不支持HTML5來(lái)獲取地理位置信息。");
    }
    2.調(diào)用Google Map API獲取當(dāng)前位置信息
    首先,需要在頁(yè)面中引用Google Map API的腳本文件,導(dǎo)入方法如下所示。
    代碼如下:
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    其次,設(shè)定地圖參數(shù),設(shè)定方法如下所示。
    代碼如下:
    //指定一個(gè)google地圖上的坐標(biāo)點(diǎn),同時(shí)指定該坐標(biāo)點(diǎn)的橫坐標(biāo)和縱坐標(biāo)
    var latlng = new google.maps.LatLng(coords.latitude, coords.longitude);
    var myOptions = {
    zoom: 14, //設(shè)定放大倍數(shù)
    center: latlng, //將地圖中心點(diǎn)設(shè)定為指定的坐標(biāo)點(diǎn)
    mapTypeId: google.maps.MapTypeId.ROADMAP //指定地圖類型
    };
    最后,創(chuàng)建地圖,并在頁(yè)面中顯示,創(chuàng)建方法如下所示
    代碼如下:
    //創(chuàng)建地圖,并在頁(yè)面map中顯示
    var map = new google.maps.Map(document.getElementById("map"), myOptions);
    最后的最后,獻(xiàn)上本次示例所有代碼。代碼如下所示。
    代碼如下:
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>獲取當(dāng)前位置并顯示在google地圖上</title>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
    function init() {
    if (navigator.geolocation) {
    //獲取當(dāng)前地理位置
    navigator.geolocation.getCurrentPosition(function (position) {
    var coords = position.coords;
    //console.log(position);
    //指定一個(gè)google地圖上的坐標(biāo)點(diǎn),同時(shí)指定該坐標(biāo)點(diǎn)的橫坐標(biāo)和縱坐標(biāo)
    var latlng = new google.maps.LatLng(coords.latitude, coords.longitude);
    var myOptions = {
    zoom: 14, //設(shè)定放大倍數(shù)
    center: latlng, //將地圖中心點(diǎn)設(shè)定為指定的坐標(biāo)點(diǎn)
    mapTypeId: google.maps.MapTypeId.ROADMAP //指定地圖類型
    };
    //創(chuàng)建地圖,并在頁(yè)面map中顯示
    var map = new google.maps.Map(document.getElementById("map"), myOptions);
    //在地圖上創(chuàng)建標(biāo)記
    var marker = new google.maps.Marker({
    position: latlng, //將前面設(shè)定的坐標(biāo)標(biāo)注出來(lái)
    map: map //將該標(biāo)注設(shè)置在剛才創(chuàng)建的map中
    });
    //標(biāo)注提示窗口
    var infoWindow = new google.maps.InfoWindow({
    content: "當(dāng)前位置:<br/>經(jīng)度:" + latlng.lat() + "<br/>維度:" + latlng.lng() //提示窗體內(nèi)的提示信息
    });
    //打開(kāi)提示窗口
    infoWindow.open(map, marker);
    },
    function (error) {
    //處理錯(cuò)誤
    switch (error.code) {
    case 1:
    alert("位置服務(wù)被拒絕。");
    break;
    case 2:
    alert("暫時(shí)獲取不到位置信息。");
    break;
    case 3:
    alert("獲取信息超時(shí)。");
    break;
    default:
    alert("未知錯(cuò)誤。");
    break;
    }
    });
    } else {
    alert("你的瀏覽器不支持HTML5來(lái)獲取地理位置信息。");
    }
    }
    </script>
    </head>
    <body onload="init()">
    <div id="map"></div>
    </body>
    </html>