openlayers2.11在IE10中错位的原因分析

       最近有用户反映在IE10下运行openlayers2.11版的地图网站会出现瓦片错位的现象(具体现象是瓦片上下错位,左右不错位)

       经过本人一番辛苦的调试,发现问题出现在Gird.js文件中的initGriddedTiles方法中的do while循环中。如附件中所示。

      initGriddedTiles方法中有一个嵌套的do while循环(do while语句中还有一个do while语句),里层的do while语句块在第一次执行的tileoffsetlon的值一定是等于startLon的,但是我测试发现,第一次执行里层的do while语句块的时候tileoffsetlon的值不等于startLon,地图就出现了上下错位,地图错位也确实是这个原因:第一次执行里层的do while语句块的时候tileoffsetlon的值不等于startLon。那这是为什么呢?经过本人自行查看代码,在do while循环中,本身没有代码修改startLon的值,当地图缩放到某一级别的时候(我测试通常是第7级开始错位)第一次执行里层的do while语句块的时候,tileoffsetlon的值不居然等于startLon。奇迹发生了,你不可不相信IE10能创造奇迹。在火狐,chrome,IE8,IE9等浏览器下测试不会发生的问题,在IE10(IE10 pro Release )下发生了;还有一个更神奇的事情是如果你开启了IE10的开发人员工具的debugger(代码中其实并没有debugger),也不会出现瓦片错位的现象。微软我很你,就为了这个问题我头都大了!谁都了我的奶酪(tileoffsetlon值不对是E10自己改动了,我很确认,因为代码中没有其他值修改startLon),

IE10。

       这里我猜测有可能是do while语句在IE10中存在某种缺陷。值被莫名修改,让人很没有安全感额!

最后跟大家说一下解决方案:

    在openlayers2.11版本第507行的下一行加入如下代码:

   if(tileoffsetlon != startLon && colidx==0 ) {

       tileoffsetlon = startLon

   }

   就OK了。

 

你可能感兴趣的:(OpenLayers)