zoukankan      html  css  js  c++  java
  • 百度地图实现行政区域高亮显示

    最近项目中遇到一个地图显示的问题

    从数据库查询到一个数据集,其中每条数据都包含自己的地理位置信息(经度、纬度、省、市),需要在地图上显示这些数据的分布,并高亮显示

    省市字段的值并不规范,可能由于填写并不正确而找不到经纬度

    于是我打算通过表中的经纬度逆向解析省市名称,再描绘省市的边框,填充颜色从而达到高亮显示的效果

    这里我图方便直接用省市名称了,如果你想通过经纬度获取省市名称,只需调用下面的连接即可

    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>

    运行效果如下

  • 相关阅读:
    java8新特性学习:stream与lambda
    Storm实践(一):基础知识
    Google Protocol Buffer入门
    zeromq实践
    maven实践--你所需要了解的maven
    springcloud实践(一)服务发现:Eureka
    职责链模式(chain of responsibility Pattern)
    代理模式 (Proxy Pattern)
    享元模式(Flyweight Pattern)
    外观模式(Facade Pattern)
  • 原文地址:https://www.cnblogs.com/yaotome/p/8877551.html
Copyright © 2011-2022 走看看