在Leaflet地图上绘制多边形,避免缩放时dynamicMapLayer遮住多边形

做项目时需要在Leaflet地图上绘制一个多边形,在网上找了代码实现如下:

浏览器查看元素如下:


第一个SVG为绘制中国区域雄鸡时使用的,注意中国边界的粗线;

img为dynamicMapLayer图层;

第二个SVG就是画多边形时生成的;

本以为OK了,结果在缩放地图时多边形消失了


经验判断可能是被某个图层遮住了,查看元素后果然发现:


原本在第三个位置的SVG(画多边形时生成的)跑到了第二个位置,当然被img给遮住了,至于为什么元素会改变位置,猜可能是在缩放时dynamicMapLayer加载较慢导致SVG先进入到页面中;

解决方法:为class为leaftlet-zoom-animated的svg元素添加z-index属性即可;


这下无论怎么缩放都不会遮挡装有多边形的SVG元素了


实现代码如下:

    var poly_points = [];//角点
    var poly_line=new L.Polyline([]);//折线层
    var poly;//面图层
    var layerGroup=new L.layerGroup();//图层组
    var testArea;

     map = L.map('map', {
            center: [45, 105],
            zoom: 5,
            doubleClickZoom :false,
            layers: [dynLayer, layerGroup]
     });

     map.on('click', addClickLatlng);//单击,添加点
     map.on('dblclick', showPoly);//双击,显示面

function addClickLatlng(e){
        //当前点
        var clickLocation=[e.latlng.lat,e.latlng.lng];
        poly_points.push(clickLocation);
        //显示折线
        poly_line.addLatLng(e.latlng);
        layerGroup.addLayer(poly_line);
}

    //显示矩形
function showPoly(){
        layerGroup.clearLayers();//清除之前的面与线,后续会加上新的封闭的面
        for (var i = 0, latlngs = [], len = poly_points.length; i < len; i++) {
            latlngs.push(new L.LatLng(poly_points[i][0], poly_points[i][1]));
        }
        poly = new L.Polygon(latlngs);
        layerGroup.addLayer(poly);
        if($(".leaflet-zoom-animated").css("z-index") !=5)
            $(".leaflet-zoom-animated").css("z-index",5);
        //清空
        poly_points=[];
        poly_line=new L.Polyline([]);
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值