Odoo 百度地图的bug

在给百度地图模块添砖加瓦的时候,碰到一个问题,就是鼠标选取的坐标与实际的坐标存在误差,如下图所示:

 

不论我怎么调整百度地图的参数,这个偏差一直存在。

后来经过google,发现了其他人也有类似的情况出现,其原因在于百度地图的缩放是基于body层的,如果body层有滚动条,并且不在最顶端,在当前位置插入了百度地图,也就是出现该问题时的状态,这个时候滚轮缩放就会产生偏移。

知道了问题的原因,就好处理,既然存在这个偏差,那么我们在加载marker的时候把这个偏差去掉应该就可以了。

map.addEventListener('click', function (e) {
    // 百度地图以滚动条开始位置做为起点,导致鼠标和marker距离有偏差
    var offset = $('.o_content').scrollTop();
    var newpixel = new BMapGL.Pixel(e.pixel.x, e.pixel.y + offset);
    var newpoint = map.pixelToPoint(newpixel);
    //清除地图上所有的覆盖物
    map.clearOverlays();
    var marker = new BMapGL.Marker(newpoint);
    map.addOverlay(marker);
})

odoo的form表单的滚动条是在.o_content样式的div元素中产生的,因此我们计算出这个偏差值,然后把计算后的结果重新加载到地图中正确的位置就可以了。

处理后的效果:

 

原文地址:https://www.cnblogs.com/kfx2007/p/14789609.html