显示的缩放级别与图块缩放级别:像素密度?

时间:2019-01-09 10:47:59

标签: leaflet

标题具有缩放级别,并且根据查看的区域,传单会以一定缩放级别的图块填充显示。

目前,如果我理解正确的话,显示器中的像素数量和图块中的像素数量是紧密绑定在一起的。或者实际上,可能是html / css像素,它们不再是设备像素。

我相信这些实际上是两个根本不同的缩放参数,尤其是在(移动)设备的像素密度(window.devicePixelRatio)不同的情况下。

我的问题是:是否可以根据所显示的缩放级别(ge骨距离与屏幕距离)来控制显示图块的缩放级别?

我问的原因是,不同的缩放级别的细节级别通常是不同的。在某些设备上,显示更高细节的图块实际上可能看起来不错。一些地图源,例如http://geoportail.gouv.fr的地形图,甚至在不同级别之间大大改变了地图样式。我想尝试在hdpi显示屏上的较大物理区域上显示15级缩放的可能性,其中传单通常会显示14级或13级的缩放。

我发现,通过修改传递给TileLayer构造函数的选项“ tileSize”,选择一个比默认值256小的值,我几乎得到了我想要的。但是:定位很遥远。有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:1)

  

我想在hdpi显示屏上的较大物理区域上显示15级缩放,而传单通常会显示14级或13级。

detectRetina option of L.TileLayers似乎已经实现了您想要的功能。引用文档::

  

如果true并且用户在视网膜显示屏上,它将要求使用指定大小的一半和较大缩放级别的四个图块来代替一个图块,以利用高分辨率。

答案 1 :(得分:0)

深入研究源代码后,正如IvanSanchez所指出的,我注意到该功能确实存在。

detectRetina会应用“一个向上”的缩放比例,即将zoom碰撞1并将分块的边长除以2,如果设备具有devicePixelRatio >= 2

我想随意应用任意偏移量。通过使用选项进行初始化,可以立即为一层完成此操作

let zoomOffset = 2;
let options = {
    "detectRetina" : false, 
    "zoomOffset" : zoomOffset, 
    "tileSize" : 256 / Math.pow(2, zoomOffset)
}

但是,可以在查看时实时进行此操作更加巧妙,因此我编写了以下L.Control插件:Leaflet.Control.DetailLevel