传单:是否可以自定义缩放级别?
Leaflet: Are custom zoom levels possible?
是否可以在使用 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
错误,所以我猜事情没那么简单。非常感谢任何帮助或指导!
开门见山:这是不可能的。您需要渲染您自己的图块图像,运行 它们来自您自己的服务器,并为 Leaflet 创建您自己的坐标参考系统 (CRS) 扩展。如果你看看常规的 tilesets 是如何制作的,你就会明白为什么。
URL为花蕊求砖:
http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png
请求图块时,{z}
将替换为地图的当前缩放级别。 {x}
和 {y}
是图块的坐标。 {s}
将替换为子域。因此,如果您在坐标 1,1 处的 zoomlevel 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 服务器上不存在这些简单的图块,因此 return 未找到文件的 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.0.0 版本中,Leaflet 引入了分数缩放:
https://leafletjs.com/examples/zoom-levels/#fractional-zoom
Before this, the zoom level of the map could be only an integer number
(0, 1, 2, and so on); but now you can use fractional numbers like 1.5
or 1.25.
...
If you set the value of zoomSnap to 0.5, the valid zoom levels of the
map will be 0, 0.5, 1, 1.5, 2, and so on.
If you set a value of 0.1, the valid zoom levels of the map will be 0,
0.1, 0.2, 0.3, 0.4, and so on.
The following example uses a zoomSnap value of 0.25:
var map = L.map('map', {
zoomSnap: 0.25
});
As you can see, Leaflet will only load the tiles for zoom levels 0 or
1, and will scale them as needed.
Leaflet will snap the zoom level to the closest valid one. For
example, if you have zoomSnap: 0.25 and you try to do
map.setZoom(0.8), the zoom will snap back to 0.75. The same happens
with map.fitBounds(bounds), or when ending a pinch-zoom gesture on a
touchscreen.
是否可以在使用 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
错误,所以我猜事情没那么简单。非常感谢任何帮助或指导!
开门见山:这是不可能的。您需要渲染您自己的图块图像,运行 它们来自您自己的服务器,并为 Leaflet 创建您自己的坐标参考系统 (CRS) 扩展。如果你看看常规的 tilesets 是如何制作的,你就会明白为什么。
URL为花蕊求砖:
http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png
请求图块时,{z}
将替换为地图的当前缩放级别。 {x}
和 {y}
是图块的坐标。 {s}
将替换为子域。因此,如果您在坐标 1,1 处的 zoomlevel 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 服务器上不存在这些简单的图块,因此 return 未找到文件的 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.0.0 版本中,Leaflet 引入了分数缩放:
https://leafletjs.com/examples/zoom-levels/#fractional-zoom
Before this, the zoom level of the map could be only an integer number (0, 1, 2, and so on); but now you can use fractional numbers like 1.5 or 1.25.
...
If you set the value of zoomSnap to 0.5, the valid zoom levels of the map will be 0, 0.5, 1, 1.5, 2, and so on.
If you set a value of 0.1, the valid zoom levels of the map will be 0, 0.1, 0.2, 0.3, 0.4, and so on.
The following example uses a zoomSnap value of 0.25:
var map = L.map('map', { zoomSnap: 0.25 });
As you can see, Leaflet will only load the tiles for zoom levels 0 or 1, and will scale them as needed.
Leaflet will snap the zoom level to the closest valid one. For example, if you have zoomSnap: 0.25 and you try to do map.setZoom(0.8), the zoom will snap back to 0.75. The same happens with map.fitBounds(bounds), or when ending a pinch-zoom gesture on a touchscreen.