動態圖層的應用場景:
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新特性系列---動態圖層 [轉載]ArcGIS <wbr>Server <wbr>10.1新特性系列---動態圖層](/image/aHR0cDovL3MxMi5zaW5haW1nLmNuL21pZGRsZS82ZjI5NzgxNXRiMjYyMGRmMWQzMmImNjkw.png)
2 點擊manage對話框之后彈出下面的對話框,就是對你要添加的數據的工作空間進行管理,你可以在這里添加多個工作空間,這些工作空間中的數據就都可以實現動態的添加了。如下圖:![[轉載]ArcGIS <wbr>Server <wbr>10.1新特性系列---動態圖層 [轉載]ArcGIS <wbr>Server <wbr>10.1新特性系列---動態圖層](/image/aHR0cDovL3M2LnNpbmFpbWcuY24vbWlkZGxlLzZmMjk3ODE1dGIyNjFlY2RkZjc2NSY2OTA=.png)
3 點擊Add按鈕,可以添加workspace,選擇workspace的類型,輸入workspaceID和連接信息,如果是shapesfiles的話就是文件目錄。這些信息都會在添加數據的時候用到的。如下圖:
![[轉載]ArcGIS <wbr>Server <wbr>10.1新特性系列---動態圖層 [轉載]ArcGIS <wbr>Server <wbr>10.1新特性系列---動態圖層](/image/aHR0cDovL3MyLnNpbmFpbWcuY24vbWlkZGxlLzZmMjk3ODE1dGIyNjFlY2JlNDAyMSY2OTA=.png)
接下來是重點在客戶端如何調用本文用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客戶端,不然注冊數據庫會失敗。(一般安裝完成后要重啟)
唉,以前寫的挺詳細的,結果沒發布。今天花幾分鍾快速寫一下。好了 午休了 安~~~
