PIE SDK打開自定義矢量數據

 

1. 數據介紹

    信息提取和解譯的過程當中,常常會生成一部分中間臨時矢量數據,這些數據在執行完對應操做後就失去了存在的價值,針對這種狀況,PIE增長了內存矢量數據集,來協助用戶完成對自定義矢量數據的讀取和顯示。ide

    下面以Micaps1類數據爲例介紹自定義矢量數據的構建和顯示。函數

2. 實現思路及原理說明

第一步spa

構建數據的字段、空間參考等信息;code

第二步視頻

根據字段和空間參考信息建立內存矢量數據集;blog

第三步教程

在內存矢量數據集中逐條添加數據記錄(包括幾何圖形和屬性);接口

第四步內存

經過內存數據集建立矢量圖層;ci

第五步

添加第四步中的圖層到地圖,並刷新;

3. 核心接口與方法

接口/類

方法

說明

IField

構造函數

構造字段

IFields

AddField ()

添加字段

DatasetFactory

CreateFeatureDataset

建立數據集

IFeatureDataset

CreateNewFeature()

建立要素

AddFeature()

添加要素

IFeature

SetValue()

屬性賦值

4. 示例代碼

項目名稱

百度雲盤地址下/PIE示例程序/03.數據加載/10.打開自定義矢量數據

數據位置

百度雲盤地址下/PIE示例數據/矢量數據/Micaps/micaps1下數據

視頻位置

百度雲盤地址下/PIE視頻教程/03.數據加載/10.打開自定義矢量數據.avi

示例代碼

 1 方法(一)打開自定義矢量數據
 2 //以解析Micaps1數據爲例
 3     OpenFileDialog openFileDialog = new OpenFileDialog();
 4     openFileDialog.Filter = "Micaps文件(*.000)|*.000";
 5     if (openFileDialog.ShowDialog() == DialogResult.OK)
 6     {
 7         IFeatureLayer defineLayer = OpenDefineShp(openFileDialog.FileName);
 8         if (defineLayer != null)
 9         {
10 (defineLayer as ILayer).Name = "自定義矢量圖層";
11             mapControlMain.FocusMap.AddLayer(defineLayer as ILayer);
12             mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
13         }
14 }
15 /// <summary>
16 /// 解析自定義數據,生成矢量
17 /// 以解析Micaps1數據爲例,字段只添加站號、經度、緯度、海拔高度
18 /// </summary>
19 /// <param name="filePath">輸出SHP文件路徑</param>
20 /// <returns></returns>
21   private IFeatureLayer OpenDefineShp(string filePath)
22 {
23     IFeatureLayer featureLayer = null;
24     int count = 0;//記錄讀取數據的行數
25 string[] lineValues = null;//每一行的數據值
26     //字段聲明
27         IField field_id = new Field("PointID", FieldType.OFTInteger, 20, 4);
28         field_id.AliasName = "站號";
29 
30         IField field_x = new Field("lon", FieldType.OFTInteger, 20, 4);
31         field_x.AliasName = "經度";
32 
33         IField field_y = new Field("lat", FieldType.OFTInteger, 20, 4);
34         field_y.AliasName = "緯度";
35 
36         IField field_h = new Field("height", FieldType.OFTInteger, 20, 4);
37         field_h.AliasName = "海拔高度";
38 
39         IFields fields = new Fields();
40         fields.AddField(field_id);
41         fields.AddField(field_x);
42         fields.AddField(field_y);
43         fields.AddField(field_h);
44         //創建內存數據集
45         IFeatureDataset pDataset = PIE.DataSource.DatasetFactory.CreateFeatureDataset("", fields, GeometryType.GeometryPoint, null, "MEM");
46         //解析數據文件,寫入數據集中
47         string[] valueLines = System.IO.File.ReadAllLines(filePath);
48         char[] charSeperate = { ' ' };
49         for (int j = 0; j < valueLines.Length; j++)
50         {
51             string str = valueLines[j];
52             if (count == 0 || count == 1)
53             {
54                 count = count + 1;
55                 continue;
56             }
57             //解析字符串,生成Feature
58             IFeature newFeature = pDataset.CreateNewFeature();
59             lineValues = str.Split(charSeperate, StringSplitOptions.RemoveEmptyEntries);
60             //字段賦值
61             newFeature.SetValue(0, Convert.ToInt32(lineValues[0]));
62             newFeature.SetValue(1, Convert.ToDouble(lineValues[1]));
63             newFeature.SetValue(2, Convert.ToDouble(lineValues[2]));
64             newFeature.SetValue(3, Convert.ToDouble(lineValues[3]));
65 
66             //生成Geometry
67             IPoint point = new PIE.Geometry.Point();
68             point.PutCoords(Convert.ToDouble(lineValues[1]), Convert.ToDouble(lineValues[2]));
69             newFeature.Geometry = point as IGeometry;
70             pDataset.AddFeature(newFeature);
71             count = count + 1;
72       (newFeature as IDisposable).Dispose();
73         }
74         featureLayer = PIE.Carto.LayerFactory.CreateDefaultFeatureLayer(pDataset);   
75     return featureLayer;
76 }
View Code

5. 示例截圖

 

相關文章
相關標籤/搜索