這里所說的標注,就是圖元對象的意思,也就是向地圖上添加各種各樣的對象。
所以,標注就牽涉到兩個要素:位置和要素,位置知道它在哪里,樣式知道它是什么樣子。
百度地圖主要通過Marker以及Overlay來進行標注的定義和添加。
1. 添加點要素並添加點擊事件。
1 function addMarkerPoint() { 2 3 var marker = new BMap.Marker(point); 4 map.addOverlay(marker); 5 6 marker.addEventListener("click", function () { 7 8 var htmlContent = ["<div class='infoBoxContent'><div class='title'><strong>中海雅園</strong><span class='price'>均價43000,overlay-下面的鏈接無法打開,而infobox可以</span></div>", 9 "<div class='list'><ul><li><div class='left'><img src='/bdMap/img/house3.jpg'/></div><div class='left'><a target='_blank' href='http://map.baidu.com'>中海雅園南北通透四居室</a><p>4室2廳,205.00平米,3層</p></div><div class='rmb'>760萬</div></li>" 10 ,"<li><div class='left'><img src='/bdMap/img/house1.jpg'/></div><div class='left'><a target='_blank' href='http://map.baidu.com'>中海雅園四居室還帶保姆間</a><p>2室1廳,112.00平米,16層</p></div><div class='rmb'>300萬</div></li>" 11 ,"<li><div class='left'><img src='/bdMap/img/house2.jpg'/></div><div class='left'><a target='_blank' href='http://map.baidu.com'>《有鑰匙 隨時看》花園水系</a><p>3室2廳,241.00平米,16層</p></div><div class='rmb'>400萬</div></li>" 12 ,"<li><div class='left'><img src='/bdMap/img/house3.jpg'/></div><div class='left'><a target='_blank' href='http://map.baidu.com'>富力城D區正規樓王大三居</a><p>3室3廳,241.00平米,17層</p></div><div class='rmb'>600萬</div></li>" 13 ,"<li class='last'><div class='left'><img src='/bdMap/img/house1.jpg'/></div><div class='left'><a target='_blank' href='http://map.baidu.com'>富力城豪,身份人士的象征</a><p>4室2廳,213.90平米,25層</p></div><div class='rmb'>700萬</div></li>" 14 ,"</ul></div>" 15 ,"</div>"]; 16 17 var richContent = new BMapLib.RichMarker(htmlContent.join(""),point,{ 18 19 "anchor": new BMap.Size(-72,-86), 20 "enableDragging":true 21 }); 22 map.addOverlay(richContent); 23 24 }); 25 marker.enableDragging(); 26 marker.addEventListener("dragend", function(e){ 27 alert("當前位置:" + e.point.lng + ", " + e.point.lat); 28 }); 29 }
2. 點標注對象
1 var marker = new BMap.Marker(point); 2 map.addOverlay(marker);
定義了一個 Marker 對象, point為定義的公共變量,默認為地圖初始化時的中心點。
然后在地圖上通過Overlay添加Marker。這樣添加一個默認點標注的功能就完成了。
3. 富文本標注
1 var richContent = new BMapLib.RichMarker(htmlContent.join(""),point,{ 2 3 "anchor": new BMap.Size(-72,-86), 4 "enableDragging":true 5 }); 6 map.addOverlay(richContent);
定義了一個富標注的對象,其包含在BMapLib 中,
引用參考代碼:
1 <script type="text/javascript" src="/bdMap/js/BMapLib/RichMarker.min.js"></script>
4. 添加線標注
1 var polyline = new BMap.Polyline([ 2 new BMap.Point(117.2972,31.8988), 3 new BMap.Point(117.2872,31.9088) 4 ], 5 { 6 strokeColor:"blue", 7 strokeWeight:6, 8 strokeOpacity:0.5 9 }); 10 map.addOverlay(polyline);
這里定義了一個Polyline的對象,定義了兩個點的坐標,以及填充的顏色、透明度以及線寬度。
5. 添加區域標注
1 var circle = new BMap.Circle(point,500,{ //圓形區域 2 strokeColor:"green", 3 strokeWeight:2, 4 strokeOpacity:0.7 5 }); 6 7 circle.addEventListener("click",function () { 8 var center = circle.getBounds().getCenter(); 9 addSimpleInfo(center,"你點了這個圓。"); 10 }); 11 map.addOverlay(circle); 12 13 var pEnd = new BMap.Point(117.3172,31.9188); // 長方形區域 14 var rectangle = new BMap.Polygon([ 15 new BMap.Point(point.lng,point.lat), 16 new BMap.Point(pEnd.lng,point.lat), 17 new BMap.Point(pEnd.lng,pEnd.lat), 18 new BMap.Point(point.lng,pEnd.lat) 19 ],{ 20 strokeColor:'yellow', 21 strokeWeight:2, 22 strokeOpacity:0.5 23 }); 24 rectangle.addEventListener("click",function () { 25 var center = rectangle.getBounds().getCenter(); 26 addSimpleInfo(center,"你點了這個長方形。"); 27 }); 28 map.addOverlay(rectangle); 29 30 var polygon = new BMap.Polygon([ //多邊形區域 31 new BMap.Point(117.2972,31.8988), 32 new BMap.Point(117.2625,31.8635), 33 new BMap.Point(117.3223,31.8534), 34 new BMap.Point(117.3568,31.85863), 35 new BMap.Point(117.3465,31.88641) 36 ],{ 37 strokeColor:"red", 38 strokeWeight: 3, 39 strokeOpacity: 0.6 40 }); 41 polygon.addEventListener("click",function (){ 42 var center = polygon.getBounds().getCenter(); 43 addSimpleInfo(center,"你點了個多邊形。") 44 }) 45 map.addOverlay(polygon);
6. 添加TextIcon標注
1 map.addOverlay(new BMapLib.TextIconOverlay(new BMap.Point(117.2972,31.8988), 7)); 2 map.addOverlay(new BMapLib.TextIconOverlay(new BMap.Point(117.2625,31.8635), 15)); 3 map.addOverlay(new BMapLib.TextIconOverlay(new BMap.Point(117.3223,31.8534), 24)); 4 map.addOverlay(new BMapLib.TextIconOverlay(new BMap.Point(117.3568,31.85863), 48)); 5 map.addOverlay(new BMapLib.TextIconOverlay(new BMap.Point(117.3465,31.88641), 99));
TextIcon 類包含在BMapLib 的庫中,具體引用參考代碼。
7. 添加自定義圖標
1 /** 2 * 添加自定義圖標標注 3 **/ 4 function addMarkerIcon(){ 5 var myIcon = new BMap.Icon("/bdMap/img/1.gif",new BMap.Size(36,36)); 6 var pt =new BMap.Point(117.3172,31.9188); 7 var marker = new BMap.Marker(pt,{ 8 icon: myIcon 9 }); 10 marker.enableDragging(); 11 map.addOverlay(marker); 12 13 var opts = { 14 position: pt, 15 offset: new BMap.Size(10,10) 16 } 17 var label = new BMap.Label("這是一個測試用的站點",opts); 18 19 marker.addEventListener("onmouseout", function(e) { 20 map.removeOverlay(label); 21 }); 22 marker.addEventListener("onmouseover", function(e) { 23 console.log("泵房站點: " + e.point.lng + " , " + e.point.lat + " ; " + e.pixel.x + " , " + e.pixel.y + " | "); 24 map.addOverlay(label); 25 }); 26 27 addMarkerInfo(marker); 28 }
8. 頁面顯示
9. 代碼參考