1. 程式人生 > >基於瀏覽器的HTML5地理定位

基於瀏覽器的HTML5地理定位

最近專案要用到HTML5進行地理定位,上網查閱了一番,學習了藉助高德地圖 JS API和HTML5 Geolocation API兩種地理定位的方法,特此記錄。

實現效果如圖:

1、實現原理:html5地理定位 + 高德地圖

2、實現思路:

  ① 判斷瀏覽器是否支援geolocation地理定位

  ② 用HTML5 Geolocation API (地理位置應用程式介面)獲取經緯度

  ③ 呼叫高德地圖介面,將獲取到的經緯度以引數形式參入高德地圖地理座標中,並顯示到頁面上

(也可以呼叫百度地圖、谷歌地圖、騰訊地圖等,只需要將HTML5 Geolocation API獲取到的值傳入到相應的地圖介面中)

3、程式碼實現:

  ①呼叫高德地圖JavaScript API,URL路徑為:https://webapi.amap.com/maps?v=1.4.8&key=你的key值

  ②核心程式碼:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
		<title>基於瀏覽器的HTML5地理定位(高德地圖)</title>
	</head>
	<!-- 引入高德地圖API -->
	<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.8&key=52c54e00b0497e80783f529fd46552b4"></script>
	<script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
	<style>
		html{height:100%}  
		body{height:100%;margin:0px;padding:0px}  
		#container{height:100%}
	</style>
	<body>
		<div id="container"></div>
	</body>
	<script type="text/javascript">
		function getLocation(){
             var options={
                 enableHighAccuracy:true, //boolean 是否要求高精度的地理資訊,預設為false
                 maximumAge:1000 //應用程式的快取時間
             }

             if(navigator.geolocation){
                 //瀏覽器支援geolocation
                 navigator.geolocation.getCurrentPosition(onSuccess,onError,options); 
             }else{
                 //瀏覽器不支援geolocation
                 console.log("瀏覽器不支援!");
             }
          }
		
		//成功時
		function onSuccess(position){
			//經度
            var longitude =position.coords.longitude;
            //緯度
            var latitude = position.coords.latitude;
            var map = new AMap.Map('container', {
		       center:[longitude,latitude],
		       zoom:16
		    });
			
			// 建立 infoWindow 例項	
			var infoWindow = new AMap.InfoWindow({
			   content: "<div style='width:200px;padding:10px;'>"+
                  "您在這裡<br/>緯度:"+  latitude+  "<br/>經度:"+longitude  //傳入 dom 物件,或者 html 字串
			});
			// 開啟資訊窗體
			infoWindow.open(map);
			// 在指定位置開啟已建立的資訊窗體
			var location = new AMap.LngLat(longitude, latitude);
			infoWindow.open(map, location);
		}
		
		//失敗時
		function onError(error){
			switch(error.code){
                 case error.PERMISSION_DENIED:
                 alert("使用者拒絕對獲取地理位置的請求");
                 break;

                 case error.POSITION_UNAVAILABLE:
                 alert("位置資訊是不可用的");
                 break;

                 case error.TIMEOUT:
                 alert("請求使用者地理位置超時");
                 break;

                 case error.UNKNOWN_ERROR:
                  alert("未知錯誤");
                 break;
             }
		}
		
		window.onload=getLocation();
	</script>
</html>

此程式碼在PC端執行,會得不到資料,因為獲取位置資訊,以及監控位置的變化這些操作都屬於敏感性操作,所以browsers在執行都會非常謹慎。它需要你在安全的環境並且獲取使用者的同意才會執行。

在移動端,會提示是否允許地理位置授權,使用者同意後,才會繼續獲取資料,進行下面的操作。