1. 程式人生 > >JS實現百度地圖

JS實現百度地圖

使用JavaScript技術,利用api介面開發百度地圖簡單方便。


1.設定整體頁面的佈局樣式

<style type="text/css">
        body, html{width:100%;height:100%;margin:0;font-family:"微軟雅黑";}
		#point{width:980px;min-height:160px;margin-left:12px;margin-top:6px;margin:0 auto;padding-left:2px;}
		#map{height:1060px;width:1160px;margin:0 auto;margin-top:16px;margin-bottom:8px;}
		#r-result{width:1080px;min-height:80px;margin-top:10px;padding-left:2px;margin:0 auto;}
		#r-result table{width:100%;}
</style>

2. 最重要的就是利用api介面獲取地圖資料,設定Maker標記,選擇出行策略

<!-- js技術 -->
<script type="text/javascript">
    window.onload = loadScript;
    // 首次載入的函式
   function loadScript() {  
     var script = document.createElement("script");
	 // 申請的AK
     script.src = "http://api.map.baidu.com/api?v=2.0&ak=YBPGfONGeN2ENSn9YzACYCGzazCKsZsb&callback=initialize";//此為v2.0版本的引用方式  
     // 百度地圖API功能
     document.body.appendChild(script);
	 // 自動定位啟動
     autoLocation();
  }   
  // 定義全域性變數
  var map ;
  var startAddr,endAddr;
  var startCity = "天津",endCity="";

  // 初始化處理 : Called first
  function initialize() 
  {  
      map = new BMap.Map("map");

	  //初始化地圖,設定城市和地圖級別
	  // 預設定位點設定
	  map.centerAndZoom(startCity,12);
	  document.getElementById("start").value = startCity;
	  if(endCity != ""){
	      
	  }
	  map.enableScrollWheelZoom();
      map.enableInertialDragging();
      map.enableContinuousZoom();
	  
	  // var pointA = new BMap.Point(106.486654,29.490295);  // 建立點座標A--大渡口區
	  // var pointB = new BMap.Point(106.581515,29.615467);  // 建立點座標B--江北區
	  //alert('從大渡口區到江北區的距離是:'+(map.getDistance(pointA,pointB)).toFixed(2)+' 米。');  //獲取兩點距離,保留小數點後兩位
	  //var polyline = new BMap.Polyline([pointA,pointB], {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});  //定義折線
	  //map.addOverlay(polyline);     //新增折線到地圖上
    
	 // 地圖控制控制元件
	var bottom_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左下角,新增比例尺
	var bottom_left_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_LEFT});  //左下角,新增預設縮放平移控制元件
	/*縮放控制元件type有四種類型:
	     BMAP_NAVIGATION_CONTROL_SMALL:僅包含平移和縮放按鈕;BMAP_NAVIGATION_CONTROL_PAN:僅包含平移按鈕;BMAP_NAVIGATION_CONTROL_ZOOM:僅包含縮放按鈕
    */
	//新增控制元件和比例尺
	map.addControl(bottom_left_control);        
	map.addControl(bottom_left_navigation);     
	
	// 新增手動定位控制元件
    var geolocationControl = new BMap.GeolocationControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
    geolocationControl.addEventListener("locationSuccess", function(e){
        // 定位成功事件
        var address = "";
        address += e.addressComponent.province;
        address += e.addressComponent.city;
        address += e.addressComponent.district;
        address += e.addressComponent.street;
        address += e.addressComponent.streetNumber;
		// 改變定位後的城市名
		startCity = address;
		document.getElementById("start").value = address;
		// 清空Maker
		map.clearOverlays();
        alert("當前定位地址為:" + address);
		initialize();
     });
    geolocationControl.addEventListener("locationError",function(e){
       // 定位失敗事件
       alert(e.message);
    });
    map.addControl(geolocationControl);

    //2D圖,衛星圖 
    var mapType1 = new BMap.MapTypeControl({anchor: BMAP_ANCHOR_TOP_RIGHT,mapTypes: [BMAP_NORMAL_MAP,BMAP_HYBRID_MAP]});
    map.addControl(mapType1);
    
	// 預設選擇步行策略
	//showPolicy(1);

 }  
   // 自動定位處理 : 根據瀏覽器的地址獲取經緯度
   function autoLocation()
   {
       var geolocation = new BMap.Geolocation();
	   geolocation.getCurrentPosition(function(r){
		  if(this.getStatus() == BMAP_STATUS_INVALID_REQUEST){
		      alert("非法請求");
			  return;
		  }
		  if(this.getStatus() == BMAP_STATUS_PERMISSION_DENIED){
		      alert("沒有開啟定位許可權");
			  return;
		  }
		  if(this.getStatus() == BMAP_STATUS_SERVICE_UNAVAILABLE){
		      alert("服務不可用");
			  return;
		  }
		  if(this.getStatus() == BMAP_STATUS_TIMEOUT){
		      alert("網路超時");
			  return;
		  }
		  if(this.getStatus() == BMAP_STATUS_SUCCESS){
              var geoc = new BMap.Geocoder();
              var startPoint = new BMap.Point(r.point.lng,r.point.lat);
			  var mk = new BMap.Marker(startPoint);
			  map.panTo(r.point);
			  map.addOverlay(mk);
              geoc.getLocation(startPoint, function(rs){
				 // 根據經緯度獲取實體地址資訊 
			     var addComp = rs.addressComponents;
                 // 改變定位後的城市名
		         startCity = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
		         document.getElementById("start").value = startCity;
			     alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
		      });
			 // alert('當前位置:'+r.point.lng+','+r.point.lat);
	      }else {
			  alert('failed'+this.getStatus());
	     }        
	   },{enableHighAccuracy: true})
	  //關於狀態碼
	  //BMAP_STATUS_SUCCESS	檢索成功。對應數值“0”。
	  //BMAP_STATUS_CITY_LIST	城市列表。對應數值“1”。
	  //BMAP_STATUS_UNKNOWN_LOCATION	位置結果未知。對應數值“2”。
	  //BMAP_STATUS_UNKNOWN_ROUTE	導航結果未知。對應數值“3”。
	  //BMAP_STATUS_INVALID_KEY	非法金鑰。對應數值“4”。
	  //BMAP_STATUS_INVALID_REQUEST	非法請求。對應數值“5”。
	  //BMAP_STATUS_PERMISSION_DENIED	沒有許可權。對應數值“6”。(自 1.1 新增)
	  //BMAP_STATUS_SERVICE_UNAVAILABLE	服務不可用。對應數值“7”。(自 1.1 新增)
	  //BMAP_STATUS_TIMEOUT	超時。對應數值“8”。(自 1.1 新增)
   }
   // 地址解析
  
   // 逆地址解析 :輸入框發生變化事件
   function onChangeS()
   {
	  // 起始
      var start = document.getElementById("start").value;
	  var myGeo = new BMap.Geocoder();
	  // 將地址解析結果顯示在地圖上,並調整地圖視野
	  myGeo.getPoint(start, function(point){
		 if (point) {
			 startCity = start;
			 map.clearOverlays();
			 map.centerAndZoom(startCity,12);
			 map.panTo(point);
			 map.addOverlay(new BMap.Marker(point));
			 document.getElementById("start").value = startCity;
			 //initialize();
		 }else{
			 alert("您輸入地址沒有解析到結果!");
		 }
	 }, "");
   }
   function onChangeE()
   {
	  // 終止
	  var end = document.getElementById("end").value;
	  var myGeo = new BMap.Geocoder();
	  // 將地址解析結果顯示在地圖上,並調整地圖視野
	  myGeo.getPoint(end, function(point){
		 if (point) {
			 endCity = end;
			 map.clearOverlays();
			 map.centerAndZoom(endCity,12);
			 map.panTo(point);
			 map.addOverlay(new BMap.Marker(point));
			 document.getElementById("end").value = endCity;
			 //initialize();
		 }else{
			 alert("您輸入地址沒有解析到結果!");
		 }
	 }, "");
   }
   // 對起終點設定的處理函式
   function theLocation()
   {
	   // 通過經緯度設定Maker標記
       if(document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "")
	   {
			map.clearOverlays(); 
			var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value);
			var marker = new BMap.Marker(new_point);  // 建立標註
			map.addOverlay(marker);              // 將標註新增到地圖中
			map.panTo(new_point);      
		}
    }
    // 出行策略
	/*
	* 1. 步行  2. 駕車
	*/
	function showPolicy(index)
	{
		if(startCity == ""){
		    alert("請輸入出發點");
			return;
		}
		if(endCity == ""){
		    alert("請輸入目的地");
			return;
		}
	    if(index == 1){
		    // 步行
			map.clearOverlays();
			map.centerAndZoom(startCity,12);
	        var walking = new BMap.WalkingRoute(map, {renderOptions: {map: map, panel: "r-result",autoViewport: true }});
	        walking.search(startCity, endCity);
		}
		if(index == 2){
			//公交
		    map.clearOverlays();
			map.centerAndZoom(startCity,12);
		    var routePolicy = [BMAP_TRANSIT_POLICY_LEAST_TIME,BMAP_TRANSIT_POLICY_LEAST_TRANSFER,BMAP_TRANSIT_POLICY_LEAST_WALKING,BMAP_TRANSIT_POLICY_AVOID_SUBWAYS];
	        var transit = new BMap.TransitRoute(map, {renderOptions: {map: map, panel: "r-result",autoViewport: true}});
		    transit.setPolicy(routePolicy[0]);
	        transit.search(startCity, endCity);
		}
		if(index == 3){
		    // 駕車
			map.clearOverlays();
			map.centerAndZoom(startCity,12);
	        var driving = new BMap.DrivingRoute(map, {renderOptions: {map: map, panel: "r-result", autoViewport: true}});
	        driving.search(startCity, endCity);
		}
	}
   // 獲取搜尋框輸入的內容
   function submitSearch()
   {
       var value = document.getElementById("searchValue").value;
	   if(value != ""){
	      search("'"+value+"'");
	   }else{
	       alert("請輸入搜尋關鍵字");
	   }
   }
   // 搜尋內容並返回結果
   function search(str)
   {
	   if(str != ""){
		   map.clearOverlays();
		   map.centerAndZoom(startCity,12);
           var local = new BMap.LocalSearch(map, {renderOptions: {map: map, panel: "r-result",autoViewport: true}});
	       local.search(str);
	   }else{
	       alert("搜尋內容錯誤");
	   }
   } 
</script>

3. 頁面佈局css
<body>
  <div id="" 
      style="width:1120px;height:30px;margin:0 auto;font-size:18px;background:#0000cc;color:#fff;text-align:left;padding-left:24px;padding-top:8px;padding-bottom:6px;">
	  | 出行遊玩,定製屬於自我的Map
  </div>
  
  <div id="point">
          我的位置: <input id="start" type="text" size="28px" style="width:136px; margin-right:10px;" onchange="onChangeS()"/>  ——>  
	      目的地: <input id="end" type="text" size="28px" style="width:136px; margin-right:10px;" onchange="onChangeE()"/>
	      <input type="button" value="確定" style="width:54px; font-size:18px;margin-right:10px;margin-top:16px;background:#888;" onclick="showPolicy(1)" />
          <br/><p>
		  <div style="width:100%;height:30px;margin-bottom:2px;padding-bottom:0px;">
		      <div style="width:188px;float:left;background:#066;color:#fff;margin-bottom:4px;margin-top:0px;padding-top:4px;padding-bottom:4px;text-align:center;font-size:18px;">
			      出行策略
			  </div>
		      <div style="float:left;margin-left:6px;padding-top:5px;">
			      <input type="radio" value="policy_1" name="policy"
		              style="font-size:18px;margin-right:10px;color:#fff;" onclick="showPolicy(1)" >步行</input>
		          <input type="radio" value="policy_2" name="policy"
		              style="font-size:18px;margin-right:10px;color:#fff;" onclick="showPolicy(2)" >公交出行</input>
		          <input type="radio" value="policy_3" name="policy"
		              style="font-size:18px;margin-right:10px;color:#fff;" onclick="showPolicy(3)" >駕車出行</input>
			  </div>
		  </div>
		  <br/>
		  <div style="width:100%;height:30px;margin-bottom:4px;margin-top:0px;">
		      <div style="width:188px;float:left;background:#066;color:#fff;margin-top:4px;padding-top:4px;padding-bottom:4px;text-align:center;font-size:18px;">搜尋周邊</div>
		      <div style="width:24px;float:left;margin-left:28px;margin-top:8px;margin-right:8px;">
		          <input type="text" id="searchValue" size="22px"/>
			  </div>
			  <div style="width:36px;float:left;margin-top:8px;margin-left:168px;">
			      <input type="button" onclick="submitSearch()" style="font-size:16px;border:solid 1;"
				     onMouseOver="JavaScript:this.style.background='#00ce00'" onMouseOut="this.style.background=''" value="搜尋" />
		      </div>
		  </div>
		  <div style="width:100%;margin-top:16px;margin-left:26px;margin-bottom:8px;">
		     <input type="button" value="餐飲" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#c33;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('餐飲')"/>
		     <input type="button" value="酒店" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#068;color:#fff;"
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('酒店')"/>
		     <input type="button" value="地鐵" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#c36;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('地鐵')"/>
		     <input type="button" value="公交" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#888;color:#fff;"
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('公交')"/>
		     <input type="button" value="周圍景點" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#033;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('景點')"/>
		     <input type="button" value="公園" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#09c;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('公園')"/>
		     <input type="button" value="小吃街" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#906;color:#fff;"
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('小吃')"/>
		     <input type="button" value="遊樂場" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#936;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('遊樂場')"/>
			 <input type="button" value="KTV" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#c00;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('KTV')"/>
		     <input type="button" value="商業街巷" style="font-size:20px;margin-right:6px;margin-top:2px;border:0;background:#963;color:#fff;" 
			         onMouseOver="JavaScript:this.style.color='#000'" onMouseOut="this.style.color='#fff'" onclick="search('商業街巷')"/>
			 <input type="button" value="搜尋更多>>" style="background:#fff;color:#000;border:0;clickable:false;">
		  </div>
      </div>

  <div id="map"></div>
  <div id="r-result"></div>
</body>  
</html>

以下是結果截圖 | 出行遊玩,定製屬於自我的Map 我的位置:   ——>   目的地:
出行策略 步行公交出行駕車出行
搜尋周邊