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) |
創建空間參考 |
IFeatureDataset |
CreateNewFeature() |
創建新要素 |
IField |
Name,AliasName,DefaultValue |
字段屬性 |
IFields |
AddField(IField ptrField) |
添加字段 |
IFeature |
SetValue(int nIndex, object field) |
設置字段值 |
IFeatureClass |
AddFeature(IFeature ptrFeature) |
添加要素 |
2.4示例代碼
項目路徑 |
百度雲盤地址下/PIE示例程序/04數據操作/02.內存矢量數據的創建 |
數據路徑 |
|
視頻路徑 |
百度雲盤地址下/PIE示例程序/04數據操作/02.內存矢量數據的創建.avi |
示例代碼 |
|
1 /// <summary> 2 /// 創建內存矢量數據 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton_CreateMemShpData_Click(object sender, EventArgs e) 7 { //1設置字段 8 IField field1 = new Field("Name", FieldType.OFTString, 50, 1); 9 field1.Name = "Name"; 10 field1.AliasName = "名稱"; 11 12 IField field2 = new Field("Level", FieldType.OFTInteger, 50, 1); 13 field2.Name = "Level"; 14 field2.AliasName = "級別"; 15 16 //2添加字段 17 IFields fields = new Fields(); 18 fields.AddField(field1); 19 fields.AddField(field2); 20 21 //3創建空間參考信息 22 ISpatialReference spatialReference = SpatialReferenceFactory.CreateSpatialReference((int)PIE.Geometry.GeoCSType.GeoCSType_WGS1984); 23 //4創建矢量要素集 24 IFeatureDataset newFeatureDataset = DatasetFactory.CreateFeatureDataset("", fields, GeometryType.GeometryPoint, spatialReference, "MEM"); 25 26 #region 5添加point 信息 27 //A POINT 28 IFeature feature = newFeatureDataset.CreateNewFeature(); 29 IPoint point = new PIE.Geometry.Point(); 30 point.PutCoords(90, 45); 31 feature.Geometry = point as IGeometry; 32 33 feature.FID = 02; 34 feature.SetValue(0, "A"); 35 feature.SetValue(1, 2); 36 37 //B POINT 38 IFeature feature2 = newFeatureDataset.CreateNewFeature(); 39 IPoint point2 = new PIE.Geometry.Point(); 40 point2.PutCoords(93, 40); 41 feature2.Geometry = point2 as IGeometry; 42 43 feature2.FID = 01; 44 feature2.SetValue(0, "B"); 45 feature2.SetValue(1, 3); 46 #endregion 47 48 newFeatureDataset.Name = "LayerA";//設置圖層的名稱 49 //第一種方法 50 //IFeatureLayer featureLayer = LayerFactory.CreateDefaultFeatureLayer(newFeatureDataset); 51 //第二種方法 52 IFeatureLayer featureLayer = new FeatureLayer(); 53 // IFeatureClass fClass = new FeatureClass(newFeatureDataset); 54 featureLayer.FeatureClass = new FeatureClass(newFeatureDataset); 55 featureLayer.FeatureClass.AddFeature(feature); 56 featureLayer.FeatureClass.AddFeature(feature2); 57 58 mapControlMain.FocusMap.AddLayer(featureLayer as ILayer); mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll); 59 }View Code |
2.5示例截圖
PIE SDK內存矢量數據的創建