【问题标题】:Imageoverlay state lost when using BringToFront() : leaflet使用 BringToFront() 时图像覆盖状态丢失:传单
【发布时间】:2015-09-03 05:53:59
【问题描述】:

简介

我正在使用传单 api,创建一个使用两个图像叠加层(添加到地图)的应用程序。

问题

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

我使用了函数 bringToFront();在这些控件背后....

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

部分脚本实现不完整

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 ???

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

【问题讨论】:

    标签: javascript jquery leaflet angular-leaflet-directive dc.leaflet.js


    【解决方案1】:

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

    $('#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

    就我个人而言,我希望在调用L.ImageOverlaybringToFront 方法之后调用L.FeatureLayerbringToFront 方法也可以解决问题,但不知何故并没有。由于图像和特征层都包含在传单的覆盖窗格中,这也应该有效。当我找到时间时,我需要做更多的测试。

    【讨论】:

    • 感谢您的回复,我一定会接受答案,+1 努力...再次感谢您的帮助
    • 其实我对imageoverlay没有很清楚的了解,我愿意做like,当我在image1上画一些形状,那么这些形状应该只针对image1,,,image 2有自己的形状或 draqings....如果可能的话,请告诉我...感谢您的努力,尽管答案对我的另一个要求有完美的实现.....
    • 不,谢谢,永远欢迎。我认为你想要的是可能的,尽管它需要编写大量的逻辑。为什么不发布一个新问题,以便其他人也可以提供帮助?我会留意的。祝你的项目好运。
    • 知道了,是的,我将发布有关它的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多