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