zoukankan      html  css  js  c++  java
  • ArcGIS 切片与矢量图图层顺序问题

    在项目中有个需求:根据图层索引添加图层

    看到这个需求一下子想到 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);

    经过上面的测试发现,情形三和四都先加载了矢量图,即使矢量图放在最底层也没用。

    故加载切片图和矢量图时,必须先加载切片,再加载其他矢量,而并非把切片放最底层就可以的。

  • 相关阅读:
    docker容器内使用systemctl报错
    docker构建镜像的两种方式
    PXE无人值守安装系统
    8.iptables自定义链
    7.iptables的黑白名单
    6.iptables的匹配条件(三)
    5.iptables的匹配条件(二)
    第三章 8086指令结构
    一套试卷
    第二章 微机指令
  • 原文地址:https://www.cnblogs.com/giser-s/p/11757596.html
Copyright © 2011-2022 走看看