zoukankan      html  css  js  c++  java
  • ArcGIS Server10.1 动态图层服务

    动态图层的应用场景:

    1 改变现有图层:符号,渲染方式和版本,这些都可以通过客户端请求的时候给定相应的参数来进行设置,从而来达到轻易改变地图的效果。

    2 添加地图服务中没有的图层

    添加的数据可以是矢量数据也可以栅格数据,还可以是一个通过sql查询出来的结果,或者是两个表关联的关联结果。矢量的数据可以是shapefile,filegdb,或者sde中的数据。栅格数据可以是esri能直接识别的栅格数据格式。

    动态图层功能的服务器端配置:

    动态图层在配置上非常简单,如果你只是需要把mapservice中的图层变为动态图层的话,只需要打一个勾就可以。如果是要动态添加一个数据到地图服务中,就需要在地图服务中设置要添加的数据的工作空间,步骤如下:

    1 在服务属性对话框中,如下图,在Parameters选项中把右下角allow per request modification of layer order and symbology 前面的选项框中打钩,如果只是要改变现有图层的信息,就此一步就可以了,如果要动态添加数据,点击旁边的Manage按钮。

    [转载]ArcGIS <wbr>Server <wbr>10.1新特性系列---动态图层

    2 点击manage对话框之后弹出下面的对话框,就是对你要添加的数据的工作空间进行管理,你可以在这里添加多个工作空间,这些工作空间中的数据就都可以实现动态的添加了。如下图:[转载]ArcGIS <wbr>Server <wbr>10.1新特性系列---动态图层

    3 点击Add按钮,可以添加workspace,选择workspace的类型,输入workspaceID和连接信息,如果是shapesfiles的话就是文件目录。这些信息都会在添加数据的时候用到的。如下图:

     [转载]ArcGIS <wbr>Server <wbr>10.1新特性系列---动态图层

    接下来是重点在客户端如何调用本文用Arcgis API for JavaScript。首先dojo引入必要的库

            dojo.require("esri.map");
            dojo.require("esri/layers/ArcGISDynamicMapServiceLayer");
            dojo.require("esri/layers/DynamicLayerInfo");
            dojo.require("esri/layers/LayerDataSource");
            dojo.require("esri/layers/LayerDrawingOptions");
            dojo.require("esri/layers/TableDataSource");
            dojo.require("esri/renderers/SimpleRenderer");
            dojo.require("esri/symbols/SimpleFillSymbol");
            dojo.require("esri/symbols/SimpleLineSymbol");
            dojo.require("dojo/dom");
            dojo.require("dojo/dom-construct");
            dojo.require("dojo/dom-style");
            dojo.require("dojo/parser");
            dojo.require("dojo/query");
            dojo.require("dojo/_base/array");
            dojo.require("esri/Color");
            dojo.require("dojo/dnd/Source");
            dojo.require("dijit/registry");
            dojo.require("dijit/form/Button");
            dojo.require("dijit/layout/BorderContainer");
            dojo.require("dijit/layout/ContentPane");
            dojo.require("dojo/domReady!");
    

    然后添加地图

     var shengLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/MyMapService/MapServer", { "id": "mymaplayer" })
    myMap.addLayer(shengLayer);
    

    接下来是重要的点击事件

    function AddDynamicLayer1() {
               
                var layerName, dataSource, layerSource, options, drawingOptions, dynamicLayerInfos;
    
                // layer name in the workspace
                layerName = "SHI";
                // get existing layer info
                // lakes info will be appended to this object so it shows up in the map service image
                //
                // only use createDynamicLayerInfosFromLayerInfos
                // if layers haven't been re-ordered yet
                if (!dynamicLayerInfos) {
                    dynamicLayerInfos = myMap.getLayer("mymaplayer").createDynamicLayerInfosFromLayerInfos();
                }
    
                // create a new dynamic layer info object for the lakes layer
                var dynamicLayerInfo = new esri.layers.DynamicLayerInfo();
                dynamicLayerInfo.id = dynamicLayerInfos.length;
                dynamicLayerInfo.name = layerName;
                // can also set things like min/max scale to specify scale
                // dependency on the new dynamic layer
    
                // create a table data source to access the lakes layer
                dataSource = new esri.layers.TableDataSource();
                dataSource.workspaceId = "dongtai1"; // not exposed via REST, sad face :(
                dataSource.dataSourceName = layerName;
                // and now a layer source
                layerSource = new esri.layers.LayerDataSource();
                layerSource.dataSource = dataSource;
                dynamicLayerInfo.source = layerSource;
                dynamicLayerInfos.push(dynamicLayerInfo);
                // set new infos, but don't refresh
                // map will be updated when the drawing options are set
                myMap.getLayer("mymaplayer").setDynamicLayerInfos(dynamicLayerInfos, true);
    
                drawingOptions = new esri.layers.LayerDrawingOptions();
                drawingOptions.renderer = new esri.renderer.SimpleRenderer(
                  new esri.symbol.SimpleFillSymbol("solid", new esri.symbol.SimpleLineSymbol("solid", new dojo.Color([255, 0, 255, 0.75]),5),
                    new dojo.Color([255, 0, 255, 0.75]) // fuchsia lakes!
                  ));
                options = [];
                options[1] = drawingOptions;
    
                myMap.getLayer("mymaplayer").setLayerDrawingOptions(options);
    
            }
    

    完成,本人是用shp文件。使用sde数据库时候要安装32和64位的oracle客户端,不然注册数据库会失败。(一般安装完成后要重启)

    唉,以前写的挺详细的,结果没发布。今天花几分钟快速写一下。好了 午休了  安~~~

  • 相关阅读:
    Linux 笔记:文件名
    Linux 一些有用的能力
    理解Linux内核注释
    Linux 的三种软件安装包介绍
    idea 2019 激活
    wget免登陆下载jdk 8u221
    PowerDesigner每点击一次就会提示打印错误对话框
    FormData使用方法详解
    springboot:配置多个数据源
    CSS3绘制不规则图形,代码收集
  • 原文地址:https://www.cnblogs.com/xibei/p/4785188.html
Copyright © 2011-2022 走看看