Leaflet - 在不使用地图实例的情况下找到边界的缩放级别

Nic*_*eda 5 zooming leaflet

我想做什么

我有点紧张,我需要能够找到多个形状的传单缩放级别,而无需创建地图实例并使用map.fitBounds().


我坚持的两种可能的解决方案:

1)我尝试制作模拟/临时地图以访问map.fitBounds()功能并模拟map.fitBounds()

- 但不起作用,因为地图需要实例化一个 div 容器。

2)我一直在寻找以编程方式计算传单缩放的方法。

- 我还没有找到任何关于如何做到这一点的资源。

如果您有任何策略可以帮助我将这些原始数据转换为他们的传单副本,那就太棒了!!

iH8*_*iH8 6

您可以L.Map使用未附加到 DOM 的元素创建实例:

new L.Map(document.createElement('div'), {
    'center': [0, 0],
    'zoom': 0
});
Run Code Online (Sandbox Code Playgroud)

问题是为了计算边界,负责的方法需要知道地图的大小。要获取大小,它将调用 的getSize方法,L.Map{x:0, y:0}由于地图的元素未附加到 DOM ,因此将始终返回大小。您可以覆盖该getSize方法以返回大小:

L.Map.include({
    getSize: function () {
        return new L.Point(400, 300);
    }
});

var map = new L.Map(document.createElement('div'), {
    'center': [0, 0],
    'zoom': 0
});

console.log(map.getSize()); // o.Point {x: 400, y: 300} 
Run Code Online (Sandbox Code Playgroud)

现在,你可以调用getBoundsZoomL.Map使用L.LatLngBounds

L.Map.include({
    getSize: function () {
        return new L.Point(400, 300);
    }
});

var map = new L.Map(document.createElement('div'), {
    'center': [0, 0],
    'zoom': 0
});

var featureGroup = new L.FeatureGroup([
    new L.Marker([0,-45]),
    new L.Marker([0,45])
]);

var zoom = map.getBoundsZoom(featureGroup.getBounds());
Run Code Online (Sandbox Code Playgroud)

不用说,当稍后在真实地图上使用派生的缩放级别时,只有当地图是您在getSize方法中预定义的大小时才会正确。getSize如果您打算在L.Map不重新加载的情况下使用,也不要忘记恢复该方法。