我遇到了 Mapbox GL JS 的问题,特别是它在 Android 版 Chrome 浏览器上的渲染问题。该地图在 Windows 和 macOS 的 Chrome 上运行良好。然而,在 Android 上,当地图容器的宽度超过 1650px 时,我观察到扭曲。
问题描述:
我还创建了一个 Codepen 示例来演示这个问题: [https://codepen.io/cylqinsmoon/pen/Rwvdbyv]
尝试解决:
我遇到了类似的问题,并找到了可能适用于这种情况的解决方案。这种方法的灵感来自 MapLibre GL JS (04eebcc) 中的提交,但请记住考虑 MapboxGL 和 MaplibreGL 之间的差异。
调整 Painter 的调整大小方法:
pixelRatio
的 painter
方法中似乎缺少 resize
参数。修改它以包括 pixelRatio
:
resize(width, height, pixelRatio) {
pixelRatio = pixelRatio || browser.devicePixelRatio || 1;
// ... rest of the resize method
}
Map.js中的更新:
map.js
文件需要添加一些内容:
_overridePixelRatio
和 pixelRatio
参数。_containerDimensions
、_getClampedPixelRatio
和 getPixelRatio
方法。画布调整大小修改:就像在
painter
的调整大小方法中一样,_resizeCanvas
也应该处理pixelRatio
:
_resizeCanvas(width, height, pixelRatio) {
// ... handle resizing with pixelRatio
}
MapLibre 的调整大小方法:请注意,MapLibre 的
resize
方法使用 this._requestedCameraState?.resize(width, height);
它不存在于我的地图中,但它的缺失到目前为止还没有导致任何问题。
这些更改应该有助于解决 Android Chrome 上宽度超过 1650 像素的容器的失真问题。建议在不同的环境中测试这些修改以确认其有效性。