OpenLayer自定义区域显示

OpenLayer自定义区域显示

实现效果图如下

image.png

核心方法

funcation clipMap(){
           var clipgeom = new ol.geom.Polygon(henan);
           //将经纬度坐标转换为map对应的坐标(如果初始化的底图坐标是3826,需要使用坐标系转换)
           //clipgeom = clipgeom.transform("EPSG:4326", map.getView().getProjection());
           map.on('precompose', clip);
           function clip(e) {
               var canvas=e.context;
               canvas.save();
               var coords = clipgeom.getCoordinates();
               createClip(coords[0], canvas);//取第一个面
               canvas.clip();
           }
           function createClip(coords, canvas) {
              canvas.beginPath();
               for (var i = 0, cout = coords.length; i < cout; i++) {
                   //获取屏幕坐标
                   var screenCoord = map.getPixelFromCoordinate(coords[i]);
                   var x = screenCoord[0],
                       y = screenCoord[1];
                   if (i === 0) {
                       canvas.moveTo(x, y);
                   } else {
                       canvas.lineTo(x, y);
                   }
               }
               canvas.closePath();
               //设置边框
               canvas.strokeStyle = "red";//color
               canvas.lineWidth = 2;//width
               canvas.stroke();//render
           }
   
           map.on('postcompose', function(event) {
               var ctx = event.context;
               ctx.restore();
           });
}
注意:
地图初始化时需要注意选用的空间坐标系。
裁剪计算使用的是屏幕坐标,如果初始化的底图坐标是3857(投影坐标系),则需要使用坐标系转换。

clipMap - 4326.htm

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值