利用ArcGIS Server 10.1發布動態圖層服務,然后利用ArcGIS API For JavaScript進行加載。
在發布服務的時候在 Capabilities節點下的Mapping注冊一個工作空間,點擊Manage即可注冊。
在這里注意選擇工作空間的類型,我選的是Shapefile文件,也可以連接數據庫作為工作空間。然后定義一個工作空間ID,在添加數據的時候會用到。最后就是選中shp文件所在的文件夾了。
再添加工作空間之后,發布的時候如果報錯:Dynamic workspace with workspace ID [MyShapefileWorkspaceID] is not registered with the server,說明工作空間中的數據沒有注冊,如下圖所示:
這個時候需要注冊數據所在的文件夾。
打開ArcCatalog,右鍵服務的連接屬性,如下圖所示:
點擊之后界面開始注冊文件數據:
點擊“+”之后進入如下界面:
填入注冊名稱和文件所在路徑之后,注冊就OK了。這時候重新發布服務,問題就會消失了。
如果已近發布好的地圖,可以在ArcGIS Server Manager里面來添加動態工作空間,如下圖所示:
開始調用動態圖層了:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> </body> </html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>動態圖層添加shp文件</title> <link rel="stylesheet" href="http://localhost/arcgis_js_v35_sdk/arcgis_js_api/library/3.5/3.5/js/esri/css/esri.css"/> <script src="http://localhost/arcgis_js_v35_sdk/arcgis_js_api/library/3.5/3.5/init.js" type="text/javascript"></script> <script src="http://localhost/arcgis_js_v35_sdk/arcgis_js_api/library/3.5/3.5" type="text/javascript"></script> <script src="dojo/jsapi_vsdoc12_v35.js" type="text/javascript"></script> <style type="text/css"> .MapClass { width:900px; height:600px; border:1px solid #000; } </style> <script type="text/javascript"> var map; dojo.require("esri.map"); dojo.require("esri.layers.FeatureLayer"); dojo.addOnLoad(function () { map = new esri.Map("MyMapDiv"); var DynamicLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/全國縣市_DynamicLayer/MapServer"); map.addLayer(DynamicLayer); });
function AddDynamicLayer()
{ var TableSource = new esri.layers.TableDataSource(); TableSource.workspaceId = "MyShapefileWorkspaceID"; TableSource.dataSourceName = "roa_4m.shp"; var layerSource = new esri.layers.LayerDataSource(); layerSource.dataSource = TableSource; var featurelayer = new esri.layers.FeatureLayer(
"http://localhost:6080/arcgis/rest/services/全國縣市_DynamicLayer/MapServer/dynamicLayer", //注意調用動態圖層的時候在原服務的鏈接后面加上dynamicLayer { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, outFields: ["*"], source:layerSource }); var symbol = esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASH, new dojo.Color([255, 0, 0]), 3); var renderer = new esri.renderer.SimpleRenderer(symbol); featurelayer.setRenderer(renderer); featurelayer.refresh(); map.addLayer(featurelayer); }
</script> </head> <body class="tundra"> <div id="MyMapDiv" class="MapClass"> <div id="DrawDiv" style="width:100px; height:50px"> <button id="point" onclick="AddDynamicLayer()">添加shp</button> </div> </div> </body> </html>
這里加上運行后的效果:
添加shp前:
點擊按鈕添加shp后: