1. 功能简介
目前不同的GIS软件平台具有自己独特支持的数据格式,如ESRI的File GeoDataBase和Personal GeoDataBase、MapInfo的mif数据、AutoCAD的DWG数据、Google的Kml和Kmz数据等,PIE对这些常用软件的数据格式都进行了支持,能够顺利的进行浏览查看。
2. 功能实现说明
2.1 数据格式介绍
File GeoDataBase和Personal GeoDataBase是ESRI的本地数据存储格式,其中File GDB以文件方式存储,Personal GDB则为一个MS-Access 的mdb数据库, FGDB较PGDB具有更高的效率、更大的数据支持空间、更广的运行平台。
DWG是AutoCAD的数据格式,它采用点、线、面、文本组合存储的方式存储。
2.2 实现思路及原理说明
第一步 |
通过文件路径打开数据集 |
第二步 |
进行多数据集接口转换 |
第三步 |
通过多数据集创建多图层 |
2.3 核心接口与方法
接口/类 |
方法 |
说明 |
DataSource.DatasetFactory |
OpenDataset |
打开数据集 |
Carto.LayerFactory |
CreateDefaultMultiLayer |
创建多图层 |
CreateDefaultLayer |
创建图层 |
2.4 示例代码
项目路径 |
|
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/FGDB/China.gdb 百度云盘地址下/PIE示例数据/矢量数据/PGDB/China.mdb 百度云盘地址下/PIE示例数据/矢量数据/DWG/China.dwg |
视频路径 |
百度云盘地址下/PIE视频教程/03.数据加载/04.打开GDB数据.avi |
示例代码 |
|
1 (方法一)打开File GeoDatabase 2 FolderBrowserDialog fb = new FolderBrowserDialog(); 3 fb.Description = "File GDB(*.gdb) | *.gdb"; 4 if (fb.ShowDialog() != DialogResult.OK) return; 5 //打开数据集,当GDB中只有一个图层或无图层时,均返回空值 6 IMultiDataset multiDataset = DatasetFactory.OpenDataset(fb.SelectedPath, OpenMode.ReadOnly) as IMultiDataset; 7 if (multiDataset == null) 8 { 9 //创建图层 10 ILayer player = PIE.Carto.LayerFactory.CreateDefaultLayer(fb.SelectedPath); 11 if(player == null) return; 12 // 添加图层到地图并刷新 13 mapControlMain.FocusMap.AddLayer(player); 14 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 15 } 16 else 17 { 18 //创建图层 19 IMultiLayer multiLayer = LayerFactory.CreateDefaultMultiLayer(multiDataset); 20 if (multiLayer == null) return; 21 // 添加图层到地图并刷新 22 mapControlMain.FocusMap.AddLayer(multiLayer as ILayer); mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 23 } 24 25 (方法二)打开Personal GDB和Dwg 26 OpenFileDialog openFileDialog = new OpenFileDialog(); 27 openFileDialog.Filter = "Personal GDB数据|*.mdb|Dwg数据|*.dwg"; 28 if (openFileDialog.ShowDialog() != DialogResult.OK) return; 29 //创建数据集 30 IMultiDataset multiDataset = PIE.DataSource.DatasetFactory.OpenDataset(openFileDialog.FileName,OpenMode.ReadOnly) as IMultiDataset; 31 if (multiDataset == null) return; 32 33 //创建图层 34 IMultiLayer multiLayer = PIE.Carto.LayerFactory.CreateDefaultMultiLayer(multiDataset); 35 if (multiLayer == null) return; 36 // 添加图层到地图并刷新 37 mapControlMain.FocusMap.AddLayer(multiLayer as ILayer); 38 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); |
2.5 示例截图