【问题标题】:Displayed zoom level vs tile zoom level: pixel density?显示的缩放级别与平铺缩放级别:像素密度?
【发布时间】:2019-06-04 02:59:01
【问题描述】:

磁贴带有缩放级别,根据查看的区域,传单会使用特定缩放级别的磁贴填充显示。

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

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

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

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

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

【问题讨论】:

    标签: leaflet


    【解决方案1】:

    我想尝试在 hdpi 显示器上的大物理区域上显示缩放级别 15 的可能性,而传单通常会显示缩放级别 14 或 13。

    看来你想要的已经被detectRetina option of L.TileLayers实现了。引用文档::

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

    【讨论】:

      【解决方案2】:

      在对源代码进行了一些挖掘之后,我注意到,正如IvanSanchez 所指出的那样,该功能确实存在。

      detectRetina 应用“向上”缩放,即将zoom 加一并将图块的边长除以二,如果设备有一个@ 987654325@.

      我想随意应用任意偏移量。这可以通过使用选项初始化一个层来一次完成

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

      但是,在查看时可以实时执行此操作更加简洁,因此我编写了此 L.Control-plugin:Leaflet.Control.DetailLevel

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多