我正在开发谷歌地图和OpenLayers4之间的集成,我的工作基于this example from documentation for openlayers 3。
我的问题是,在ol3和ol4.4.2之间的某个地方,change:resolution事件的行为发生了变化。以前的这段代码
view.on('change:resolution', () => {
console.log(view.getZoom())
})在每次鼠标滚轮旋转时仅调用一次,并记录(例如):
5现在它会产生类似这样的结果:
4.017277252772164
4.08563754449778
4.152661471658049
4.522609511830051
4.691606503462093
4.793368457643155
4.891103916717288
4.980192777999678
4.999621855713164
5因此,当我尝试同步google地图和openlayer之间的缩放时(就像在示例中一样),它会导致google地图在每次缩放时都会闪烁。谷歌地图似乎不支持缩放的分数值。
我可以将openlayer缩放值限制为整数或做一些变通吗?
我试图在调用googleMap.setZoom时使用openlayers zoom的天花板/地板的值,但因为缩放也涉及到中心位置的改变,所以会导致抖动,令人不快的行为。
发布于 2017-10-21 00:23:17
默认行为是为了在收缩缩放时提供更好的绘图板和触控板支持。
interactions: ol.interaction.defaults({mouseWheelZoom: false}).extend([
new ol.interaction.MouseWheelZoom({
constrainResolution: true // force zooming to a integer zoom
})
])每个http://openlayers.org/en/latest/examples/mousewheel-zoom.html
发布于 2021-04-26 23:14:40
对于任何正在努力解决这个问题的人来说,我解决这个问题的方法是将默认缩放交互的zoomDuration设置为0,并结合constrainResolution属性。
中间缩放级别来自用于从一个级别缩放到另一个级别的动画(动画的默认持续时间为250ms)。通过使用constrainResolution,您可以确保Google Map可以使用一个整数值,通过将zoomDuration设置为0,您可以删除在change:resolution处理程序中导致小数值的动画。
在没有动画的情况下,结果会稍微突然一点,但这样就不会再有OpenLayers和Google Map之间的奇怪行为了。
我使用的是OpenLayers 6.5.0,但我猜它也适用于更早的版本。下面是代码的工作部分:
import { defaults } from 'ol/interaction';
// ...
this.view = new View({
// ...
constrainResolution: true,
});
const olMap = new Map({
target: 'map',
controls: [],
layers: [],
view: this.view,
interactions: defaults({ zoomDuration: 0 }),
});https://stackoverflow.com/questions/46844802
复制相似问题