PIE SDK內存矢量數據的建立

  

1.功能簡介

    GIS將地理空間數據表示爲矢量數據和柵格數據。矢量數據模型使用點、線和多邊形來表示具備清晰空間位置和邊界的空間要素,如控制點、河流和宗地等,每一個要素被賦予一個ID,以便與其屬性相關聯。柵格數據模型使用一個格網和格網元胞(像元)表明空間要素,元胞值表示該元胞位置的空間要素屬性。柵格數據模型適用於表示連續的要素,如海拔和降水量。ide

      

  [矢量數據模型]                                                        [柵格數據模型]spa

    PIE支持多種矢量數據的建立,下面對矢量數據格式的內存矢量數據建立功能進行介紹。3d

2.功能實現說明

2.1. Shape數據介紹

    Shapefile是由ESRI開發後被普遍應用的數據格式,它採用文件的方式分開存儲數據的控件信息和屬性信息,但其不能存儲拓撲關係,具備簡單、快速顯示的優勢。一個Shape數據的文件結構以下所示:code

 

[Shape數據文件結構]視頻

編號blog

後綴教程

文件說明索引

1接口

.shpip

基本文件,存儲地理要素的幾何圖形信息;

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. 示例截圖

相關文章
相關標籤/搜索