百度地圖API 百度地圖API當然在官方文檔學習更加清晰,我只是做一下我這2天研究一個總結。 首先,應該在上面的鏈接申請一個你的密鑰。 接著,顯示百度地圖,先上代碼再解釋: 創建地圖實例 這裡通過new 創建一個地圖實例,其中參數可以是id也可以是元素對象,用於在頁面上展現地圖,所以給html元素設 ...
百度地圖API
百度地圖API當然在官方文檔學習更加清晰,我只是做一下我這2天研究一個總結。
首先,應該在上面的鏈接申請一個你的密鑰。
接著,顯示百度地圖,先上代碼再解釋:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <title>Hello, World</title> 7 <style type="text/css"> 8 html{height:100%} 9 body{height:100%;margin:0px;padding:0px} 10 #container{height:100%} 11 </style> 12 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=vjxRk3m3YYQ4uglexlrOxEVwGc2Nw6kF"> 13 //v2.0版本的引用方式:src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰" 14 //v1.4版本及以前版本的引用方式:src="http://api.map.baidu.com/api?v=1.4&key=您的密鑰&callback=initialize" 15 </script> 16 </head> 17 18 <body> 19 <div id="container"></div> 20 <script type="text/javascript"> 21 var map = new BMap.Map("container"); // 創建地圖實例 22 var point = new BMap.Point(116.401,41.915); // 創建點坐標 23 map.centerAndZoom(point, 15); // 初始化地圖,設置中心點坐標和地圖級別 26 </script> 27 </body> 28 </html>
var map=new BMap.Map('container');
創建地圖實例
這裡通過new 創建一個地圖實例,其中參數可以是id也可以是元素對象,用於在頁面上展現地圖,所以給html元素設置了下麵的樣式,使得地圖充滿 整個瀏覽器視窗.
<style type="text/css"> html{height:100%} body{height:100%;margin:0px;padding:0px} #container{height:100%} </style>
var point=new BMap.Point(116.404,39.915);
我們通過BMap命名空間下的的Point類創建一個坐標點。116.404表示經度,39.915表示緯度。
map.centerAndZoom(point,15);
對地圖進行初始化,BMap.Map.centerAndZoom()方法要求2個參數,一個中心點,一個是地圖的級別。只有進行了初始化以後才會有接下來對地圖的操作。
添加控制項
//控制項參數設置 size type var opts={offset:new BMap.Size(400,400),type: BMAP_NAVIGATION_CONTROL_ZOOM} //添加控制項 map.addControl(new BMap.NavigationControl(opts)); //地圖平移縮放控制項 map.addControl(new BMap.OverviewMapControl()); //縮略地圖控制項 map.addControl(new BMap.ScaleControl(opts)); //比例尺控制項
控制項種類,控制項位置,以及控制項配置請詳見百度控制項API;
自定義控制項:
8 //自定義控制項 9 function selfControll(){ 10 this.defaultAnchor=BMAP_ANCHOR_TOP_RIGHT; 11 this.defaultOffset=new BMap.Size(200,200); 12 } 13 selfControll.prototype=new BMap.Control(); 14 selfControll.prototype.initialize=function(map){ 15 div=document.createElement("div"); 16 div.appendChild(document.createTextNode("放大2級")); 17 div.style.cursor='pointer'; 18 div.style.backgroundColor='red'; 19 div.onclick=function(e){ 20 map.zoomTo(map.getZoom()+2); 21 } 22 //map.getContainer().id --返回container 23 map.getContainer().appendChild(div); 24 return div; 25 } 26 var selfControll=new selfControll(); 27 map.addControl(selfControll);
1,定義一個自定義的構造函數。2,設置自定義控制項構造函數的prototype屬性為Control的實例,以便繼承控制項基類。3,實現initialize()方法.4,實例一個自定義控制項,向地圖中添加。
添加覆蓋物
覆蓋物:所有疊加或覆蓋到地圖的內容,統稱地圖覆蓋物。
地圖集中覆蓋物:
Overlay:覆蓋物的抽象基類,所有的覆蓋物均繼承此類的方法。
Marker:標註表示地圖上的點,可自定義標註的圖標。
Label:表示地圖上的文本標註,您可以自定義標註的文本內容。
Polyline:表示地圖上的折線。
Polygon:表示地圖上的多邊形。多邊形類似於閉合的折線,另外您也可以為其添加填充顏色。
Circle: 表示地圖上的圓。
InfoWindow:信息視窗也是一種特殊的覆蓋物,它可以展示更為豐富的文字和多媒體信息。註意:同一時刻只能有一個信息視窗在地圖上打開。
添加標註
var marker=new BMap.Marker(point); map.addOverlay(marker);
紅色的就是預設的標註.
添加折線
//添加折線 var polyline = new BMap.Polyline([ new BMap.Point(116.399, 39.910), new BMap.Point(116.405, 39.920) ], {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5} ); map.addOverlay(polyline);
Polyline表示地圖上的折線覆蓋物。它包含一組點,並將這些點連接起來形成折線。
添加信息類
var opts1={ width:250, height:100, title:'hello' } var infoWindow=new BMap.InfoWindow('world',opts1); map.openInfoWindow(infoWindow,map.getCenter());
使用infoWindow來創建一個信息窗實例,一個地圖上只能有一個信息窗處於打開狀態
事件監聽
百度地圖API中大部分對象都含有addEventListener,可以通過該方法來監聽對象的事件
點點擊地圖時觸發事件:
var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); map.addEventListener("click", function(){ alert("您點擊了地圖。"); });
當拖動地圖後事件:
var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); map.addEventListener("dragend", function(){ var center = map.getCenter(); alert("地圖中心點變更為:" + center.lng + ", " + center.lat); })
當地圖縮放後事件,
var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); map.addEventListener("zoomend", function(){ alert("地圖縮放至:" + this.getZoom() + "級"); });
移除事件
每一個API對象都提供了removeEventListener用來移除事件監聽函數
var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); function showInfo(e){ alert(e.point.lng + ", " + e.point.lat); map.removeEventListener("click", showInfo); } map.addEventListener("click", showInfo);
用戶第一次點擊地圖會觸發事件監聽函數,在函數內部對事件監聽進行了移除,因此後續的點擊操作則不會觸發監聽函數。
服務配置
//BMap.LocalSearch提供了若幹配置方法,通過它們可以自定義搜索服務的行為以滿足您的需求。 var local=new BMap.LocalSearch('北京市',{ renderOptions: {map: map,autoViewport: true},pageCapacity: 9 }); //結果面板 通過設置BMap.LocalSearchOptions.renderOptions.panel屬性,可以為本地搜索對象提供一個結果列表容器,搜索結果會自動添加到容器元素中 /*var local=new BMap.LocalSearch(map,{ renderOptions:{map:map,panel:'results'} }); local.search("中關村");*/ //數據介面、 //BMap.LocalSearch和BMap.LocalSearchOpions類提供了若幹設置回調函數的介面,通過它們可以得到搜索結果的數據信息.onSearchComplete包含了每一次搜索結果的數據信息BMap.LocalSearch.getStatus()方法判斷搜素是否成功或者得到錯誤信息 options={ onSearchComplete:function(results){ if(local.getStatus()==BMAP_STATUS_SUCCESS){ var s=[]; for (var i = 0; i <results.getCurrentNumPois(); i++) { s.push(results.getPoi(i).title+","+results.getPoi(i).address); } console.log(s); } } } var local=new BMap.LocalSearch(map,options,{ renderOptions: {map: map,autoViewport: true},pageCapacity: 9 }); //var local=new BMap.LocalSearch('北京市'); local.search('中華共和國公安部'); local.searchNearby('小吃','前門'); //地理編碼 var myGeo= new BMap.Geocoder();//創建地址解析協議 /* myGeo.getPoint('北京市海澱區上地10街10號',function(point){ if(point){ map.centerAndZoom(point,16);//調整地圖視野 map.addOverlay(new BMap.Marker(point));//添加標註到map上 } },'北京市');*/ //反向地理編碼 //反向地理編碼的過程正好相反,它根據一個坐標點得到一個地址的描述 myGeo.getLocation(new BMap.Point(120.305456, 31.570037),function(result){ if(result){ alert(result.address); } });
全景控制項
//點擊全景控制項會進入全景圖,點擊全景圖右上角的關閉按鈕會退回到普通地圖。 //通過全景控制項可以從普通地圖進入全景地圖,添加全景控制項的方式同添加工具條等控制項類似 var stCtrl=new BMap.PanoramaControl(); stCtrl.setOffset(new BMap.Size(20,20)); map.addControl(stCtrl); //設置導航控制項 var panorama=new BMap.Panorama('panorama',{navigationControl:false,linksControl:false}); Panorama.setOptions({navigationControl:false,linksControl:false}); //設置道路指引控制項 //通過PanoramaOption指定 var panorama = new BMap.Panorama('panorama', {linksControl:false}); //預設為顯示道路指引控制項,預設值為true //通過setOptions方法指定 Panorama.setOptions({linksControl:false});