场景:
现在要在一个地图上添加动态服务图层和切片服务图层,当创建好图层之后,使用map.addLayer()方法,先把动态图层加到地图上,再把切片图层加到地图上,出现一个现象:只能看到加载的动态图层,切片图层没了。
现象:
先加载动态图层,再加载切片图层
所对应代码:
<script>
var map;
require([
"esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/layers/ArcGISTiledMapServiceLayer"
], function (Map, ArcGISDynamicMapServiceLayer,ArcGISTiledMapServiceLayer) {
map = new Map("mapDiv");
//动态地图服务图层
var dynamic = new ArcGISDynamicMapServiceLayer("https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/MapServer");
//切片地图服务图层
var tiled = new ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
//先添加动态地图服务
//If the first layer added to the map is an ArcGISDynamicMapServiceLayer,
// the map will take on the projection of this layer.
map.addLayer(dynamic);
//再添加切片地图服务
map.addLayer(tiled);
});
</script>
解决方法:
试了试,先添加切片图层,再添加动态图层,就没有什么问题了,两个图层都可以叠加到地图上面。主要代码如下:
<script>
var map;
require([
"esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/layers/ArcGISTiledMapServiceLayer"
], function (Map, ArcGISDynamicMapServiceLayer,ArcGISTiledMapServiceLayer) {
map = new Map("mapDiv");
//动态地图服务图层
var dynamic = new ArcGISDynamicMapServiceLayer("https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Population_World/MapServer");
//切片地图服务图层
var tiled = new ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
// //先添加动态地图服务
// //If the first layer added to the map is an ArcGISDynamicMapServiceLayer,
// // the map will take on the projection of this layer.
// map.addLayer(dynamic);
// //再添加切片地图服务
// map.addLayer(tiled);
//改变顺序,先添加切片图层,再添加动态图层
map.addLayer(tiled);
console.log(map.spatialReference);
map.addLayer(dynamic);
});
</script>
改变添加顺序后的效果:
现在可以看到两个图层已经叠起来了。到底是什么原因呢?
原因分析:
偶然找到一个官方的文档(https://pan.baidu.com/s/1o8UhCxG),里面有这么一段:
缓存图层指的就是切片图层,如果先添加动态图层,再添加切片图层,由于切片图层不会动态转换空间参考,导致地图上只有动态图层;反之,如果先加载切片图层,再加载动态图层,由于动态图层可以自动转换空间参考,因此可以看到两个图层叠在了一起。