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>
<link rel="stylesheet" type="text/css"
    href="http://localhost:8080/arcgis_js_api/library/3.2/jsapi/js/dojo/dijit/themes/claro/claro.css" />
<link rel="stylesheet" type="text/css"
    href="http://localhost:8080/arcgis_js_api/library/3.2/jsapi/js/esri/css/esri.css" />
<script type="text/javascript">
    dojoConfig = {
        parseOnLoad : true
    };
</script>
<script type="text/javascript"
    src="http://localhost:8080/arcgis_js_api/library/3.2/jsapi/init.js"></script>

    <script type="text/javascript" src=‘../resources/jquery/jquery-1.7.2.min.js‘></script>
    <link rel="stylesheet" type="text/css" href=‘../resources/jquery/themes/gray/easyui.css‘>
    <link rel="stylesheet" type="text/css" href="../resources/jquery/themes/icon.css">
    <script type="text/javascript" src=‘../resources/jquery/jquery.easyui.min.js‘></script>
    <script type="text/javascript" src=‘../resources/jquery/locale/easyui-lang-zh_CN.js‘ charset="utf-8"></script>
    <script>
        dojo.require("esri.map");

    var layer, map, visible = [];

    function init() {
        map = new esri.Map("map");
        layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://192.168.10.200:8399/arcgis/rest/services/toctree/MapServer");

        if (layer.loaded) {
            buildLayerList(layer);
        } else {
            dojo.connect(layer, "onLoad", buildLayerList);
        }
    }

    function getChildrenNodes(parentnodes, node){
         for (var i = parentnodes.length - 1; i >= 0; i--) {

            var pnode = parentnodes[i];
            //如果是父子关系,为父节点增加子节点,退出for循环
            if (pnode.id==node.pid) {
                pnode.state="closed" ;//关闭二级树
                pnode.children.push(node) ;
                return ;
            } else {
                //如果不是父子关系,删除父节点栈里当前的节点,
                //继续此次循环,直到确定父子关系或不存在退出for循环
                parentnodes.pop() ;
            }
        }
    }

    function buildLayerList(layer) {    //构建图层树形结构     var layerinfos = layer.layerInfos ;
        var treeList = [] ;//jquery-easyui的tree用到的tree_data.json数组
        var parentnodes = [] ;//保存所有的父亲节点
        var root = {"id":"rootnode","text":"所有图层","children":[]} ;//增加一个根节点
        var node = {} ;
        if (layerinfos != null && layerinfos.length > 0) {

            for(var i=0,j=layerinfos.length;i<j;i++){
                var info = layerinfos[i] ;
                if (info.defaultVisibility) {
                    visible.push(info.id);
                }         //node为tree用到的json数据
                node = {
                    "id":info.id,
                    "text":info.name,
                    "pid":info.parentLayerId,
                    "checked":info.defaultVisibility ? true:false,
                    "children":[]
                } ;
                if(info.parentLayerId==-1){
                    parentnodes.push(node) ;
                    root.children.push(node) ;
                }else{
                     getChildrenNodes(parentnodes, node);
                      parentnodes.push(node) ;
                }
            }
        }
        treeList.push(root) ;
        //jquery-easyui的树
        $(‘#toc‘).tree({
            data:treeList ,
            checkbox :true, //使节点增加选择框
            onCheck:function (node,checked){//更新显示选择的图层
                var visible = [];

                var nodes = $(‘#toc‘).tree("getChecked") ;
                dojo.forEach(nodes, function(node) {
                    visible.push(node.id);
                });
                //if there aren‘t any layers visible set the array to be -1
                if (visible.length === 0) {
                    visible.push(-1);
                }
                layer.setVisibleLayers(visible);
            }
        }); 

        layer.setVisibleLayers(visible);
        map.addLayer(layer);
    }

    dojo.ready(init);
    </script>

</head>
<body class="easyui-layout">

    <div data-options="region:‘west‘,split:true,title:‘菜单‘" style="width:200px;padding:10px;">
        <div id="panelHeader"
            style="width: 100%; height: 100%;">
            图层控制:<br />
            <ul id="toc" class="easyui-tree"></ul>
        </div>
    </div>
    <div data-options="region:‘center‘,title:‘地图‘">
        <div id="map"
        style="width: 100%; height: 100%; "></div>
    </div>
</body>
</html>
时间: 2024-12-24 23:45:52

ArcGIS api for javascript-图层控制(图层树)的相关文章

ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务

1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2.ArcGIS Server介绍与安装 1.ArcGIS Server 是功能强大的基于服务器的 GIS 产品,用于构建集中管理的.支持多用户的.具备高级GIS功能的企业级GIS应用与服务,如:空间数据管理.二维三维地图可视化.数据编辑.空间分析等即拿即用的应用和类型丰富的服务.ArcGIS Serv

ArcGIS API for JavaScript 4.2学习笔记[5] 官方API大章节概述与内容转译

内容如上,截图自ESRI官网,连接:ArcGIS API for JavaScript 4.2 [Get Started] 类似于绪论一样的东西,抽取了最需要关注的几个例子.如:加载Map和View,加载layers,使用弹出窗口,视觉化,与使用窗口小部件.(wtf居然没有分析你想搞事情啊web除了展示难道不应该有()&&*--@) [Mapping and Views] (点击进入我写的章节详细介绍) 最基础的,知道地图和视图的区别,能使用2D和3D地图,对地图的布局有一定的了解,对地图

初学ArcGIS API for JavaScript

初学ArcGIS API for JavaScript 对于初学者来说,关于esri提供的一些样式和dojo自带的一些样式还是需要有一定的了解,这块在<WebGIS开发从基础到实践>讲解的特别详细,在这里以笔记的形式来帮助自己加以理解和记忆. esri.css样式主要用于ESRI提供的小部件与组件,比如地图.信息框等.此外,还可以引用Dojo提供的样式表,Dojo提供了4组样式,分别是claro\tundra\soria以及nihilo,每种是一组定义用户界面的字体.颜色与大小等设置.在Arc

我的ArcGIS API for Javascript

为大家贴贴最基本的地图加载: 一. API 根据Dom树上节点的 ID 确定 Map 的显示位置; 二. setBasemap 方法可得到一些ArcGIS制作好的底图,例如: "streets" , "satellite" , "hybrid", "topo", "gray", "oceans", "national-geographic", "osm&qu

ArcGIS API for JavaScript 学习笔记 (一) --第一个WebGIS应用程序

说明:本地部署后续我会尝试. 简单介绍: 开发环境是Visual Studio 2012,因为它为所有的.aspx文件..htm文件以及外部的.js文件提供了IntelliSense(智能提示),相当于其他软件的代码自动补全功能,非常方便.接下来是我的第一个Javascript API 应用程序.ESRI在其arcgis online中提供了在线的ArcGIS API for JavaScript,在web应用中直接引用即可,无需下载安装:当然也可以下载API,然后部署到自己的web服务器,在这

ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 诸君,我喜欢嫩的--呸呸呸 诸君,我喜欢3D咋了?新事物会替代旧事物不是~ ArcGIS API for JavaScript 4.2概述 AJS 4.2,即ArcGIS API for JavaScript 4.2,是美国ESRI公司针对WebGIS市场推出的.利用JavaScript和Dojo开发的一款产品,它在2016年12月发布.而AJS 4.0 beta则在一年前就发布了. 关于AJS3和AJS4选择的问题,

ArcGIS API for JavaScript中Symbol符号篇

ArcGIS API for JavaScript中Symbol简介: Symbol定义了arcgis中graphics图层内几何图形(geometry)的显示样式 ArcGIS API for JavaScript中Symbol分为四大类:继承关系如下图所示: 1.点符号(MarkerSymbol):点符号(point)的显示样式 2.线符号(LineSymbol):线符号(line)的显示样式 3.面符号(FillSymbol):面符号(polygon)的显示样式 4.文本符号(TextSy

基于ArcGIS API for Javascript的地图编辑工具

转自:http://www.cnblogs.com/znlgis/p/3505646.html 最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子是https://developers.arcgis.com/en/javascript/jssamples/ed_default_editingwidget.html 我们下面只说一些需要注意的问题:

ArcGis API for JavaScript 开发笔记一 加载地图

1.首先要配置GIS 环境 参考资料:看下这些大神的资料: http://blog.sina.com.cn/s/blog_708bacf90100yddk.html http://blog.csdn.net/wufeishimeng/article/category/522004 也可以查看官方的例子: https://developers.arcgis.com/javascript/jssamples/ 查看GIS 官方API https://developers.arcgis.com/jav

使用Arcgis Api for Javascript 调用 本地Portal发布的WebMap

步骤: 安装Arcgis Portal 10.4,Server 10.4,DataStore ,WebAdaptor for IIS,搭建arcgis api for javascript 4.3环境,具体配置过程自行百度,在此就不赘述. 设置Portal语言:"我的组织"->编辑设置->常规->语言,选中“中文简体”; 发布图层:在arcgis pro 1.4中发布名为point,line,polygon的测试服务,此处可以对各图层进行唯一值渲染等配图操作; 配置地