ArcGIS JS API 实现:1.通过输入图层名字添加多个动态图层,和通过输入图层名字移除图层2.点击任意动态图层可弹出该图层的属性信息

  /*该函数实现:
            点击添加图层,弹出添加图层框,输入SDE图层的名字,便可添加;
            点击移除图层,弹出移除图层框,输入SDE图层的名字,便可移除。
        注意:1.本函数使用数组,即添加一个图层,就向数组里push一个图层,然后map.addLayer这个数组里最后一个图层,
        在移除时,首先遍历数组是否含有该图层,若有,便移除,没则提示“没有该图层”
              2.如果本函数不使用数组存放图层,那么也可在map里添加很多图层,但是移除的时候只能移除最后一次添加的
        图层,而不能移除之前添加的图层
        * */
        findFunction1: function (map) {     //动态图层查询函数
            //点击添加图层,弹出添加图层框
            dom.byId("addLayerTool").onclick=function () {
                dom.byId("addLayerContainerDiv").style.display="block";
            };
            //点击X,添加图层框消失
            dom.byId("addLayerClose").onclick=function(){
                dom.byId("addLayerContainerDiv").style.display="none";
            };
            //点击移除图层,弹出移除图层框
            dom.byId("removeLayerTool").onclick=function () {
                dom.byId("removeLayerContainerDiv").style.display="block";
            };
            //点击X,移除图层框消失
            dom.byId("removeLayerClose").onclick=function(){
                dom.byId("removeLayerContainerDiv").style.display="none";
            };
            //执行两个框的拖拉函数
            dragFunction(dom.byId("addLayerHeaderDiv"),dom.byId("addLayerContainerDiv"));
            dragFunction(dom.byId("removeLayerHeaderDiv"),dom.byId("removeLayerContainerDiv"));
           //获取动态图层函数,return值是一个动态图层
            function getLayerFunction(OracleLayerName){
                //定义一个数据源
                var dataSource=new TableDataSource();
                //此处为我们设置的命名空间
                dataSource.workspaceId="MyDatabaseWorkspaceID";
                //命名空间下面的要素类
                dataSource.dataSourceName=OracleLayerName;
                //定义一个图层数据源
                var layerSource=new LayerDataSource();
                //给图层数据源赋值
                layerSource.dataSource=dataSource;
                //定义一个要素图层:注意链接为动态图层的地址
                var getLayer= new FeatureLayer("http://192.168.220.132:6080/arcgis/rest/services/test1/MapServer/dynamicLayer", {
                    mode: FeatureLayer.MODE_ONDEMAND,
                    outFields: ["*"],
                    source: layerSource
                });
                var lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 255, 0]), 2);
                var fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol, new Color([0,255,0]));
                //定义渲染器
                var renderer = new SimpleRenderer(fillSymbol);
                getLayer.setRenderer(renderer);
                getLayer.refresh();
                return getLayer;
            };
            //定义一个空数组,用来存放图层
            var layerArray=[];
            //定义一个变量K=0,在添加图层的时候用来标记数组里是否已经含有该图层,即命名是否重复
            var K=0;
            //定义一个变量K1,在移除图层的时候用来标记移除数组的第i个图层
            var K1;
            //定义一个变量K2,在移除图层的时候用来标记数组里是否含有该图层,即要移除的图层是否存在
            var K2;
            //添加和移除图层函数
            function addAndRemoveFunction1(){
                //添加图层事件
                dom.byId("addLayerDetermine").onclick=function () {
                    //在添加图层时,for循环遍历图层数组中是否已经含有该图层
                    for(var i=0;i<layerArray.length;i++)
                    {
                       /* 若含有,则提示"命名重复,请更改名字",并且令K=1,即告诉程序你这个图层是新的,是可以添加
                       的, 并跳出该for循环*/
                        if(dom.byId("addLayer").value==layerArray[i].source.dataSource.dataSourceName)
                        {
                            alert("命名重复,请更改名字");
                            K=1;
                            break;
                        }
                    }
                    //若图层数组不含新添加的图层,则将图层push到数组里
                    if(K==0)
                    {
                        layerArray.push(getLayerFunction(dom.byId("addLayer").value));
                    }
                    //然后将图层数组中的最后一个元素添加到map中
                    map.addLayer(layerArray[layerArray.length-1]);
                };
                //移除图层事件
                dom.byId("removeLayerDetermine").onclick=function () {
                    //for循环遍历图层数组中是否含有需要移除的图层
                    for(var i=0;i<layerArray.length;i++)
                    {
                        /*若有,把该图层的位置赋值给K1,并令K2=0,即告诉程序,你输入的图层图层数组是有的,是
                        可以移除的,并跳出该for循环
                        */
                        if(dom.byId("removeLayer").value==layerArray[i].source.dataSource.dataSourceName)
                        {
                            K1=i;
                            K2=0;
                            break;
                        }
                    }
                    //若图层数组中含有输入的图层,那么就执行map.removeLayer(layerArray[K1]);K1是上个循环中查询的位置
                    if(K2==0)
                    {
                        map.removeLayer(layerArray[K1]);
                    }
                    //否则,则弹出"没有要移除的图层"
                    else
                    {
                        alert("没有要移除的图层");
                    }
                };

            }
            //点击图层查询属性信息函数
            function clickFindFunction(){
                //遍历所有的图层数组元素,实现点击哪个,就显示该图层的信息
                for(var i=0;i<layerArray.length;i++)
                {
                    layerArray[i].on("click",function (evt) {
                        //得到点击的graphics
                        var graphic=evt.graphic;
                        var infoTemplate=new InfoTemplate("图层属性");
                        graphic.setInfoTemplate(infoTemplate);
                        //定义第一个符号
                        var lineSymbol1 = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 0, 255]), 2);
                        var fillSymbol1 = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol1, new Color([0, 0, 255]));
                        //定义第二个符号
                        var lineSymbol2 = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0]), 2);
                        var fillSymbol2 = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol2, new Color([255, 0, 0]));
                        function changeSymbol() {    //定义一个symbol闪烁变化的函数
                            if (K == 0) {
                                graphic.setSymbol(fillSymbol1);
                                K = 1;
                            }
                            else {
                                graphic.setSymbol(fillSymbol2);
                                K = 0;
                            }
                        }
                        changeSymbol();
                        setInterval(changeSymbol, 500);
                    });
                }
            }
            addAndRemoveFunction1();
            //给点击查询绑定动态图层查询事件
            dom.byId("clickTool1").onclick=function () {
                clickFindFunction();
            };
    

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值