利用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后: