GIS将地理空间数据表示为矢量数据和栅格数据。矢量数据模型使用点、线和多边形来表示具备清晰空间位置和边界的空间要素,如控制点、河流和宗地等,每一个要素被赋予一个ID,以便与其属性相关联。栅格数据模型使用一个格网和格网元胞(像元)表明空间要素,元胞值表示该元胞位置的空间要素属性。栅格数据模型适用于表示连续的要素,如海拔和降水量。ide
[矢量数据模型] [栅格数据模型]spa
PIE支持多种矢量数据的打开,下面咱们就介绍如何在PIE中打开Shape类型的矢量数据。code
Shapefile是由ESRI开发后被普遍应用的数据格式,它采用文件的方式分开存储数据的控件信息和属性信息,但其不能存储拓扑关系,具备简单、快速显示的优势。一个Shape数据的文件结构以下所示:视频
[Shape数据文件结构]blog
编号教程 |
后缀索引 |
文件说明接口 |
1ci |
.shp开发 |
基本文件,存储地理要素的几何图形信息; |
2 |
.dbf |
基本文件,存储地理要素的属性信息; |
3 |
.shx |
基本文件,存储图形要素与属性信息的索引; |
4 |
.prj |
可选文件,存储数据的空间参考信息; |
5 |
.sbn/.sbx |
可选文件,存储数据的空间索引信息(ESRI建立的空间索引); |
6 |
.qix |
可选文件,存储数据的空间索引信息(PIE建立的空间索引); |
[Shape数据文件结构说明]
第一步 |
根据文件路径打开矢量数据集; |
第二步 |
经过矢量数据集建立矢量图层; |
接口/类 |
方法 |
说明 |
DataSource.DatasetFactory |
OpenFeatureDataset |
打开矢量数据集 |
Carto.LayerFactory |
CreateDefaultFeatureLayer |
建立矢量图层 |
项目路径 |
百度云盘地址下/PIE示例程序/03.数据加载/01.打开矢量数据 |
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/Shape/省级行政区.shp |
视频路径 |
百度云盘地址下/PIE视频教程/03.数据加载/01.打开矢量数据.avi |
示例代码 |
|
![]() 1 方法(一) 2 // 得到要打开Shape数据的路径 3 OpenFileDialog openFileDialog = new OpenFileDialog(); 4 openFileDialog.Filter = "矢量数据(*.shp)|*.shp"; 5 if (openFileDialog.ShowDialog() != DialogResult.OK) return; 6 // 打开图层 7 string filePath = openFileDialog.FileName; 8 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(filePath); 9 if (layer == null) return; 10 // 添加图层到地图并刷新 11 mapControMain.FocusMap.AddLayer(layer); 12 mapControMain.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll); 13 14 方法(二) 15 // 得到要打开Shape数据的路径 16 OpenFileDialog openFileDialog = new OpenFileDialog(); 17 openFileDialog.Filter = "矢量数据(*.shp)|*.shp"; 18 if (openFileDialog.ShowDialog() != DialogResult.OK) return; 19 // 打开矢量数据集 20 string filePath= openFileDialog.FileName; 21 IFeatureDataset fDataset = PIE.DataSource.DatasetFactory.OpenFeatureDataset(filePath); 22 if (fDataset == null) return; 23 // 建立矢量图层 24 IFeatureLayer fLayer = PIE.Carto.LayerFactory.CreateDefaultFeatureLayer(fDataset); 25 if (fLayer == null) return; 26 // 添加图层到地图并刷新 27 mapControlMain.FocusMap.AddLayer(fLayer as ILayer); mapControlMain.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll); |