百度地圖實現行政區域高亮顯示


最近項目中遇到一個地圖顯示的問題

從數據庫查詢到一個數據集,其中每條數據都包含自己的地理位置信息(經度、緯度、省、市),需要在地圖上顯示這些數據的分布,並高亮顯示

省市字段的值並不規范,可能由於填寫並不正確而找不到經緯度

於是我打算通過表中的經緯度逆向解析省市名稱,再描繪省市的邊框,填充顏色從而達到高亮顯示的效果

這里我圖方便直接用省市名稱了,如果你想通過經緯度獲取省市名稱,只需調用下面的連接即可

http://api.map.baidu.com/geocoder/v2/?ak=你的ak值&callback=renderReverse&location=36.131234,114.297000&output=json&pois=1

先看運行效果

請注意我把演示代碼傳到了github上,由於github是基於https協議的,不允許引用http的腳本

所以應該把百度地圖api連接改為如下格式,參數加一個s=1

<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=你的ak值&s=1"></script>

jquery也改為CDN的標准連接

<script src="https://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script>

 

下面是代碼

  1 <!DOCTYPE html>
  2 
  3 <html>
  4 <head>
  5     <meta name="viewport" content="width=device-width" />
  6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7     <title></title>
  8     <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
  9     <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的ak值"></script>
 10     <script type="text/javascript" src="http://api.map.baidu.com/library/AreaRestriction/1.2/src/AreaRestriction_min.js"></script>
 11     
 12     <style type="text/css">
 13         html, body {
 14             margin: 0px;
 15             padding: 0px;
 16         }
 17         #container {
 18             height: 600px;
 19         }
 20     </style>
 21 </head>
 22 
 23 <body>
 24     <div id="container"></div>
 25 
 26 
 27 <script type='text/javascript'>
 28 //需引用api.map.baidu.com/library/AreaRestriction/1.2/src/AreaRestriction_min.js
 29 var map = new BMap.Map("container",{ minZoom : 5,maxZoom:20 }); // 創建地圖實例
 30 //設置個性化樣式
 31 map.setMapStyle({
 32       styleJson:  [{
 33             "featureType": "road",
 34             "elementType": "all",
 35             "stylers": {
 36                     "color": "#ffffff",
 37                     "visibility": "off"
 38                    }
 39             }]
 40 });
 41 
 42 map.enableScrollWheelZoom();
 43 map.enableDragging();
 44 map.disableDoubleClickZoom();
 45 
 46 var blist = [];
 47 var districtLoading = 0;
 48 
 49 /*
 50 =====獲取行政區域邊界=====
 51 */
 52 function getBoundary() {   
 53     addDistrict("遼寧省");
 54     addDistrict("河北省");
 55     addDistrict("陝西省");
 56     addDistrict("江西省");
 57     addDistrict("石家庄");
 58     addDistrict("青島");
 59 }
 60 
 61 /*
 62 =====添加行政區域=====
 63 */
 64 function addDistrict(districtName) {
 65     //使用計數器來控制加載過程
 66     districtLoading++;
 67     var bdary = new BMap.Boundary();
 68     bdary.get(districtName, function (rs) {       //獲取行政區域
 69         var count = rs.boundaries.length; //行政區域的點有多少個
 70         for (var i = 0; i < count; i++) {
 71             blist.push({ points: rs.boundaries[i], name: districtName });
 72         };
 73         //加載完成區域點后計數器-1
 74         districtLoading--;
 75         if (districtLoading == 0) {
 76             //全加載完成后畫端點
 77             drawBoundary();
 78         }
 79     });
 80 }
 81 
 82 /*
 83 =====點擊行政區域事件=====
 84 */
 85 function click(evt) {
 86     alert(evt.target.name);
 87 }
 88 /*
 89 =====繪制邊界=====
 90 */
 91 function drawBoundary() {
 92     //包含所有區域的點數組
 93     var pointArray = [];
 94     //循環添加各閉合區域
 95     for (var i = 0; i < blist.length; i++) {
 96         //添加多邊形層並顯示
 97         var ply = new BMap.Polygon(blist[i].points, { 
 98                                           strokeWeight: 1,   //邊框寬度
 99                                           trokeColor: "#014F99",   //邊框顏色
100                                           fillColor: " #DDE4F0" //填充顏色
101                                        }); //建立多邊形覆蓋物
102         ply.name = blist[i].name;
103         ply.addEventListener("click", click);
104         map.addOverlay(ply);
105 
106         //將點增加到視野范圍內
107         var path = ply.getPath();
108         pointArray = pointArray.concat(path);
109     }
110 
111     //限定顯示區域(只顯示特定區域,鼠標拖動松開后自動回到顯示范圍內),需要引用api庫
112    // var boundply = new BMap.Polygon(pointArray);
113    // BMapLib.AreaRestriction.setBounds(map, boundply.getBounds());
114     map.setViewport(pointArray);    //調整視野 
115 }
116 
117 setTimeout(function () {
118     getBoundary();
119 }, 100);
120 </script>
121 </body>
122 </html>

運行效果如下


免責聲明!

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



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