1. 程式人生 > >PIE SDK內存矢量數據的創建

PIE SDK內存矢量數據的創建

http 關聯 ati reference 原理 創建 style name alias

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內存矢量數據的創建