javascript - 如何在 OpenLayers 3 上禁用平滑图像

标签 javascript gis openlayers

我正在尝试使用 OpenLayer 查看 map 上的图像,我的图像是遵循 SRID:4326 的 PNG。我设置了 OpenLayers map 并设置了投影信息,以便在 OpenLayer SRID (3857) 中重新投影我的图像。

现在..我的问题是 OpenLayer 显示带有平滑颜色的分类 PNG。我需要查看没有平滑颜色渲染的 PNG。

实际上我的 OpenLayers map 显示了这张图片 enter image description here

但我需要查看没有平滑颜色的图像。

enter image description here

有什么想法吗?

更新:如果我禁用平滑选项,按照下面的答案,输出图像将在没有平滑的情况下渲染...但有一些像素以错误的颜色渲染(使用较浅的着色器或较低的不透明度)

这是输出图像:

enter image description here

但输出应该是:

enter image description here

最佳答案

我知道这是一个老问题了,但我已经研究了几个小时,终于成功了,所以我想其他人可能会发现这很有帮助。

自 OpenLayers 6.4.0 ,您可以禁用源的图像平滑(下面的代码示例来自 OpenLayers 网站上的 this example):

var disabledLayer = new TileLayer({
  // specify className so forEachLayerAtPixel can distinguish layers
  className: 'ol-layer-dem',
  source: new XYZ({
    attributions: attributions,
    url:
      'https://api.maptiler.com/tiles/terrain-rgb/{z}/{x}/{y}.png?key=' + key,
    maxZoom: 10,
    crossOrigin: '',
    imageSmoothing: false,
  }),
});

注意:请确保在而不是图层上设置imageSmoothing: false!如果您将其设置在图层上,它不会导致任何错误,但它不会实现任何目标;)

我发现,如果我希望像素化按照我期望的方式工作,我需要在源上设置 imageSmoothing: false,然后设置 maxZoom源上的值小于我在图层和 View 上设置的 maxZoom (例如,源上的 maxZoom: 14maxZoom: 19 在图层和 View 上)。然后我得到了我想要的漂亮的实心 block 状像素,没有任何扭曲或阴影或任何像素内不正确的值。

最后,请确保图层上的 maxZoom 设置与 View 上的 maxZoom 设置相同,否则用户可能会放大得太远然后你的图层就会消失。

关于javascript - 如何在 OpenLayers 3 上禁用平滑图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656011/

相关文章:

r - 使用 R 溶解的多边形无法正确绘制

c# - 如何计算转弯方向

javascript - OpenLayer map 标记不起作用

javascript - 前后 slider 不起作用

javascript - 高效渲染大量 "select"元素

javascript - 仅适用于 IE 的 JavaScript 不起作用?

javascript - 将 OpenLayers 添加到 rails 项目

javascript - 如何在 Javascript 中设计自定义控件(可能使用 jQuery)

mysql - 如何使用sql从经纬度数据集中得到有代表性的均匀分布子集?

移动设备上的 OpenLayers 3 dragBox