首页 / 浏览问题 / WebGIS / 问题详情
icilent for leaflet如何获取最顶部的图层信息?
30EXP 2023年06月01日

使用产品:iserver 11c、iclient for leaflet 11i

问题详细描述:我在iserver中发布了多个矢量地图服务,并在leaflet中进行叠加。需求是通过点击鼠标获得对应要素的属性信息。

我的思路是通过鼠标点击获得最顶部图层,并将图层名称传递进查询服务中。

但获取不到最顶部的图层,想请教一下有什么其他方法么?

代码如下:

var topLayer;
var layers = [];
map.eachLayer(function(layer) {
    if (layer instanceof L.LayerGroup) {
        layers = layers.concat(layer.getLayers());
    } else {
        layers.push(layer);
    }
});

map.on('click', function(e) {
    var pixel = map.project(e.latlng);
    topLayer = null;
    for (var i = layers.length - 1; i >= 0; i--) {
        if (layers[i].options.interactive && map.getBounds().contains(layers[i].getBounds())) {
            var p = map.project(layers[i].getLatLng());
            if (pixel.x > p.x && pixel.y > p.y) {
                topLayer = layers[i];
                break;
            }
        }
    }
    console.log(topLayer);
});

1个回答

您好,打印一下回调函数返回的内容看看,里面是否有当前地图中的图层信息。
1,865EXP 2023年06月02日
您好,谢谢您的回答,toplayer返回值是null,我怀疑是.getBounds()函数不能获取TiledMapLayer的边界,不知道iserver发布的地图服务底层原理是不是这样

鼠标点击事件返回的参数中sourceTarget._layers应该是当前地图的所有图层,在图层属性中可以添加标致性属性去识别,也可以设置zIndex去设置图层的层级顺序,判断是否是顶层,这是一个参考思路。

...