传单:是否可以自定义缩放级别

Leaflet: Are custom zoom levels possible?

本文关键字:缩放 自定义 是否 传单      更新时间:2023-09-26

是否可以在使用雄蕊碳粉精简版图块的传单地图上具有中间(2.5、3.5、4.5 等)缩放级别?这是我到目前为止计算缩放级别的代码:

leafletmap.on('zoomstart', function (d){
    targetZoom = leafletmap.getZoom(); //Grabs whatever current zoom level is
    targetZoom = targetZoom +.5; //Adds .5
    leafletmap.setZoom(targetZoom); //Sets new value to zoom level
    console.log(targetZoom); //Consoles out new value
});

我尝试只在代码中添加 .5,但我得到一个too much recursion错误,所以我猜它不是那么简单。任何帮助或指导将不胜感激!

在 1.0.0 版本中,Leaflet 引入了分数缩放:

https://leafletjs.com/examples/zoom-levels/#fractional-zoom

在此之前,地图的缩放级别只能是一个整数 (0、1、2 等);但是现在您可以使用小数,例如 1.5 或 1.25。

如果将缩放捕捉的值设置为 0.5,则 映射将为 0、0.5、1、1.5、2 等。

如果将值设置为 0.1,则地图的有效缩放级别将为 0, 0.1、0.2、0.3、0.4 等。

以下示例使用 zoomSnap 值 0.25:

var map = L.map('map', {
  zoomSnap: 0.25 
});

如您所见,传单将仅加载缩放级别 0 或 1,并将根据需要扩展它们。

传单会将缩放级别捕捉到最接近的有效级别。为 例如,如果您有 zoomSnap:0.25 并且您尝试执行 map.setZoom(0.8),缩放将回扣到 0.75。同样的情况也会发生 使用 map.fitBounds(bounds),或在 触摸屏。

直截了当地说:这是不可能的。您需要渲染自己的切片图像,在自己的服务器上运行它们,并为 Leaflet 创建自己的坐标参考系统 (CRS) 扩展。如果您查看常规图块集的制作方式,您就会明白原因。

用于请求雄蕊磁贴的 URL:

http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png

请求切片时,{z}将替换为地图的当前缩放级别。{x}{y}是磁贴的坐标。{s}将替换为子域。因此,如果您在坐标 6,1 处的缩放级别为 1,1,它将尝试加载:

http://a.tile.stamen.com/toner/6/1/1.png

现在,如果您可以(但不能)缩放到6.5级,它将尝试加载:

http://a.tile.stamen.com/toner/6.5/1/1.png

这些简单的图块在雄蕊服务器上不存在,因此返回 404 for 找不到文件。您可以使用以下链接自行尝试:

http://a.tile.stamen.com/toner/6/1/1.png

http://a.tile.stamen.com/toner/6.5/1/1.png

http://a.tile.stamen.com/toner/7/1/1.png

所以这永远行不通。如前所述,您可以运行自己的磁贴服务器,渲染自己的磁贴图像并设置自己的L.CRS。您可能还想看看这个问题:在传单地图中添加额外的缩放级别