信息提取和解譯的過程當中,常常會生成一部分中間臨時矢量數據,這些數據在執行完對應操做後就失去了存在的價值,針對這種狀況,PIE增長了內存矢量數據集,來協助用戶完成對自定義矢量數據的讀取和顯示。ide
下面以Micaps1類數據爲例介紹自定義矢量數據的構建和顯示。函數
第一步spa |
構建數據的字段、空間參考等信息;code |
第二步視頻 |
根據字段和空間參考信息建立內存矢量數據集;blog |
第三步教程 |
在內存矢量數據集中逐條添加數據記錄(包括幾何圖形和屬性);接口 |
第四步內存 |
經過內存數據集建立矢量圖層;ci |
第五步 |
添加第四步中的圖層到地圖,並刷新; |
接口/類 |
方法 |
說明 |
IField |
構造函數 |
構造字段 |
IFields |
AddField () |
添加字段 |
DatasetFactory |
CreateFeatureDataset |
建立數據集 |
IFeatureDataset |
CreateNewFeature() |
建立要素 |
AddFeature() |
添加要素 |
|
IFeature |
SetValue() |
屬性賦值 |
項目名稱 |
百度雲盤地址下/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 } |