您的位置:首页 > 运维架构

openlayers 2.12 和2.11在IE10中错位的原因分析及解决方法【转】

2013-07-10 18:40 190 查看
原文http://www.openlayers.cn/forum.php?mod=viewthread&tid=195&extra=page%3D1

openlayers 2.12 和2.11在IE10中均存在错位现象,2.13 dev中已经修复了此bug

最近有用户反映在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版本 OpenLayers.Layer.Grid.js第507行的下一行加入如下代码:

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

tileoffsetlon = startLon

}

在 在openlayers2.12版本第1013行的下一行加入以上代码:

就OK了。

大家可以测试下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: