Odoo 百度地图的bug

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

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

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

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

1
2
3
4
5
6
7
8
9
10
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元素中产生的,因此我们计算出这个偏差值,然后把计算后的结果重新加载到地图中正确的位置就可以了。

处理后的效果:

你的支持我的动力