1. 程式人生 > >PIE SDK向量資料的建立

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檔案,格式如下: