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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要在OpenLayers地图上为区域边界添加阴影,可以使用CSS3的box-shadow属性。您可以通过以下步骤实现: 1. 通过CSS选择器选择要添加阴影的区域边界元素,例如: .boundary { border: 1px solid black; box-shadow: 2px 2px 2px rgba(0,0,0,0.5); } 2. 在box-shadow属性中设置阴影的偏移量,模糊半径和阴影颜色。例如,上面的代码中,阴影的偏移量为2像素,在水平和垂直方向上都有阴影。模糊半径为2像素,阴影颜色为黑色,透明度为0.5。 3. 将CSS样式应用于OpenLayers的图层或要素上,例如: var layer = new ol.layer.Vector({ source: new ol.source.Vector({ url: 'data/boundary.geojson', format: new ol.format.GeoJSON() }), style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'black', width: 1 }), fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.5)' }) }) }); var featureOverlay = new ol.layer.Vector({ source: new ol.source.Vector(), map: map, style: function(feature) { return new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'black', width: 1 }), fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.5)' }), image: new ol.style.Circle({ radius: 7, fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.5)' }), stroke: new ol.style.Stroke({ color: 'black', width: 2 }) }) }); } }); var select = new ol.interaction.Select({ layers: [layer], style: function(feature) { return new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'red', width: 2 }), fill: new ol.style.Fill({ color: 'rgba(255, 0, 0, 0.1)' }), image: new ol.style.Circle({ radius: 7, fill: new ol.style.Fill({ color: 'rgba(255, 0, 0, 0.1)' }), stroke: new ol.style.Stroke({ color: 'red', width: 2 }) }) }); } }); map.addInteraction(select); select.on('select', function(e) { featureOverlay.getSource().clear(); if (e.selected.length > 0) { featureOverlay.getSource().addFeature(e.selected[0]); } }); 在上面的代码中,我们为OpenLayers的图层和要素添加了CSS样式,并使用选择交互来高亮显示选定的要素。您可以根据自己的需求调整样式和交互。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值