ArcGIS Runtime 加载SHAPE数据的另一种方式-动态图层
来源:互联网 发布:vggnet 网络结构 编辑:程序博客网 时间:2024/05/24 01:20
ArcGIS 10.1中有一个新的功能就是动态图层(NOT DynamicLayer,动态地图服务),该动态图层简单的说,就是向一个动态服务注册一个工作空间,该工作空间中含有shape,栅格等数据,这样的话,客户端可以通过API获取这个工作空间下的所有shape数据,并可以对其进行渲染。ArcGIS Runtime和ArcGIS Server的架构类似,而API也十分相像,ArcGIS Runtime加载shape数据除了我们前面介绍的方法,还可以通过动态图层这样的方式,原理和ArcGIS Server的一样,现在说下步骤:
加载MPK(相当于ArcGIS Server的动态地图);
注册一个包含shape数据的工作空间,也就是一个目录;
遍历该目录,获取shape数据,然后加载。
核心代码:
OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image files (*.bmp,*.png,*.sid,*.tif)|*.bmp;*.png;*.sid;*.tif;"; openFileDialog.RestoreDirectory = true; openFileDialog.Multiselect = true; if (openFileDialog.ShowDialog() == true) { try { // // 添加栅格 AddFileDatasetToDynamicMapServiceLayer(WorkspaceFactoryType.Raster, Path.GetDirectoryName(openFileDialog.FileName), new List<string>(openFileDialog.SafeFileNames), arcGisLocalDynamicMapServiceLayer => { _map.Layers.Add(arcGisLocalDynamicMapServiceLayer); }); } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } }
public void AddFileDatasetToDynamicMapServiceLayer(WorkspaceFactoryType workspaceType, string directoryPath, List<string> fileNames, Action<ArcGISLocalDynamicMapServiceLayer> callback) { try { // 产生UID string uniqueId = Guid.NewGuid().ToString(); // 工作空间信息 WorkspaceInfo workspaceInfo = new WorkspaceInfo(uniqueId, workspaceType, "DATABASE=" + directoryPath); // 本地服务,该方法是NET3新特性 LocalMapService localMapService = new LocalMapService { Path = _emptyMpkPath, //这个属性很关键 EnableDynamicLayers = true }; // 给动态地图服务注册工作空间 localMapService.DynamicWorkspaces.Add(workspaceInfo); // 异步方法在ArcGIS Runtime中处处可见 localMapService.StartAsync(x => { ArcGISLocalDynamicMapServiceLayer arcGisLocalDynamicMapServiceLayer = null; arcGisLocalDynamicMapServiceLayer = new ArcGISLocalDynamicMapServiceLayer(localMapService) { // 工作空间ID ID = "Workspace: " + (new DirectoryInfo(directoryPath)).Name, //动态图层 EnableDynamicLayers = true, }; arcGisLocalDynamicMapServiceLayer.Initialized += (s, e) => { // 动态图层集合 DynamicLayerInfoCollection dynamicLayerInfoCollection = new DynamicLayerInfoCollection(); // 符号 LayerDrawingOptionsCollection layerDrawingOptionsCollection = new LayerDrawingOptionsCollection(); int counter = 0; foreach (string fileName in fileNames) { DynamicLayerInfo dynamicLayerInfo = new DynamicLayerInfo { ID = counter, Name = "Dataset: " + fileName }; DataSource dataSource = null; if (workspaceInfo.FactoryType == WorkspaceFactoryType.Raster) { dataSource = new RasterDataSource { DataSourceName = fileName, WorkspaceID = workspaceInfo.Id }; } else { dataSource = new TableDataSource { DataSourceName = fileName, WorkspaceID = workspaceInfo.Id }; var layerDrawOpt = new LayerDrawingOptions() { LayerID = counter, // 简单渲染 Renderer = new SimpleRenderer() { Symbol = new SimpleMarkerSymbol() { } }, }; layerDrawingOptionsCollection.Add(layerDrawOpt); } dynamicLayerInfo.Source = new LayerDataSource { DataSource = dataSource }; dynamicLayerInfoCollection.Add(dynamicLayerInfo); counter++; } arcGisLocalDynamicMapServiceLayer.DynamicLayerInfos = dynamicLayerInfoCollection; // 这两个一一对应 arcGisLocalDynamicMapServiceLayer.LayerDrawingOptions = layerDrawingOptionsCollection; arcGisLocalDynamicMapServiceLayer.Refresh(); callback(arcGisLocalDynamicMapServiceLayer); }; arcGisLocalDynamicMapServiceLayer.Initialize(); }); } catch (Exception ex) { MessageBox.Show(ex.Message,"Error",MessageBoxButton.OK,MessageBoxImage.Error); } }
效果如下:
- ArcGIS Runtime 加载SHAPE数据的另一种方式-动态图层
- 转 ArcGIS Runtime 加载SHAPE数据的另一种方式-动态图层 .
- ArcGIS Runtime加载本地Shape数据和编辑Shape数据
- ArcGIS Runtime加载本地shape数据和编辑shape数据
- ArcGIS Runtime加载本地Shape数据和编辑Shape数据
- ArcGIS Runtime加载本地Shape数据和编辑Shape数据
- ArcGIS Runtime加载本地Shape数据和编辑Shape数据
- ArcGIS Runtime SDK for iOS开发之地图图层-动态地图服务层
- arcgis 动态图层
- ArcGIS动态图层
- ArcGIS Runtime数据加载及编辑同步
- ArcGIS Runtime数据加载及编辑同步
- arcgis for js动态加载图层方法
- [ArcGIS for Android] arcgis runtime for android 中加载矢量数据的实现
- ArcGIS Engine利用动态图层实现数据的实时显示
- C#+AE加载shape图层
- arcgis server 9.2代码阅读笔记二:在页面上动态加载图层
- arcgis server 9.2代码阅读笔记二:在页面上动态加载图层
- 对架构师而言,什么最重要?
- 链表集锦
- DataReader对象转换为实体类与给存储过程批量添加参数
- 执行脚本是报错./cross.install: 25: Syntax error: "do" unexpected (expecting "fi")
- springMail发送邮件,转载别人的,感觉挺有用的
- ArcGIS Runtime 加载SHAPE数据的另一种方式-动态图层
- C# SQLLite
- HttpCore组件案例程序(Java描述) (Http Components-- HttpCore Examples)
- 293. Misfortures never come alone. 祸不单行
- 无线网络-LTE (03) 通信过程之 TAU procedures -- with Serving GW change
- 写博客的缘由
- KVC,KVO,NSNotification总结
- HTTP协议杂乱记录
- 驱动程序学习(二)一个简单的字符型设备驱动函数