arcgis api 4.x for js之图层管理篇

上篇实现了基础地图加载以及二三维模式切换;本篇的内容则是图层管理控制,从两个不同角度来实现,分别是直接绑定arcgis api提供的图层管理widget(LayerList)以及自定义图层管理图标的点击事件来控制图层的隐藏或者显示。不管是LayerList或者自定义图标点击管理图层的实现方式,核心都是根据Layer的属性visible来设置true或者false来控制的。

一、谈谈本篇自己认为比较重要的几个专业术语名称的理解:

1.TileLayer

TileLayer,加载缓存地图服务的瓦片图层,缓存的服务访问缓存中的瓦片,而不是动态地绘制图像。由于缓存机制,所以渲染的速度比MapImageLayers快多了,适合叠加瓦片切图使用,而不是前端动态渲染的。

2.MapImageLayer

MapImageLayer,允许显示和分析在一个地图服务定义层数据,输出图像代替特征。地图服务图像是根据请求动态生成的。

3. ElevationLayer

ElevationLayer,即为加载地形高程的图层,应用在三维模式下显示。

4. SceneLayer

SceneLayer,即为加载三维场景图层,应用在三维模式下显示。

5. LayerList

LayerList,图层列表控制控件,提供了一种方法来显示一个列表的层以及提供控制图层隐藏或者显示。

二、LayerList具体实现思路:

1.上面描述的几个类型图层有个属性listMode,默认show,即是这些图层叠加在地图上,默认是在LayerList里面了的,要是LayerList创建的话

2.配置图层信息:

/*图层配置*/
MapConfig.feconomic_sublayers =  [
    {id: 35,title:"行政区划",visible:false,sublayers:[    {id: 38,title:"城市界线",visible: false},{id: 37,title:"省界",visible: true}]},
    {id: 28,title:"海洋规划",visible:true,sublayers:[    {id:34,title:"海岸基本功能区 ",visible: true},{id: 33,title:"经济合作圈",visible: true},{id: 32,title:"经济发展区",visible: true},{id: 31,title:"经济湾区",visible:true},{id: 30,title:"经济岛群",visible: true}]},
    {id: 27,title:"海域权属",visible:false},
    {id: 24,title:"岸线资源",visible:false,sublayers:[    {id: 26,title:"海岸带",visible: true},{id: 25,title:"岸线",visible: true}]},
    {id: 14,title:"海洋生态保护 ",visible:false,sublayers:[
                                                     {id:23,title:"海洋功能区划 ",visible: true},
                                                     {id:22,title:"限制开发区 ",visible: true},
                                                     {id:21,title:"禁止开发区 ",visible: true},
                                                     {id:18,title:"海洋自然保护区 ",visible: true,sublayers:[{id:20,title:"海洋自然保护区 ",visible: true},{id:19,title:"海洋自然保护区点  ",visible: true}]},
                                                     {id:15,title:"海洋特别保护区  ",visible: true,sublayers:[{id:17,title:"海洋特别保护区 ",visible: true},{id:16,title:"海洋特别保护区点  ",visible: true}]}
                                                     ]},
    {id: 9,title:"渔业资源 ",visible:false,sublayers:[
                                                 //{id:13,title:"渔业资源",visible: false},
                                                 {id:12,title:"渔场",visible: true},
                                                 {id:11,title:"渔区",visible: true},
                                                 {id:10,title:"渔港",visible: true}
                                                 ]},
    {id: 8,title:"地质钻孔",visible: false},
    {id: 7,title:"观测站",visible: false},
    {id: 6,title:"海岛",visible: false},
    {id: 2,title:"海洋资源 ",visible:false,sublayers:[
                                                  {id:5,title:"其他资源",visible: true},
                                                  {id:4,title:"石油资源",visible: true},
                                                  {id:3,title:"矿产资源",visible: true}
                                                  ]},
    //{id: 1,title:"海洋企业",visible:false},
    {id: 0,title:"视频监控",visible:false}
];

3.图层创建:

                    var waterdepthLayer  = new TileLayer({
                         url: MapConfig.waterdepthLayerUrl,
                         title:"水深栅格图",
                         opacity:0.45,
                         visible:false,
                         id:  "BaseMapWater"
                       });
                    var waterLayer  = new MapImageLayer({
                         url: MapConfig.waterLayerUrl,
                         title:"叶绿素",
                         opacity:0.45,
                         visible:false,
                         id:  "BaseMapWater"
                       });
                     var feconomicLayer = new MapImageLayer({
                         url: MapConfig.FEconomiclayerUrl,
                         title:"专题图层",
                         visible:true,
                         sublayers: MapConfig.feconomic_sublayers
                         });
                     var elevationLayer  = new ElevationLayer({
                           url: MapConfig.elevationLayer.Url
                         });
                     var map = BX.MapVars.map = new Map({
                       basemap: imgBasemap,
                       layers:[waterdepthLayer,hdyxLayer,waterLayer,feconomicLayer],
                       ground: new Ground({layers:[elevationLayer,hddxLayer]})
                     });

4.LayerList创建:

         //图层控制器
         mapPage.loadSwitcherLayers(appConfig.mapView,appConfig.sceneView);
        /**
         * 图层控制器
         */
        loadSwitcherLayers:function(mapView,sceneView){
            require([
                     "esri/widgets/LayerList"
                   ], function(LayerList) {
                mapView.then(function() {//二维模式
                      var layerList = new LayerList({
                        view: mapView,
                      });
                      mapView.ui.add(layerList, "bottom-right");
                 });
                sceneView.then(function() {//三维模式
                      var layerList = new LayerList({
                        view: sceneView
                      });
                      sceneView.ui.add(layerList, "bottom-right");
                 });
            });
        },

5.效果图如下:

三、自定义图标点击事件管理图层具体实现思路:

1.页面设计:

    <div id="tuceng_center">
        <ul>
            <li id="dynamic_0">
                <div class="tucicon tucicon1"></div>
                <p>视频监控</p>
            </li>
            <li id="dynamic_2">
                <div class="tucicon tucicon2"></div>
                <p>海洋资源</p>
            </li>
            <li id="dynamic_6">
                <div class="tucicon tucicon3"></div>
                <p>海岛</p>
            </li>
            <li id="dynamic_7">
                <div class="tucicon tucicon4"></div>
                <p>观测站</p>
            </li>
            <li id="dynamic_8">
                <div class="tucicon tucicon5"></div>
                <p>地质钻孔</p>
            </li>
            <li id="dynamic_9">
                <div class="tucicon tucicon6"></div>
                <p>渔业资源</p>
            </li>
            <li id="dynamic_14">
                <div class="tucicon tucicon7"></div>
                <p>海洋生态保护</p>
            </li>
            <li id="dynamic_24">
                <div class="tucicon tucicon8"></div>
                <p>岸线资源</p>
            </li>
            <li id="dynamic_27">
                <div class="tucicon tucicon9"></div>
                <p>海域权属</p>
            </li>
            <li id="dynamic_28" class="selected">
                <div class="tucicon tucicon10"></div>
                <p>海洋规划</p>
            </li>
            <li id="dynamic_35">
                <div class="tucicon tucicon11"></div>
                <p>行政区划</p>
            </li>
            <li id="tile_0">
                <div class="tucicon tucicon12"></div>
                <p>3D场景</p>
            </li>
            <li id="tile_2">
                <div class="tucicon tucicon14"></div>
                <p>3D航道</p>
            </li>
            <li id="tile_1">
                <div class="tucicon tucicon13"></div>
                <p>水深栅格图</p>
            </li>
        </ul>
    </div>

2.点击事件:

//图层控制点击事件监控
$("#tuceng_center ul li").click(function(){
                        $(this).toggleClass(‘selected‘);
                        var flag = false;
                        if($(this).attr("class") == "selected"){
                            flag = true;
                        }else{
                            flag = false;
                        }
                       var id = $(this).attr("id");
                       if(id.indexOf("dynamic")>-1)//动态图层控制
                       {
                           id = id.split("_")[1];
                           if(feconomicLayer)
                              feconomicLayer.findSublayerById(Number(id)).visible = flag;

                       }else{//瓦片底图控制
                           id = id.split("_")[1];
                           switch (id) {
                           case "0"://3D场景
                                if(mapPage.sceneLayer)
                                   mapPage.sceneLayer.visible = flag;
                                break;
                           case "1"://水深栅格图
                               if(waterdepthLayer)
                                  waterdepthLayer.visible = flag;
                                break;
                           case "2"://3D航道
                               if(hdyxLayer){
                                  hdyxLayer.visible = flag;
                               }
                               if(hddxLayer){
                                  hddxLayer.visible = flag;
                               }
                               break;

                           }
                       }
})

3.效果图如下:

原文地址:https://www.cnblogs.com/giserhome/p/8320322.html

时间: 2024-10-29 01:10:13

arcgis api 4.x for js之图层管理篇的相关文章

(ArcGIS API For Silverlight )QueryTask 跨图层查询,并监控查询的完成!

(ArcGIS API For Silverlight )QueryTask 跨图层查询,并监控查询的完成! 直接上源码: /// <summary> /// QueryTask查询多个图层,并绑定数据 /// </summary> /// <param name="listUrl">图层Url集合</param> /// <param name="strSql">图层查询Sql</param>

arcgis api 4.x for js 集成 Echarts4 实现模拟迁徙图效果(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学习 arcgis api 4.x 的好素材. arcgis api 4.x for js 集成 echarts 实现迁徙图效果的关键问题在于 echarts 坐标系以及 arcgis 坐标系不一致,因此要进行 echarts坐标系与 arc

arcgis api 4.x for js 结合 Echarts4 实现统计图(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学习 arcgis api 4.x 的好素材. 参照 arcgis api 4.x for js 地图加载多个气泡窗口展示的基础上,实现 arcgis api 4.x for js 结合 Echarts4 实现统计图,核心思路地图叠加自定义

arcgis api 4.x for js 聚合效果图(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学习 arcgis api 4.x 的好素材. 内容概览 1.基于 arcgis api 4.x for js 聚合效果2.源代码 demo 下载 本篇实现 arcgis api 4.x for js 聚合效果功能,效果图如下: 聚合数据源

arcgis api 4.x for js之基础地图篇

arcgis api3.x for js转向arcgis api4.x,我也是最近的3-4个月时间的事情,刚好公司有个webgis项目需要展示三维场景,项目选择arcgis api4.x.我纯碎记录一下自己学习arcgis api4.x过程中的一些心得体会,自己个人的一些理解,不对之处,还请各位同仁见谅以及多多指教. 一.谈谈本篇自己认为比较重要的几个专业术语名称的理解: 1.View View即视图,提供了查看和与地图组件交互的方法.地图仅仅是一个容器,存储了包含在基础层和操作层中的地理信息,

ArcGIS api for javascript-图层控制(图层树)

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9"> <title>图层控制</title>

ArcGIS API for Silverlight中加载Google地形图(瓦片图)

原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS API for Silverlight中加载Google地 形图.先上一个图,初步制作,待后续继续改进 ArcGIS API for Silverlight 中的ArcGISTiledMapServiceLayer图层,继承自TiledMapServiceLayer.如果想实现自己的缓存地图图 层

ArcGIS API For Silverlight使用在线地图的多种方法总结

引自:http://www.cnblogs.com/meimao5211/p/3283969.html ArcGIS API For Silverlight使用在线地图的多种方法总结 本人也正在学习ArcGIS API For Silverlight,希望通过博文和大家相互交流.学习,如有不对请及时指正~最近,主要在研究如何将在线地图叠加到Silverlight中,当然没有啥原创,只是总结了现在普遍存在的一些方法.(1)使用自带的ESRI.ArcGIS.Client.Toolkit.DataSo

ArcGIS API for JavaScript3.x 学习笔记[8] 动态地图服务图层

在ArcGIS API 中给我们提供了一个类叫做ArcGISDynamicMapServiceLayer利用这个类,我们可以获得发布的地图服务.调用动态地图服务一般只需要两步: 通过地图服务的URL创建一个ArcGISDynamicMapServiceLayer对象 将动态地图服务的对象添加到地图容器中 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"