百度地圖(8)-圖層


1. 圖層其實是使用了疊加的概念,將一個類型或者屬性的物體,疊加在另外一個物體上,只不過這些物體

都是有位置的,當這些物體疊加在一起時,就能顯示出對應的位置關系了,再賦予它們不同的樣式,

當這樣的疊加越來越多時,則能描述出一個復雜的空間物體關系了。

 

2. CanvasLayer

首先按照正常程序繪制canvas,然后將canvas通過Overlay添加到地圖上,和前面添加 Marker 的原理其實是一樣的。

 1 // 添加Canvas2D覆蓋物
 2 var canvasLayer = null;
 3 
 4 function addCanvasLayer(){
 5 
 6   /**
 7    * 如果已存在,則刪除,否則添加多個后,無法通過 removeCanvasLayer 函數刪除,
 8    **/
 9   if(canvasLayer){
10     removeCanvasLayer();
11     canvasLayer = null;
12   }
13 
14   canvasLayer = new BMap.CanvasLayer({
15     update:update
16   });
17 
18   function update(){
19     var ctx = this.canvas.getContext("2d");
20     if(!ctx){
21       return;
22     }
23 
24     ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);
25     var temp = {};
26     ctx.fillStyle = "rgba(50,50,255,0.7)";
27     ctx.beginPath();
28     var data = [
29       new BMap.Point(117.3223,31.8534),
30       new BMap.Point(117.3568,31.85863),
31       new BMap.Point(117.3465,31.88641)
32     ];
33     for(var i=0,len = data.length; i<len;i++) {
34       var pixel = map.pointToPixel(data[i]);
35       ctx.fillRect(pixel.x,pixel.y,30,30);
36     }
37   }
38   map.addOverlay(canvasLayer);
39 }

 

3. 添加TileLayer

TileLayer 一般為金字塔形的圖片地址,根據xyz的排列規則進行加載。

此代碼是加載清華的微圖。

 1 function addTileLayer(){
 2   map.centerAndZoom(new BMap.Point(116.332782, 40.007978), 16);
 3   tileLayer = new BMap.TileLayer({isTransparentPng:true});
 4   tileLayer.getTilesUrl = function (tileCoord, zoom) {
 5     var x = tileCoord.x;
 6     var y = tileCoord.y;
 7     return '../img/tsinghua/' + zoom + '/tile' + x + '_' + y + '.png';;
 8   }
 9   map.addTileLayer(tileLayer);
10 }

 

4. 地面疊加層高

地面疊加層使用的是 GroundOverlay,添加到地圖上時,使用的是  map.addOverlay。此處以圖片為地圖,添加到地圖上。

可以通過設置 opacity | displayOnMinLevel | displayOnMaxLevel 控制顯示內容。

 1 function addGroundOverlay() {
 2 
 3   // 西南角和東北角
 4   var SW = new BMap.Point(116.29579,39.837146);
 5   var NE = new BMap.Point(116.475451,39.9764);
 6 
 7   map.centerAndZoom(SW, 13);
 8 
 9 
10   groundOverlayOptions = {
11     opacity: 1,
12     displayOnMinLevel: 10,
13     displayOnMaxLevel: 14
14   }
15 
16   // 初始化GroundOverlay
17   groundOverlay = new BMap.GroundOverlay(new BMap.Bounds(SW, NE), groundOverlayOptions);
18 
19   // 設置GroundOverlay的圖片地址
20   groundOverlay.setImageURL('../img/si-huan.png');
21 
22   // 單擊事件
23   groundOverlay.addEventListener('click', function (clickEvent) {
24     // console.log('clickEvent', clickEvent);
25   });
26 
27   // 雙擊事件
28   groundOverlay.addEventListener('dblclick', function (dblclickEvent) {
29     // console.log('dblclickEvent', dblclickEvent);
30   });
31 
32   // 添加GroundOverlay
33   map.addOverlay(groundOverlay);
34 }

 

4. 交通流量層 TrafficLayer

TrafficLayer 是BMap 中封裝好的對象,可以直接調用。這里是自己寫的邏輯,其實完全可以使用 TrafficControl 代替這些代碼。

TrafficControl 的內部代碼我沒有去看,邏輯上應該和這個差不多,只不過封裝為了一個Control對象。

 1 var trafficLayer = null;//交通流量圖層
 2 var trafficType = 0 ;
 3 /**
 4  * 添加交通流量圖層
 5  */
 6 function showTrafficLayer(){
 7 
 8   if(trafficType == 0){
 9     addTrafficeLayer();
10     trafficType = 1;
11   } else {
12     removeTrafficLayer();
13     trafficType = 0 ;
14   }
15 }
16 
17 function addTrafficeLayer(){
18   trafficLayer = new BMap.TrafficLayer();
19   map.addTileLayer(trafficLayer);
20 }
21 
22 function removeTrafficLayer(){
23   if(trafficLayer){
24     map.removeTileLayer(trafficLayer);
25   }
26 }

 

5. DrawManager

這是一個開源的封裝個對象庫,http://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/mouse2draw

主要引用了以下文件

1 <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
2 <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />

實際代碼

 1 function addDrawManager(){
 2   var styleOptions = {
 3     storkColor:"red",
 4     fillColor:"red",
 5     strokeWeight:3,
 6     strokeOpacity:0.7,
 7     fillOpacity: 0.6,
 8     strokeStyle:'solid'
 9   }
10 
11   var drawingManager = new BMapLib.DrawingManager(map,{
12     _isOpen:false,
13     enableDrawingTool:true,
14     drawingToolOptions:{
15       anchor: BMAP_ANCHOR_TOP_RIGHT,
16       offset: new BMap.Size(5,5)
17     },
18     circleOptions:styleOptions,
19     polylineOptions:styleOptions,
20     polygonOptions: styleOptions,
21     rectangleOptions: styleOptions
22   });
23   drawingManager.addEventListener('overlaycomplete',overlaycomplete);
24 
25 }

 

6.  頁面顯示

CanvasLayer

 

TileLayer

 

GroundOverlay

 

 

 

DrawManager

 

 

7. 代碼參考:

https://github.com/WhatGIS/bdMap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM