最近在用ArcGIS Flex SDK开发GIS项目,在过程当中发现一个比较棘手的问题。
需求是这样的,项目中需要对地图进行切换,并且切换的地图不是同一坐标系下的地图,而且加载地图起始中心点也不相同。这样就导致了一个问题,当重新AddLayer的时候,Map的Lods甚至Extent都是前一幅地图的配置参数。从而导致新地图的加载位置错误,造成不出图或者出白图的情况。
其实解决这个问题的基本思路就是手动修改Map的lods和extent信息,使Map用上新添加Layer的属性。
1.采用静态的TileInfo信息,将切换到的Tileinfo信息静态缓存下来,直接调用直接设置。但是这样有一个弊端,如果服务器配置的TileInfo信息改变,就需要从新设置静态缓存的TileInfo信息,不是很灵活。
2.动态获取TileInfo信息,New 一个Layer的时候,Layer会自动同步TileInfo信息,当同步完成之后,获取需要设置的信息,设置给Map即可。
代码:
private function setLayer():void{
newLayer = new ArcGISTiledMapServiceLayer(selectSchool.serviceUrl);
newLayer.id = "baselayer";
map.addLayer(newLayer);
setLods();
}
private function setLods():void{
if(newLayer.tileInfo != null){
map.lods = newLayer.tileInfo.lods;
map.extent = newLayer.initialExtent;
}
else{
setTimeout(setLods,1000);
}
}
如果ArcGISTiledMapServiceLayer能提供一个设置TileInfo后的监听,解决起来就更容易一些。