介绍

我正在使用Leaflet api,创建一个使用两个imageoverlays(添加到地图)的应用程序。

问题

当我加载两个imageoverlays以固定边界映射时。
现在我已经放置了控件来切换图像叠加,即下一个和上一个

我使用过功能bringToFront();这些控件的后面。

但是,当我绘制矩形之类的东西并切换imageoverlay时,在图像或点上绘制的形状将会丢失,或者我猜会丢失其外观...我现在不知道如何解决这个问题.....

脚本的一部分,其实现不完整

var map = L.map('map', {
                    minZoom: 1,
                    maxZoom: 4,
                    center: [0, 0],
                    zoom: 0,
                    crs: L.CRS.Simple
                });

                // dimensions of the image
                var w = 3200,
                    h = 1900,
                    url = 'assets/img/isbimg.jpg';
                url1 = 'assets/img/fjmap.png';
                // calculate the edges of the image, in coordinate space
                var southWest = map.unproject([0, h], map.getMaxZoom() - 1);
                var northEast = map.unproject([w, 0], map.getMaxZoom() - 1);
                var bounds = new L.LatLngBounds(southWest, northEast);

                var featureGroup = L.featureGroup().addTo(map);

                var drawControl = new L.Control.Draw({
                    edit: {
                        featureGroup: featureGroup
                    },
                    draw: {
                        polygon: true,
                        polyline: true,
                        rectangle: true,
                        circle: true,
                        marker: true
                    }
                }).addTo(map);


                map.on('draw:created', showPolygonArea);
                map.on('draw:edited', showPolygonAreaEdited);
                // add the image overlay,
                // so that it covers the entire map

                var iii = L.imageOverlay(url1, bounds);
                var jjj = L.imageOverlay(url, bounds);
                var ggg = iii.addTo(map);
                var hhh = jjj.addTo(map);

                jjj.addTo(map);
                $('#layerControl').on('click', function layerControl() {
                    ggg.bringToFront();
                    return this;
                });

                $('#layerControl2').on('click', function layerControl2() {
                    hhh.bringToFront();
                    return this;
                });



  我知道,我还没有保存绘制的矢量或imageoverlay的状态
  会产生问题,是否有解决此问题的方法或
  设置id为imageoverlay ???


如果有人对此有任何想法,请提供帮助,我们将不胜感激..感谢您的宝贵时间

最佳答案

您可以通过执行完全相反的操作来使其工作:将想要看到的图像层放在前面,而不是将另一个图像层放在后面:

$('#layerControl').on('click', function layerControl() {
    // ggg.bringToFront();
    hhh.bringToBack();
    return this;
});

$('#layerControl2').on('click', function layerControl2() {
    // hhh.bringToFront();
    ggg.bringToBack();
    return this;
});


这是关于Plunker的一个工作示例:http://plnkr.co/edit/3Hd9FR?p=preview

我个人希望在调用bringToFrontL.FeatureLayer方法之后调用bringToFrontL.ImageOverlay方法也可以解决问题,但实际上并没有。由于图像和要素图层都包含在传单的覆盖窗格中,因此也应该起作用。我会在需要时再做一些测试。

10-06 06:15