宣传单:可以自定义缩放级别吗?

时间:2015-01-26 20:10:14

标签: javascript maps leaflet

是否可以在使用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错误,所以我猜测它并不那么简单。非常感谢任何帮助或指导!

2 个答案:

答案 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),或在屏幕上结束捏捏手势时   触摸屏。