百度地图 行政区域 高亮

在项目中遇到需要在地图上高亮显示行政区域的需求,通过研究解决了点顺序不准确导致的遮罩问题。本文介绍了如何利用百度地图API获取行政区域边界,并创建多边形覆盖物实现高亮效果,同时避免了边界线错误和区域外显示不准确的状况。
部署运行你感兴趣的模型镜像

最近接着个需求,需要在地图上将行政区域高亮,在网上找了几个方法,都是自己算的点顺序,总结了一下,出现过以下几个问题

1、行政区域边线画出来了,但是遮罩不准,应该是点顺序的问题,导致总是有显示或者不显示的地方

2、有一条线连到边界,或者区域外有些地方不准

3、自己按照一定的顺序组合点顺序,看着费劲,不方便

自己研究了一下,做了一下改动,很简单,在这里记录一下。代码如下。

function getBoundary(){       
        //百度地图获取行政区域的对象
        var bdary = new BMap.Boundary();
   
       bdary.get("重庆", function (rs) {       //获取行政区域
           
           //以下是获取行政区域的回调
        map.clearOverlays();        //清除地图覆盖物         
 
         //需要绘制边界多边形的点集合
         var paths = new Array();
         //行政区域点集合,以;分隔的
      var pointliststr = rs.boundaries[0];
      //3获取点数组,push到 paths中
        var pointlist = pointliststr.split(";");
        var firstPoint;
          for(var i =0;i<pointlist.length;i++)
          {
                  
              var tempPt = pointlist[i].split(',');
              var newPoint = new BMap.Point(tempPt[0],tempPt[1]);
              if(i==0){ firstPoint= newPoint;};
          
            paths.push(newPoint);
        }
          //第一点再推进去,形成一个闭环,构造了多边形的内环
        paths.push(firstPoint);
        
        //自定义的八个便捷点,从东开始逆时针,东,东北,北,西北,西,西南,南,东南(必须按顺序来)
              paths.push(new BMap.Point(170.672126, 39.623555));
            paths.push(new BMap.Point(170.672126, 81.291804));
            paths.push(new BMap.Point(105.913641, 81.291804));
            paths.push(new BMap.Point(-169.604276,  81.291804));
            paths.push(new BMap.Point(-169.604276, 39.623555));
            paths.push(new BMap.Point(-169.604276, -68.045308));
            paths.push(new BMap.Point(105.913641, -68.045308));
            paths.push(new BMap.Point(170.672126, -68.045308));
              paths.push(new BMap.Point(170.672126, 39.623555));
        
        //4绘制第一个多边形,覆盖住除行政区外的所有部分,fillColor:填充色,strokeColor:边界颜色(设置透明,否则会有其他线条),strokeOpacity:线条透明,fillOpacity:填充物透明。
          var ply1 = new BMap.Polygon("",
           { fillColor: "#708090", strokeColor: "transparent", strokeOpacity:0,fillOpacity:0}); //建立多边形覆盖物
           //将之前形成的点set到多边形对象中
           ply1.setPath(paths);
           //在地图上添加第一个多边形
           map.addOverlay(ply1);  //遮罩物是半透明的,如果需要纯色可以多添加几层


            //5. 给目标行政区划添加边框,其实就是给目标行政区划添加一个没有填充物的遮罩层,绘制出边界线
            var ply = new BMap.Polygon(rs.boundaries[0],
            { strokeWeight: 2, strokeColor: "#ff0000",fillColor: "transparent" });
                map.addOverlay(ply);   
                map.setViewport(ply.getPath());    //调整视野                 
            });
        }

        setTimeout(function(){
            getBoundary();            
        }, 200);

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值