在项目中有个需求:根据图层索引添加图层
看到这个需求一下子想到 map.addLayer(layer,index?) 接口
但是问题出现了,我切片图加载顺序在矢量图之后就不行!
map = new Map("map"); //加载矢量服务图层 var dynamic = new ArcGISDynamicMapServiceLayer(""); //加载切片服务图层 var tiled = new ArcGISTiledMapServiceLayer(""); //先添加动态地图服务 map.addLayer(dynamic); //再添加切片地图服务 map.addLayer(tiled);
但是反过来,先加载切片底图,后加载矢量图就没有问题
map = new Map("map"); //加载矢量服务图层 var dynamic = new ArcGISDynamicMapServiceLayer(""); //加载切片服务图层 var tiled = new ArcGISTiledMapServiceLayer(""); //先添加切片地图服务 map.addLayer(tiled); //后添加动态地图服务 map.addLayer(dynamic);
这究竟什么原因呢?偶然间查到如下一段话
我的理解是Map会根据第一个添加的图层设立参考,但是缓存图层不能动态转换参考。所以有缓存图层的必须将缓存图层作为底图,第一个加载到Map里。
是否底图加载再最底层就行?再来看看 map.addLayer(layer,index?) 的表现
//情形一 //加载正常,切片在矢量图下方 map.addLayer(tiled, 0); map.addLayer(dynamic, 1); //情形二 //加载正常,切片在矢量图上方 map.addLayer(tiled, 1); map.addLayer(dynamic, 0); //情形三 //加载不正常,切片图不出现 map.addLayer(dynamic, 0); map.addLayer(tiled, 1); //情形四 //加载不正常,切片图不出现 map.addLayer(dynamic, 1); map.addLayer(tiled, 0);
经过上面的测试发现,情形三和四都先加载了矢量图,即使矢量图放在最底层也没用。
故加载切片图和矢量图时,必须先加载切片,再加载其他矢量,而并非把切片放最底层就可以的。