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); |