百度地图api只显示某个省市的行政区域

本文介绍如何使用百度地图API创建地图实例,绘制贵州省及其下属市州的行政区划,并展示如何添加自定义区县。通过HTML和JavaScript代码实现地图的中心定位、缩放、平移以及行政区划的覆盖物绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 有些时候我们只需要某个省份的行政区域,那么运用百度地图如何实现呢?
 我们先上效果图:

步骤:

  1. 创建map实例

html代码:

<div id="main" style="width: 100%;height: 100vh;overflow:hidden;"></div>

script代码:

var map;
 function createMap() {
    map = new BMap.Map('main'); // mian为地图的容器id
    map.centerAndZoom(new BMap.Point(106.714476, 26.60403), 8);
    // 将地图在水平位置上移动x像素,垂直位置上移动y像素(x,y)
    map.panBy(-210, 330);
    getBoundary();
  }
  createMap();
  1. 绘制行政区域外覆盖物
function getBoundary() {
   map.clearOverlays(); // 清除地图的其余覆盖物
   const bdary = new BMap.Boundary();
   bdary.get('贵州省', (rs) => {
     const count = rs.boundaries.length;
     if (count === 0) {
       return ;
     }
     const EN_JW = '180, 90;';
     const NW_JW = '-180,  90;';
     const WS_JW = '-180, -90;';
     const SE_JW = '180, -90;';
     // 东南西北四个角添加一个覆盖物
     const ply1 = new BMap.Polygon(rs.boundaries[0] + SE_JW + SE_JW + WS_JW + NW_JW + EN_JW + SE_JW,
     { strokeColor: 'none', fillColor: '#333', fillOpacity: 1, strokeOpacity: 1 });
     map.addOverlay(ply1);
     // 绘制‘贵州省’整体的外轮廓
     for (let i = 0; i < count; i++) {
       const ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 0.5, strokeColor: 'transparent', fillColor: 'transparent'});
       map.addOverlay(ply);
     }
     getRegion();
   });
 }
  1. 绘制省内各个市州的区划
    1)获取到省内各个市州的名称以及他们的中心点坐标写成一个变量
var dataArr = [
   {
     "name":  '安顺市',
     "cp": [105.9082, 25.9882]
   },
   {
     "name": "贵阳市",
     "cp": [106.6992, 26.7682]
   },
   {
     "name": "遵义市",
     "cp": [106.908, 28.1744]
   },
   {
     "name": "黔东南苗族侗族自治州",
     "cp": [108.519944, 26.835886]
   },
   {
     "name": "毕节市",
     "cp": [105.1611, 27.0648]
   },
   {
     "name": "黔南布依族苗族自治州",
     "cp": [107.235181, 25.705737]
   },
   {
     "name": "黔西南布依族苗族自治州",
     "cp": [105.5347, 25.3949]
   },
   {
     "name": "六盘水市",
     "cp": [104.7546, 26.0925]
   },
   {
     "name": "铜仁市",
     "cp": [108.6218, 28.0096]
   }];

  2)绘制各个市州的轮廓

function getRegion() {
      dataArr.forEach(element => {
        var bdary = new BMap.Boundary();
        bdary.get(element['name'], rs => {
          var count = rs.boundaries.length;
          for (let i = 0; i < count; i++) {
            var ply = new BMap.Polygon(rs.boundaries[i], {
              strokeWeight: 0.5, strokeColor: '#fff', fillOpacity: 0.6, fillColor: '#a9dbf7'});
            this.map.addOverlay(ply);
          }
          citySetLabel(new BMap.Point(element['cp'][0], element['cp'][1]) , element['name']);
        });
      });
  }

注意: 若是想画自定义的某个市州区县,那么我们可以再定一个变量存放这个区县的区划坐标,具体的区划坐标我们要按照百度地图的格式,如:

var newData = {
    "name": "贵安新区",
    "cp": [106.347343,26.466366],
    "coordinates": [
         [106.062, 26.4606],
         [106.1279, 26.4935],
         [106.1389, 26.5869],
         [106.1609, 26.5979],
         ... // 区划的边线经纬度
    ]
}

接下来我们修改上面的getRegion() 方法,让它最后画该区域,可以保证其他区域不可以覆盖此区域:

var regionNum = 0;
function getRegion() {
      dataArr.forEach(element => {
      regionNum++;
        var bdary = new BMap.Boundary();
        bdary.get(element['name'], rs => {
          var count = rs.boundaries.length;
          for (let i = 0; i < count; i++) {
            var ply = new BMap.Polygon(rs.boundaries[i], {
              strokeWeight: 0.5, strokeColor: '#fff', fillOpacity: 0.6, fillColor: '#a9dbf7'});
            this.map.addOverlay(ply);
          }
          citySetLabel(new BMap.Point(element['cp'][0], element['cp'][1]) , element['name']);
          regionNum--;
          if (regionNum === 0) { // 最后才画贵安新区
            var newplyArr = [];
            newData['coordinates'].forEach(item => {
              newplyArr.push(new BMap.Point(item[0], item[1]));
            });
            const newply = new BMap.Polygon(newplyArr, {
              strokeWeight: 0.6, strokeColor: '#fff', fillOpacity:  0.3, fillColor: '#a9dbf7'});
            map.addOverlay(newply);
            citySetLabel(new BMap.Point(newData['cp'][0], newData['cp'][1]) , newData['name']);
          }
        });
      });
  }
  1. 城市中心点坐标显示label
citySetLabel(cityCenter, cityName) {
    var label = new BMap.Label(cityName, {
      offset: new BMap.Size(-20, -10),
      position: cityCenter
    });
    label.setStyle({
      border: 'none',
      background: 'transparent',
      'font-size': '0.25rem',
      color: '#fff',
    });
    map.addOverlay(label);
  }
### 使用百度地图 API 获取省市区信息 要通过 JavaScript 调用百度地图 API 来获取当前地址的省市区划分,可以通过以下方式实现: #### 1. 引入百度地图 API 首先,在 HTML 文件中引入百度地图的 JavaScript API。需要提供一个有效的 AK(访问密钥),该密钥可以从百度地图开发者平台上申请。 ```html <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=您的AK"></script> ``` 此处 `v` 参数表示版本号,而 `ak` 是您在百度地图开放平台注册并生成的应用程序密钥[^1]。 #### 2. 初始化地图对象 初始化 BMap 对象以便后续操作能够正常运行。以下是基本的地图初始化代码片段: ```javascript function initBaiduMap() { var map = new BMap.Map("mapContainer"); // 创建 Map 实例,指定 DOM 容器 ID } ``` 此部分代码用于定义地图实例以及关联到页面上的某个特定容器元素上。 #### 3. 利用 IP 定位服务获得当前位置坐标 为了得到用户的地理位置信息,可以借助于百度提供的基于 IP 的逆地理编码功能。这一步骤会返回经纬度数据以及其他附加信息如省份、城市等详情。 ```javascript var geolocationControl = new BMap.GeolocationControl(); geolocationControl.addEventListener('locationSuccess', function(e){ console.log('纬度:', e.point.lat); console.log('经度:', e.point.lng); getCityInfoByLocation(e.point); // 将位置传递给函数处理 }); geolocationControl.addEventListener('locationError',function(e){ alert('无法获取当前位置'); }); // 添加控件至地图 map.addControl(geolocationControl); ``` 上述脚本设置了两个事件监听器分别应对成功与失败的情况,并且当定位成功时调用了自定义的方法进一步解析更详细的区域描述[^2]。 #### 4. 执行反向地理编码请求以提取行政区划名称 最后一步就是发送 HTTP 请求去查询具体的行政单位名字。这里我们再次运用到了之前提到过的点参数作为输入条件之一来进行检索工作。 ```javascript function getCityInfoByLocation(point) { var gc = new BMap.Geocoder(); gc.getLocation(point, function(rs){ var addComp = rs.addressComponents; document.getElementById("province").value = addComp.province; document.getElementById("city").value = addComp.city; document.getElementById("district").value = addComp.district; console.log(addComp); // 输出完整的结构化地址成分 }); } ``` 在这个例子当中,我们创建了一个新的 Geocoder 类型的对象用来执行实际的任务——即根据已知的空间参照系查找匹配的地名记录集合;随后从中读取出所需的字段值填充进各自的表单项之中[^3]。 ### 注意事项 - **安全性**:确保生产环境中隐藏真实的 API 密匙。 - **错误处理机制**:考虑到网络状况或者权限不足等因素可能导致的服务不可达情形下应设计合理的反馈提示语句告知最终使用者可能存在的异常情况发生概率及其解决办法建议列表等内容项说明文档链接地址如下所示: - 更多关于配置选项和支持的功能细节可查阅官方手册参考资料来源网址为 http://lbsyun.baidu.com/index.php?title=jspopular
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值