当前位置:   article > 正文

openlayers6.x加载百度地图缩放时发生偏移问题说明_envon123

envon123

最近为了使用openlayers的animate方法,所以换到了最新版本(之前用的是openlayer3,现在用的是openlayer6.6)

openlayer3使用缩放的方法是,摘自https://blog.csdn.net/envon123/article/details/83306070

但是以下的方法在偏移动画画完之后,偏移的位置总是不准确,甚至可能飞出显示范围。

  1. function backWithAnim() {
  2. var pan = ol.animation.pan({
  3. duration: 2000,
  4. source: map.getView().getCenter(),
  5. easing: getEasing() // 设置对应选择的动画
  6. });
  7. map.beforeRender(pan);
  8. map.getView().setCenter(ol.proj.transform([104, 30], 'EPSG:4326', 'EPSG:3857'));
  9. }

openlayer5以后的缩放是

view.animate({zoom: 10}, {center: [0, 0]});

更简洁也更准确。所以一步到位使用了最新版本(openlayers6.6)

但是出现了新的问题,加载底图的时候,缩放底图就发现图片显示产生了偏移。

这个是最小级别的地图显示,然后放大一级就向上偏移了一些。

 这个是放大一级的,此时我鼠标就在画圈的位置,底图已经飞上去一些。

并且在图上的标记点也只是在原地没有动,整体看上去位置就已经不准确了。

所以按照缩放偏移查了半天,直到看到了这个帖子https://blog.csdn.net/u013594477/article/details/83988055

依旧没有解决问题。偶然在评论区发现了大神@yunlive说高版本的openlayers的tile的机制改变了,需要在tileUrlFunction的Y值-1。

  1. tileUrlFunction : function(tileCoord, pixelRatio, proj) {
  2. var z = tileCoord[0];
  3. var x = tileCoord[1];
  4. var y = tileCoord[2];
  5. // 百度瓦片服务url将负数使用M前缀来标识
  6. if (x < 0) {
  7. x = (-x);
  8. }
  9. if (y < 0) {
  10. y = (-y)-1;
  11. }
  12. //return "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x="+x+"&y="+y+"&z="+z+"&styles=pl&udt=20151021&scaler=1&p=1";
  13. return mapCache+z+"/"+y+"_"+x+"_"+z+".jpg";;
  14. }

然后问题完美解决!自古评论区里出大神,厉害了!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/155783
推荐阅读
相关标签
  

闽ICP备14008679号