PIE SDK向量資料的建立
1.功能簡介
GIS將地理空間資料表示為向量資料和柵格資料。向量資料模型使用點、線和多邊形來表示具有清晰空間位置和邊界的空間要素,如控制點、河流和宗地等,每個要素被賦予一個ID,以便與其屬性相關聯。柵格資料模型使用一個格網和格網元胞(像元)代表空間要素,元胞值表示該元胞位置的空間要素屬性。柵格資料模型適用於表示連續的要素,如海拔和降水量。
[向量資料模型] [
PIE支援多種向量資料的建立,下面對向量資料格式的資料建立功能進行介紹。
2.功能實現說明
2.1 Shape資料介紹
Shapefile是由ESRI開發後被廣泛應用的資料格式,它採用檔案的方式分開儲存資料的控制元件資訊和屬性資訊,但其不能儲存拓撲關係,具有簡單、快速顯示的優點。一個Shape資料的檔案結構如下所示:
[Shape資料檔案結構]
編號 |
字尾 |
檔案說明 |
1 |
.shp |
基本檔案,儲存地理要素的幾何圖形資訊; |
2 |
.dbf |
基本檔案,儲存地理要素的屬性資訊; |
3 |
.shx |
基本檔案,儲存圖形要素與屬性資訊的索引; |
4 |
.prj |
可選檔案,儲存資料的空間參考資訊; |
5 |
.sbn/.sbx |
可選檔案,儲存資料的空間索引資訊(ESRI建立的空間索引); |
6 |
.qix |
可選檔案,儲存資料的空間索引資訊(PIE建立的空間索引); |
[Shape資料檔案結構說明]
2.2 實現思路及原理說明
第一步 |
建立欄位資訊並新增值,建立空間參考,儲存等 |
第二步 |
建立向量要素資料集 |
2.3 核心介面與方法
介面/類 |
方法/屬性 |
說明 |
DataSource.DatasetFactory |
CreateFeatureDataset(…) |
建立要素資料集 |
Carto.LayerFactory |
CreateDefaultFeatureLayer(…) |
建立向量圖層 |
Geometry.SpatialReferenceFactory |
CreateSpatialReference(string strWkt) |
建立空間參考 |
IField |
Name,AliasName,DefaultValue |
欄位屬性 |
IFields |
AddField(IField ptrField) |
新增欄位 |
IFeature |
SetValue(int nIndex, object field) |
設定欄位值 |
IFeatureClass |
AddFeature(IFeature ptrFeature) |
新增要素 |
2.4示例程式碼
專案路徑 |
百度雲盤地址下/PIE示例程式/04資料操作/01.向量資料的建立 |
資料路徑 |
|
視訊路徑 |
百度雲盤地址下/PIE示例程式/04資料操作/01.向量資料的建立.avi |
示例程式碼 |
|
![]() 1 //建立向量要素資料集 2 //1建立路徑 3 SaveFileDialog saveFileDialog = new SaveFileDialog(); 4 saveFileDialog.Title = "待建立的向量要素資料集"; 5 saveFileDialog.Filter = "ShapeFile|*.shp"; 6 if (saveFileDialog.ShowDialog() != DialogResult.OK) return; 7 8 //2設定欄位 9 IField field1 = new Field("Name", FieldType.OFTString, 50, 1); 10 field1.Name = "Name"; 11 field1.AliasName = "名稱"; 12 13 IField field2 = new Field("Level", FieldType.OFTInteger, 50, 1); 14 field2.Name = "Level"; 15 field2.AliasName = "級別"; 16 17 //3新增欄位 18 IFields fields = new Fields(); 19 fields.AddField(field1); 20 fields.AddField(field2); 21 22 string path = saveFileDialog.FileName; 23 //4建立空間參考資訊 24 ISpatialReference spatialReference = SpatialReferenceFactory.CreateSpatialReference((int)PIE.Geometry.GeoCSType.GeoCSType_WGS1984); 25 //5建立向量要素集 26 IFeatureDataset newFeatureDataset = DatasetFactory.CreateFeatureDataset(path, fields, GeometryType.GeometryPoint, spatialReference, "SHP"); 27 28 #region 6新增point 資訊 29 //A POINT 30 IFeature feature = newFeatureDataset.CreateNewFeature(); 31 IPoint point = new PIE.Geometry.Point(); 32 point.PutCoords(90, 45); 33 feature.Geometry = point as IGeometry; 34 35 feature.FID = 02; 36 feature.SetValue(0, "A"); 37 feature.SetValue(1, 2); 38 39 //B POINT 40 IFeature feature2 =newFeatureDataset.CreateNewFeature(); 41 IPoint point2 = new PIE.Geometry.Point(); 42 point2.PutCoords(93, 40); 43 feature2.Geometry = point2 as IGeometry; 44 45 feature2.FID = 01; 46 feature2.SetValue(0, "B"); 47 feature2.SetValue(1, 3); 48 #endregion 49 //將要素欄位資訊新增進向量資料集裡面 50 newFeatureDataset.AddFeature(feature); 51 newFeatureDataset.AddFeature(feature2); 52 //第一種方法: 53 IFeatureLayer featureLayer = new FeatureLayer(); 54 IFeatureClass fClass = new FeatureClass(newFeatureDataset); 55 featureLayer.FeatureClass = fClass; 56 57 //第二種方法: 58 // IFeatureLayer featureLayer = LayerFactory.CreateDefaultFeatureLayer(newFeatureDataset); 59 //建立空間索引,為要素資料集建立空間索引 60 newFeatureDataset.CreateSpatialIndex(1); 61 //(featureLayer.FeatureClass as IFeatureDataset).CreateSpatialIndex(2); 62 m_mapControl.FocusMap.AddLayer(featureLayer as ILayer); m_mapControl.PartialRefresh(ViewDrawPhaseType.ViewAll);View Code |
2.5示例截圖
生成的shape檔案,格式如下: