arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现

图层控制是很多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式。首先看图:

实现效果

重点有以下两点:1、获取ArcGISDynamicMapServiceLayer的图层;2、控制图层的显示。图层的获取可通过layerInfos实现,图层的显示通过setVisibleLayers实现,源代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <title>Simple Map</title>
    <link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.9/3.9/js/esri/css/esri.css">
    <style type="text/css">
        @import "http://localhost/arcgis_js_api/library/3.9/3.9/js/dojo/dojo/resources/dojo.css";
        @import "http://localhost/arcgis_js_api/library/3.9/3.9/js/dojo/dijit/themes/dijit.css";
        @import "http://localhost/arcgis_js_api/library/3.9/3.9/js/dojo/dijit/themes/tundra/tundra.css";
    </style>
    <style>
        html, body, #map {
            height: 100%;
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #FFF;
            overflow: hidden;
            font-family: "Trebuchet MS";
        }
    </style>
    <script src="http://localhost/arcgis_js_api/library/3.9/3.9/init.js"></script>
    <script>
        var map, mapCenter;
        var visible=[], setLayerVisibility;;
        require([
            "esri/map",
            "esri/layers/ArcGISTiledMapServiceLayer",
            "esri/layers/FeatureLayer",
            "esri/layers/GraphicsLayer",
            "esri/geometry/Point",
            "esri/symbols/PictureMarkerSymbol",
            "esri/symbols/SimpleLineSymbol",
            "esri/renderers/SimpleRenderer",
            "dojo/_base/Color",
            "dojox/charting/Chart2D",
            "dojo/dom-construct",
            "dojo/domReady!"],
        function(Map,
             Tiled,
             FeatureLayer,
             GraphicsLayer,
             Point,
             PictureMarkerSymbol,
             SimpleLineSymbol,
             SimpleRenderer,
             Color,
             Chart2D,
             domConstruct)
        {
            map = new Map("map", {logo:false,slider: true});
            var tiled = new Tiled("http://localhost:6080/arcgis/rest/services/image/MapServer");
            map.addLayer(tiled,0);
            var dynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/china/MapServer");
            map.addLayer(dynamicMapServiceLayer,1);
            var chartLayer = new GraphicsLayer({"id":"chartLayer"});
            map.addLayer(chartLayer,2);
            mapCenter = new Point(103.847, 36.0473, map.spatialReference);
            map.centerAndZoom(mapCenter,4);

            dojo.connect(dynamicMapServiceLayer,"onLoad",loadLayerList);
            function loadLayerList(layers){
                var html=""
                var infos=layers.layerInfos;
                for(var i= 0,length=infos.length;i<length;i++){
                    var info = infos[i];
                    //图层默认显示的话就把图层id添加到visible
                    if(info.defaultVisibility)
                    {
                        visible.push(info.id);
                    }
                    //输出图层列表的html
                    html=html+"<div><input id='"+info.id+"' name='layerList' class='listCss' type='checkbox' value='checkbox' onclick='setLayerVisibility()' "+(info.defaultVisibility ? "checked":"")+" />"+info.name+"</div>";
                }
                //设置可视图层
                dynamicMapServiceLayer.setVisibleLayers(visible);
                //在右边显示图层名列表
                dojo.byId("toc").innerHTML=html;
            }
            setLayerVisibility = function()
            {
                //用dojo.query获取css为listCss的元素数组
                var inputs = dojo.query(".listCss");
                visible = [];
                //对checkbox数组进行变量把选中的id添加到visible
                for(var i=0;i<inputs.length;i++)
                {
                    if(inputs[i].checked)
                    {
                        visible.push(inputs[i].id);
                    }
                }
                //设置可视图层
                dynamicMapServiceLayer.setVisibleLayers(visible);
            }
        });
    </script>
</head>

<body>
<div id="map">
    <div id="toc" style="position: absolute; left: 10px; bottom: 20px; border: 1px solid #9c9c9c; background: #fff; width: 100px; height: auto; z-index: 99;padding: 10px;"></div>
</div>
</body>
</html>
时间: 2024-11-02 09:41:53

arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现的相关文章

arcgis for javascript ArcGISDynamicMapServiceLayer 过滤图层点

记录下过滤 ArcGISDynamicMapServiceLayer 图层服务的方法 [html] view plaincopy function filterArcGISDynamicMapServiceLayer(){ map.graphics.clear();//清楚地图上现有的点 var layerDefinitions = [];//定义过滤条件 //过滤5个图层 layerDefinitions[0] = "NAME_ = '11'"; layerDefinitions[1

Arcgis for javascript map操作addLayer详解

本节的内容很简单,说说Arcgis for Javascript里面map对象的addLayer方法.在for JS的API中,addLayer方法有两种,如下图: addLayer方法 在addLayer方法里面有两个参数,一个是必选参数layer,另一个是可选参数index,layer就不说了,可以是支持的任何一种layer,重点说说index.index参数用来控制地图显示的层级关系,也就是哪个在上,哪个在下的问题,举个例子: 不带参数: map.addLayer(base); map.a

openlayers自定义图层控制的实现

好久没写博文了,今天出来冒个泡. 最近一直在考虑一件事情,那就是openlayers中自定义wms的图层控制.用过openlayers的人都知道,在openlayers中有自带的图层控制的控件,调用方法也很简单: map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true}));//图层控制 但是,不论是从操作的方便程度还是美观性方面考虑,自带的图层控制是无法满足需求的,考虑了一段时间,今天终于有时间实现了,下面就说

ArcGIS for JavaScript 关于路径开发的一些记录(一)

今年毕业,进入公司的第一个任务就是单独负责一个项目的地图模块,用ArcGIS API for JavaScript来开发web地图.花了大概一个礼拜的时间学会了安装和搭建ArcGIS Server和ArcGIS DeskTop并且成功的发布了第一个本地的地图服务,之后花了大概1个月的时间来了解ArcGIS for JavaScript的官方API和Sample.由于官方的文档都是英文的,刚开始还真是很难看的懂(或许是当时太浮躁了).但时间久了也就慢慢的进入状态了,每天都能够学到不同的知识点,这种

Arcgis for javascript不同的状态下自定义鼠标样式

俗话说:爱美之心,人皆有之.是的,没错,即使我只是一个做地图的,我也希望自己的地图看起来好看一点.在本文,给大家讲讲在Arcgis for javascript下如何自定义鼠标样式. 首先,说几个状态.1.鼠标在地图上面移动:2.按住鼠标左键拖拽鼠标:3.拉框放大地图:4.拉框缩小地图. 鼠标在地图上面时为: 按住鼠标拖拽地图时为: 拉框放大地图时为: 拉框缩小地图时为. 接下来,说说我的实现思路. 第一种状态,在地图加载完成时出现,代码: map.on("load",function

ArcGIS for JavaScript 3.9 本机IIS部署

arcgis 官方网站经常会打不开,天朝人民都懂得!因为将arcgis for javascript 配置到本机访问 首先esri中国下载最新版3.9的API: http://support.esrichina-bj.cn/2011/0223/960.html 下载到本机后 将压缩包解压 复制这个arcgis_js_v39_api/arcgis_js_api到iis的根目录(当然你可以复制到你的项目所在的目录下). 即:C:\Inetpub\wwwroot\目录下 172.16.5.238 为我

ArcGIS for JavaScript学习(一)

一  API准备 从网上下载开发包:ArcGIS for JavaScript(百度网盘地址) sdk中含有API的帮助和例子 2.离线部署(以IIS为例) 配置IIS(详见网络):解压离线包,包中的install_SDK.html/install_API.html文件含有详细的部署过程. 二 第一个应用程序 使用在线api (1)创建简单的html文档 <!DOCTYPE html> <html> <head> <meta http-equiv="Co

ArcGIS for JavaScript继承TiledMapServiceLayer来实现“动态切图”

这种方式可以提高出图速度于效果,算法见http://blog.newnaw.com/?p=633,我用ArcGIS for JavaScript API来实现.具体代码为: 1 function initDynamicMapLayer() { 2 dojo.declare("ogc.DynamicMapLayer", esri.layers.TiledMapServiceLayer, { // create DynamicMapLayer by extending esri.layer

Arcgis for Javascript之featureLayer图和属性的互操作

说明:主要实现加载FeatureLayer与显示属性表,并实现属性表与地图的联动,首先,看看实现后的效果: 显示效果 如上图所示,本文章主要实现了以下几个功能:1.FeatureLayer属性表的分页加载与显示:2.属性表和地图的互操作,包括鼠标经过时在地图上显示名称并高亮显示.点击列表显示对象的信息框,如下图: 显示信息框 下面,说说具体的实现思路与代码. 1.FeatureLayer属性表的获取 获取FeatureLayer的属性表,首先得创建FeatureLayer对象,如下: ftch