我正在尝试做什么:
我需要能够找到多个形状的传单缩放级别,而无需创建地图实例并使用map.fitBounds()
移动它
我坚持的两种可能的解决方案:
1)我尝试制作模拟/临时地图以获取对map.fitBounds()
功能的访问权限并模拟map.fitBounds()
-But无法正常工作,因为地图需要实例化div容器。
2)我一直在寻找以编程方式计算传单缩放的方法。
- 我没有找到任何有关如何做到这一点的资源。
如果您有任何策略可以帮助我将这些原始数据转换为他们的传单,那将是非常棒的!
答案 0 :(得分:3)
您可以创建一个L.Map
实例,其中包含未附加到DOM的元素:
new L.Map(document.createElement('div'), {
'center': [0, 0],
'zoom': 0
});
问题是,为了计算边界,负责方法需要知道地图的大小。为了获得大小,它将调用getSize
L.Map
方法,但由于地图的元素未附加到DOM,因此将始终返回{x:0, y:0}
的大小。您可以覆盖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}
现在,您可以使用getBoundsZoom
致电L.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());
毋庸置疑,稍后在实际地图上使用派生缩放级别时,只有在地图是您在getSize
方法中预定义的大小时才会正确。如果您计划在不重新加载的情况下使用getSize
,也不要忘记恢复L.Map
方法。
答案 1 :(得分:0)
我试图将缩放设置为在容器DIV中显示一个具有可变半径的圆,这里是我使用的代码:
// r is the radius in meters (for example 2km => 2000)
circle.setRadius(r);
// <div> size containing leaflet map
var width = 300;
var height = 220;
// you have to use the MIN of them if you want the circle fit in
metresPerPixel = r * 2 / height;
// here the zoom level you have to use
z = (Math.log((40075016.686 * Math.cos(map.getCenter().lat * Math.PI/180))/metresPerPixel))/Math.log(2)-8;
mymap.setZoom(z.toFixed(2),{animate:false});
确保在创建地图到所需的值时设置zoomSnap(我将其设置为最小值0.1以获得更好的结果)
的清晰z的结果