是否可以在使用Stamen Toner-lite tiles的Leaflet地图上设置中间(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
错误,所以我猜测它并不那么简单。非常感谢任何帮助或指导!
答案 0 :(得分:5)
直截了当:这是不可能的。您需要渲染自己的tile图像,运行自己的服务器并为Leaflet创建自己的坐标参考系统(CRS)扩展。如果你看看常规瓷砖组是如何制作的,你就会理解为什么。
请求雄蕊瓷砖的网址:
http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png
请求切片时,{z}
将替换为地图的当前缩放级别。 {x}
和{y}
是图块的坐标。 {s}
将替换为子域名。因此,如果您在坐标1,1处的缩放级别6处尝试加载:
http://a.tile.stamen.com/toner/6/1/1.png
现在,如果你可以(但你不能)缩放到6.5级,它会尝试加载:
http://a.tile.stamen.com/toner/6.5/1/1.png
stamen服务器上不存在那些简单的tile,因此返回404找不到的文件。您可以尝试自己使用这些链接:
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
。您可能也想看看这个问题:Adding an extra zoom levels in Leaflet Maps
答案 1 :(得分:5)
在1.0.0版中,Leaflet引入了分数缩放:
https://leafletjs.com/examples/zoom-levels/#fractional-zoom
在此之前,地图的缩放级别只能是整数 (0、1、2等);但是现在您可以使用小数,例如1.5 或1.25。
...
如果将zoomSnap的值设置为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 });
如您所见,Leaflet只会加载缩放级别为0或 1,并将根据需要对其进行缩放。
传单将缩放级别捕捉到最接近的有效级别。对于 例如,如果您具有zoomSnap:0.25并尝试执行 map.setZoom(0.8),缩放将恢复到0.75。同样的事情发生 使用map.fitBounds(bounds),或在屏幕上结束捏捏手势时 触摸屏。