HTML5 裡面引入了geolocation的API可以協助使用者獲得瀏覽器所在的地理位置,它不僅可以標示出當前的經緯度,還可以與google map API結合使用來在地圖上標示出當前位置。
HTML代碼,主要就是2大塊,第一部分的容器用於放google地圖和標示位置,第二部分用於顯示精確的經緯度以及精度誤差)。
- <!DOCTYPE HTML>
- <html>
- <head>
- <!-- 以下這段代碼是googlemap官方建議的,它讓使用者禁止利用瀏覽器的放大縮小視窗功能,而使用googlemap自己的縮放功能 -->
- <meta name="viewport" content="initial-scale=1.0,user-scalable=no"/>
- <title>在頁面上使用Google Map,擷取瀏覽器的當前位置</title>
-
- <!-- 因為頁面上要使用到google地圖,所以匯入googlemap地圖檔案 -->
- <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
-
- <!-- 這段js檔案是我自己寫的,用於利用HTML5的geolocation API獲得當前位置,並且在google地圖上標識出來 -->
- <script type="text/javascript" src="js/googlemap.js"></script>
-
- </head>
-
- <body onload="init()">
- Hello,Google Map!
- <br>
- <!-- 這一個正方形地區是用來畫google地圖的 -->
- <div id="map"style="width: 400px; height: 400px"></div>
- <br>
- <!-- 這一個地區是用來顯示你的位置資訊的 -->
- <h3>您的瀏覽器顯示了您當前的地理位置資訊是:</h3>
- <p id="positionInfo"></p>
- </body>
-
- </html>
javascript方法,主要就是用於繪製地圖以及標示位置),以及給出了當擷取位置成功或者失敗時候的回呼函數定義:
- //這是初始化方法,用來繪製google地圖
- function init() {
- console.log("entering the init() method");
- //首先必須判斷瀏覽器是否有geolocation屬性,因為HTML5 才新增了這個屬性,不是所有瀏覽器都支援
- if (navigator.geolocation) {
- //如果瀏覽器支援geolocation,則使用geolocation的getCurrentLocation方法來取得使用者當前的地理位置,
- //並且在成功取得之後調用show_map()回呼函數
- console.log(' Browser support geolocation ');
- navigator.geolocation.getCurrentPosition(show_map,handle_error ,null);
- } else {
- console.log(' Browser doesnt support geolocation ');
- }
-
- }
-
-
- //這是一個回呼函數,用於當geolocation成功取得使用者瀏覽器所在的地理位置時候的響應,它吧所有的位置資訊封裝在position中
- //所以我們就需要解析position來取得使用者的詳細資料
- function show_map(position) {
-
- // 取得當前的地理位置
- var coords = position.coords;
-
- //Part 1; 顯示使用者的精確位置資訊
- //取得頁面上用於顯示精確位置資訊的組件
- var positionInfo=document.getElementById("positionInfo");
- var positionString="經度: "+coords.longitude+"<br>";
- positionString+="維度: "+coords.latitude+"<br>";
- var altitude=coords.altitude;
- if( altitude!=null){
- positionString+="海拔高度"+coords.altitude+"<br>";
- }
- positionString+="經緯度精確到:"+coords.accuracy+"米"+"<br>";
- positionInfo.innerHTML=positionString;
- //Part 2; 在google地圖上顯示瀏覽器的當前位置
- // 設定地圖參數,將使用者的當前位置的維度和精度都設定為地圖的中心點
- var latlng = new google.maps.LatLng(coords.latitude, coords.longitude);
- var myOptions = {
- // 設定放大倍數
- zoom : 14,
- // 將地圖的中心點設定為指定的座標點
- center : latlng,
- // 指定地圖的類型,這裡選擇的是街道地圖
- mapTypeId : google.maps.MapTypeId.ROADMAP
- };
- // 建立地圖並在"map"div中顯示,吧這個地圖叫做map1
- var map1;
- map1 = new google.maps.Map(document.getElementById("map"), myOptions);
- // 在地圖上建立標記
- var marker = new google.maps.Marker({
- //標註剛才建立的標註點,因為標註點是由當前的經緯度設定的,所以表示了當前位置
- position : latlng,
- //標註在哪張地圖上,我們建立了map1作為google map,所以標註在map1上
- map : map1
- });
- // 設定標註視窗,並且指定該視窗的注釋文字
- var infowindow = new google.maps.InfoWindow({
- content : "這是Charles的瀏覽器的當前位置!"
- });
- // 開啟標註視窗
- infoWindow.open(map1, marker);
-
- }
-
-
-
- //這是第二個回呼函數,用於當geolocation擷取使用者瀏覽器所在的地理位置失敗時候的響應
- //error對象封裝了所有的可能出現的無法獲得地理位置的錯誤資訊,並且HTML5為其預留了錯誤碼,可以取值{1,2,3}
- function handle_error(error){
- var errorTypes={
- 1:'位置服務被拒絕',
- 2:'擷取不到位置資訊',
- 3:'擷取資訊逾時'
- };
- console.log(errorTypes[error.code] + ":,不能確定你的當前地理位置");
- }
要顯示結果,必須讓使用者開啟共用位置功能,因為這是隱私,我測試了下Opera 11和Firefox 10 ,Google Chrome都可以。
Opera 11開始就需要使用者選擇是否要共用地理位置:
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131228/1324121A8-0.png" />
然後要簽一份使用者協議:
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131228/1324122F1-1.png" />
對於Firefox瀏覽器,也是需要得到使用者共用自己位置的許可:
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131228/132412E93-2.png" />
最終,就可以顯示使用者當前位置了實際是你的ip暴露了你的資訊),比如我住在上海廣蘭路地鐵站附近,所以顯示結果如下:
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131228/132412KK-3.png" />
本文出自 “平行線的凝聚” 部落格,請務必保留此出處http://supercharles888.blog.51cto.com/609344/856656