ArcGIS Server10.1 动态图层服务
动态图层的应用场景:
1 改变现有图层:符号,渲染方式和版本,这些都可以通过客户端请求的时候给定相应的参数来进行设置,从而来达到轻易改变地图的效果。
2 添加地图服务中没有的图层
添加的数据可以是矢量数据也可以栅格数据,还可以是一个通过sql查询出来的结果,或者是两个表关联的关联结果。矢量的数据可以是shapefile,filegdb,或者sde中的数据。栅格数据可以是esri能直接识别的栅格数据格式。
动态图层功能的服务器端配置:
动态图层在配置上非常简单,如果你只是需要把mapservice中的图层变为动态图层的话,只需要打一个勾就可以。如果是要动态添加一个数据到地图服务中,就需要在地图服务中设置要添加的数据的工作空间,步骤如下:
1 在服务属性对话框中,如下图,在Parameters选项中把右下角allow per request modification of layer order and symbology 前面的选项框中打钩,如果只是要改变现有图层的信息,就此一步就可以了,如果要动态添加数据,点击旁边的Manage按钮。
2 点击manage对话框之后弹出下面的对话框,就是对你要添加的数据的工作空间进行管理,你可以在这里添加多个工作空间,这些工作空间中的数据就都可以实现动态的添加了。如下图:
3 点击Add按钮,可以添加workspace,选择workspace的类型,输入workspaceID和连接信息,如果是shapesfiles的话就是文件目录。这些信息都会在添加数据的时候用到的。如下图:
接下来是重点在客户端如何调用本文用Arcgis API for JavaScript。首先dojo引入必要的库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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!" ); |
然后添加地图
1 2 | var shengLayer = new esri.layers.ArcGISDynamicMapServiceLayer( "http://localhost:6080/arcgis/rest/services/MyMapService/MapServer" , { "id" : "mymaplayer" }) myMap.addLayer(shengLayer); |
接下来是重要的点击事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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客户端,不然注册数据库会失败。(一般安装完成后要重启)
唉,以前写的挺详细的,结果没发布。今天花几分钟快速写一下。好了 午休了 安~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构