Leaflet 打开/关闭图层时更改图层顺序

Leaflet 打开/关闭图层时更改图层顺序,leaflet,geojson,Leaflet,Geojson,我加载了两个geoJson层——出于测试目的,这两个层都是相同的数据,但都来自两个不同的json文件。当我在图层控制器中打开和关闭图层时,图层的绘制顺序会更改 知道为什么会这样吗 我已将我的代码放入一个JSFIDLE:中,JS如下所示: //styling for watersheds_copy var Orange = { "color": "#ff7800", "weight": 5, "opacity": 0.65 }; var Water_Ora

我加载了两个geoJson层——出于测试目的,这两个层都是相同的数据,但都来自两个不同的json文件。当我在图层控制器中打开和关闭图层时,图层的绘制顺序会更改

知道为什么会这样吗

我已将我的代码放入一个JSFIDLE:中,JS如下所示:

//styling for watersheds_copy
var Orange = {
    "color": "#ff7800",
        "weight": 5,
        "opacity": 0.65
};

var Water_Orange = L.geoJson(watersheds_copy, {
    style: Orange
});

Water_Orange.addData(watersheds_copy);

//these are blue
var Water_blue = L.geoJson(watersheds, {});
Water_blue.addData(watersheds);

//This sets the inital order - last in layer list being on top. Except minimal   - tile layer is always on bottom
var map = L.map('map', {
    center: [41.609, -74.028],
    zoom: 8,
    layers: [minimal, Water_Orange, Water_blue]
});

var baseLayers = {
    "Minimal": minimal,
        "Night View": midnight
};

//This controls the order in the layer switcher. This does not change draw order
var overlays = {
    "Water_Orange": Water_Orange,
        "Water_blue": Water_blue
};
L.control.layers(baseLayers, overlays).addTo(map);

LP

它不是特定于L.GeoJson层的。据我所知,这是真实的所有传单层与层控制。打开的最后一层仅位于顶部。我也不认为这是一个错误。这是我在使用图层控制设计地图时使用和依赖的可预测行为…

至少在0.7.2上,我必须在
map.on('overlayadd')
的回调中使用
bringToFront
<代码>autoZIndex:false在我的情况下也不起作用。可能会解释原因。

在搜索时,我偶然发现这个网站显示了一些传单代码:

在其中,我发现了autoZIndex应用的条件:

    if (this.options.autoZIndex && layer.setZIndex) {
            this._lastZIndex++;
            layer.setZIndex(this._lastZIndex);
    }
TileLayer是唯一具有setZIndex函数的层类型,因此autoZIndex显然只在那里起作用


我不知道哪个更让我恼火。这是一个令人难以置信的限制,或者Leavet文档没有指出这一点。

我在您的JSFIDLE上没有看到任何东西。您的JSFIDLE不工作。但是,在使用层控件打开/关闭时,层不应更改顺序。请参阅API中L.Control.Layers部分中的
autoZIndex
选项:。您是否有可能更改此控件之外的层?我修复了JSFIDLE:,谢谢。我还尝试将autoZindex设置为true,但这没有帮助。如果您关闭两个流域图层,然后在图层控件中打开蓝色图层,然后是橙色图层-您将看到图层的绘制顺序与地图初始化时不同。这不是答案,但是-此问题似乎特定于L.GeoJson图层。这可能是一个错误。我无法用任何其他类型的层(我用L.layerGroup和L.TileLayer尝试过)重现此问题-在这些情况下,zIndex层被正确保留。我的建议是通过这些L.GeoJson层的传单源代码进行调试,看看它们的情况可能会有什么不同。我一直在寻找答案,但运气不好。我至少喜欢显式控制绘图顺序的选项。有些图层属于堆栈的底部,如果将其切换为OFF,则应返回堆栈。我认为用户在尝试单击多边形底部的点时会发现这一点非常混乱。用户希望列表顶部的图层在顶部绘制(如在GIS桌面软件产品中)。