HTML5 geolocation API 得到用戶當前地理位置

 HTML5 裏面引入了geolocation的API能夠幫助用戶得到瀏覽器所在的地理位置,它不只能夠標示出當前的經緯度,還能夠與google map API結合使用來在地圖上標示出當前位置。javascript

HTML代碼,主要就是2大塊,第一部分的容器用於放google地圖和標示位置,第二部分用於顯示精確的經緯度以及精度(偏差)。html

  
  
  
  
  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4. <!-- 如下這段代碼是googlemap官方建議的,它讓用戶禁止利用瀏覽器的放大縮小窗口功能,而使用googlemap本身的縮放功能 --> 
  5. <meta name="viewport" content="initial-scale=1.0,user-scalable=no"/> 
  6. <title>在頁面上使用Google Map,獲取瀏覽器的當前位置</title> 
  7.  
  8. <!-- 由於頁面上要使用到google地圖,因此導入googlemap地圖文件 --> 
  9. <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
  10.  
  11. <!-- 這段js文件是我本身寫的,用於利用HTML5的geolocation API得到當前位置,而且在google地圖上標識出來 --> 
  12. <script type="text/javascript" src="js/googlemap.js"></script> 
  13.    
  14. </head> 
  15.  
  16. <body onload="init()"> 
  17. Hello,Google Map! 
  18. <br> 
  19. <!-- 這一個正方形區域是用來畫google地圖的 --> 
  20. <div id="map"style="width: 400px; height: 400px"></div> 
  21. <br> 
  22. <!-- 這一個區域是用來顯示你的位置信息的 --> 
  23. <h3>您的瀏覽器顯示了您當前的地理位置信息是:</h3> 
  24. <p id="positionInfo"></p> 
  25. </body> 
  26.  
  27. </html> 

javascript方法,主要就是用於繪製地圖(以及標示位置),以及給出了當獲取位置成功或者失敗時候的回調函數定義:java

  
  
  
  
  1. //這是初始化方法,用來繪製google地圖 
  2. function init() { 
  3. console.log("entering the init() method"); 
  4. //首先必須判斷瀏覽器是否有geolocation屬性,由於HTML5 才新增了這個屬性,不是全部瀏覽器都支持 
  5. if (navigator.geolocation) { 
  6. //若是瀏覽器支持geolocation,則使用geolocation的getCurrentLocation方法來取得用戶當前的地理位置, 
  7. //而且在成功取得以後調用show_map()回調函數 
  8. console.log(' Browser support geolocation '); 
  9. navigator.geolocation.getCurrentPosition(show_map,handle_error ,null); 
  10. else { 
  11. console.log(' Browser doesnt support geolocation '); 
  12.  
  13.  
  14.  
  15. //這是一個回調函數,用於當geolocation成功取得用戶瀏覽器所在的地理位置時候的響應,它吧全部的位置信息封裝在position中 
  16. //因此咱們就須要解析position來取得用戶的詳細信息 
  17. function show_map(position) { 
  18.  
  19. // 取得當前的地理位置 
  20. var coords = position.coords; 
  21.   
  22. //Part 1; 顯示用戶的精確位置信息 
  23. //取得頁面上用於顯示精確位置信息的組件 
  24. var positionInfo=document.getElementById("positionInfo"); 
  25. var positionString="經度: "+coords.longitude+"<br>"
  26. positionString+="維度: "+coords.latitude+"<br>"
  27. var altitude=coords.altitude; 
  28. if( altitude!=null){ 
  29. positionString+="海拔高度"+coords.altitude+"<br>"
  30. positionString+="經緯度精確到:"+coords.accuracy+"米"+"<br>"
  31. positionInfo.innerHTML=positionString; 
  32. //Part 2; 在google地圖上顯示瀏覽器的當前位置 
  33. // 設定地圖參數,將用戶的當前位置的維度和精度都設定爲地圖的中心點 
  34. var latlng = new google.maps.LatLng(coords.latitude, coords.longitude); 
  35. var myOptions = { 
  36. // 設定放大倍數 
  37. zoom : 14, 
  38. // 將地圖的中心點設定爲指定的座標點 
  39. center : latlng, 
  40. // 指定地圖的類型,這裏選擇的是街道地圖 
  41. mapTypeId : google.maps.MapTypeId.ROADMAP 
  42. }; 
  43. // 建立地圖並在"map"div中顯示,吧這個地圖叫作map1 
  44. var map1; 
  45. map1 = new google.maps.Map(document.getElementById("map"), myOptions); 
  46. // 在地圖上建立標記 
  47. var marker = new google.maps.Marker({ 
  48. //標註剛纔建立的標註點,由於標註點是由當前的經緯度設定的,因此表示了當前位置 
  49. position : latlng, 
  50. //標註在哪張地圖上,咱們建立了map1做爲google map,因此標註在map1上 
  51. map : map1 
  52. }); 
  53. // 設定標註窗口,而且指定該窗口的註釋文字 
  54. var infowindow = new google.maps.InfoWindow({ 
  55. content : "這是Charles的瀏覽器的當前位置!" 
  56. }); 
  57. // 打開標註窗口 
  58. infoWindow.open(map1, marker); 
  59.  
  60.  
  61.  
  62.  
  63. //這是第二個回調函數,用於當geolocation獲取用戶瀏覽器所在的地理位置失敗時候的響應 
  64. //error對象封裝了全部的可能出現的沒法得到地理位置的錯誤信息,而且HTML5爲其預留了錯誤碼,能夠取值{1,2,3} 
  65. function handle_error(error){ 
  66. var errorTypes={ 
  67. 1:'位置服務被拒絕'
  68. 2:'獲取不到位置信息'
  69. 3:'獲取信息超時' 
  70. }; 
  71. console.log(errorTypes[error.code] + ":,不能肯定你的當前地理位置"); 

 

要顯示結果,必須讓用戶開啓共享位置功能,由於這是隱私,我測試了下Opera 11和Firefox 10 ,Google Chrome均可以。git

Opera 11開始就須要用戶選擇是否要共享地理位置:api

而後要籤一份用戶協議:瀏覽器

 

 

對於Firefox瀏覽器,也是須要獲得用戶共享本身位置的許可:ide

 

 

最終,就能夠顯示用戶當前位置了(實際是你的ip暴露了你的信息),好比我住在上海廣蘭路地鐵站附近,因此顯示結果以下:函數

 

相關文章
相關標籤/搜索