vue实现 地图只显示几个省份

本文介绍如何使用百度地图API,通过JavaScript和Vue.js,仅显示选定的省份如甘肃省和陕西省,实现地图的区域限制功能。

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

一、开场白

今天给大家说一说百度地图如何只显示一个省份,或者几个省份,再说大点就是那个国家。

二、操作

1. 引入js,vue和jquery自己去下载一个

    <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=CIssYEHtXA28ej0NoFeqfnGPZrlu4nqZ"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/library/AreaRestriction/1.2/src/AreaRestriction_min.js"></script>
<script type="text/javascript" src="../../../script/vue/vue.min.js"></script>
<script type="text/javascript" src="../../../script/jquery/jquery-3.5.1.min.js"></script>

2. 写一个地图div,我这边是将vue.js引入了html中

<div id="vue-app">
        <div id="map1" style="width:100% ; overflow:hidden;" ></div>
</div>

//vue的使用

var app;
        app = new Vue({
        el: '#vue-app1',
        data: {
        },
        mounted: function() {
        },
        methods: {}

3. data中定义参数

  data: {

          districtLoading: 0,
          blist: [],
          styles:{
            width: '100%',
            height: ''
}

4. 调用map

  mounted: function() {
            var _seft = this;
            _seft.map();
        },

5. 写map(),写在 methods下面

map :function(){
              var _seft = this;
                _seft.map1();
            
            },
           
            map1: function() {
                var _seft = this;
                _seft.createMap("map1");
            },
           
            createMap: function(idName) {
                var _seft = this;
                // 百度地图API功能
                var map = new BMap.Map(idName); // 创建Map实例
                var point = new BMap.Point(106.404, 19.915);
                map.centerAndZoom(point, 1); // 初始化地图,设置中心点坐标和地图级别
                map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
              	map.enableScrollWheelZoom();
                _seft.getBoundary(map);
                
            },
            getBoundary: function(map) {
              var _seft = this;
                  _seft.addDistrict("甘肃省",map);
                  _seft.addDistrict("陕西省",map);

            },

            /**
             * 添加行政区划
             * @param {} districtName 行政区划名
             * @returns  无返回值
             */
            addDistrict: function (districtName,map) {
              console.log("<>"+districtName);
              var _seft = this;
                //使用计数器来控制加载过程
                _seft.districtLoading++;
                var bdary = new BMap.Boundary();
                bdary.get(districtName, function (rs) {       //获取行政区域
                    var count = rs.boundaries.length; //行政区域的点有多少个
                    console.log("////"+JSON.stringify(rs));
                    if (count === 0) {
                        alert('未能获取当前输入行政区域');
                        return;
                    }
                    for (var i = 0; i < count; i++) {
                        _seft.blist.push({ points: rs.boundaries[i], name: districtName });
                    };
                    //加载完成区域点后计数器-1
                    _seft.districtLoading--;
                    if (_seft.districtLoading == 0) {
                        //全加载完成后画端点
                        _seft.drawBoundary(map);
                    }
                });
            },

            /**
             * 各种鼠标事件绑定
             */
             click: function(evt) {
                alert(evt.target.name);
            },

             mouseover: function(evt) {
                evt.target.label.setZIndex(99);
                evt.target.label.setPosition(evt.point);
                evt.target.label.show();
            },

             mousemove: function(evt) {
                evt.target.label.setPosition(evt.point);
            },

             mouseout: function(evt) {
                evt.target.label.hide();
            },

            drawBoundary :function(map) {
              var _seft = this;
                //包含所有区域的点数组
                var pointArray = [];

                /*画遮蔽层的相关方法
                *思路: 首先在中国地图最外画一圈,圈住理论上所有的中国领土,然后再将每个闭合区域合并进来,并全部连到西北角。
                *      这样就做出了一个经过多次西北角的闭合多边形*/
                //定义中国东南西北端点,作为第一层
                var pNW = { lat: 59.0, lng: 73.0 }
                var pNE = { lat: 59.0, lng: 136.0 }
                var pSE = { lat: 3.0, lng: 136.0 }
                var pSW = { lat: 3.0, lng: 73.0 }
                //向数组中添加一次闭合多边形,并将西北角再加一次作为之后画闭合区域的起点
                var pArray = [];
                pArray.push(pNW);
                pArray.push(pSW);
                pArray.push(pSE);
                pArray.push(pNE);
                pArray.push(pNW);
                //循环添加各闭合区域
                for (var i = 0; i < _seft.blist.length; i++) {
                    //添加显示用标签层
                    var label = new BMap.Label(_seft.blist[i].name, { offset: new BMap.Size(20, -10) });
                    label.hide();
                    map.addOverlay(label);

                    //添加多边形层并显示
                    var ply = new BMap.Polygon(_seft.blist[i].points, { strokeWeight: 5, strokeColor: "#FF0000", fillOpacity: 0.01, fillColor: " #FFFFFF" }); //建立多边形覆盖物
                    ply.name = _seft.blist[i].name;
                    ply.label = label;
                    ply.addEventListener("click", _seft.click);
                    ply.addEventListener("mouseover", _seft.mouseover);
                    ply.addEventListener("mouseout", _seft.mouseout);
                    ply.addEventListener("mousemove", _seft.mousemove);
                    map.addOverlay(ply);

                    //添加名称标签层
                    var centerlabel = new BMap.Label(_seft.blist[i].name, { offset: new BMap.Size(0, 0) });
                    centerlabel.setPosition(ply.getBounds().getCenter());
                    map.addOverlay(centerlabel);

                    //将点增加到视野范围内
                    var path = ply.getPath();
                    pointArray = pointArray.concat(path);
                    //将闭合区域加到遮蔽层上,每次添加完后要再加一次西北角作为下次添加的起点和最后一次的终点
                    pArray = pArray.concat(path);
                    pArray.push(pArray[0]);
                }

                //限定显示区域,需要引用api库
                var boundply = new BMap.Polygon(pointArray);
                BMapLib.AreaRestriction.setBounds(map, boundply.getBounds());
                map.setViewport(pointArray);    //调整视野

                //添加遮蔽层
                var plyall = new BMap.Polygon(pArray, { strokeOpacity: 0.0000001, strokeColor: "#000000", strokeWeight: 0.00001, fillColor: "#ffffff", fillOpacity: 0.9 }); //建立多边形覆盖物
                map.addOverlay(plyall);
            }

大功告成

不懂得可以加我公众号

### Vue实现高德地图省份鼠标移入高亮效果的方法 要在 Vue实现高德地图省份鼠标移入时的高亮效果,可以按照以下方式构建功能逻辑: #### 初始化 AMap 和 DistrictSearch 插件 首先,在项目中加载高德地图 API 并注册 `AMap.DistrictSearch` 插件。通过 `<script>` 标签或者动态导入的方式引入必要的资源[^3]。 ```html <script language="javascript" src="https://webapi.amap.com/maps?v=2.0&key=your_api_key&plugin=AMap.DistrictSearch"></script> ``` 在 Vue 组件的生命周期钩子(如 `mounted`)中初始化地图实例并配置 `DistrictSearch` 对象来获取行政区域数据[^2]。 #### 地图组件中的核心逻辑 以下是完整的代码示例以及说明: ```vue <template> <div id="mapContainer" style="width: 100%; height: 500px;"></div> </template> <script> export default { data() { return { map: null, polygons: [], }; }, mounted() { this.initMap(); this.loadProvincesData(); }, methods: { initMap() { this.map = new AMap.Map('mapContainer', { zoom: 4, // 初始缩放级别 center: [108.9476, 34.2636], // 默认中心点坐标 }); }, loadProvincesData() { const districtSearch = new AMap.DistrictSearch({ level: 'province', // 查询省级行政区划 extensions: 'all', }); districtSearch.search('', (status, result) => { if (status === 'complete') { result.districtList.forEach((district) => { this.addPolygon(district); }); } }); }, addPolygon(district) { const bounds = district.boundaries; if (!bounds || !Array.isArray(bounds)) return; const polygon = new AMap.Polygon({ path: bounds[0], fillColor: '#fff', // 原始填充颜色 strokeColor: '#ccc', // 边框颜色 fillOpacity: 0.5, cursor: 'pointer', }); this.polygons.push(polygon); // 添加到地图上 this.map.add(polygon); // 设置鼠标事件监听器 polygon.on('mouseover', () => { polygon.setOptions({ fillColor: '#ffcc00' }); // 修改为高亮颜色 }); polygon.on('mouseout', () => { polygon.setOptions({ fillColor: '#fff' }); // 恢复原始颜色 }); }, }, }; </script> ``` 上述代码实现了以下几个关键功能: - **地图初始化**:调用 `new AMap.Map()` 方法创建地图容器,并设置初始参数。 - **查询省级边界数据**:利用 `AMap.DistrictSearch` 获取中国各省市的地理边界信息。 - **绘制多边形**:基于返回的数据逐一渲染每个多边形,并绑定鼠标悬停事件以调整其样式。 #### 关键技术细节 - 使用 `polygon.on('mouseover', callback)` 来捕获鼠标的进入动作,并更改当前选中区域的颜色属性[^1]。 - 同样地,当光标离开该范围时恢复默认状态 (`mouseout`)。 以上方法能够满足需求的同时保持良好的性能表现和用户体验。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值