1. 程式人生 > >ArcEngine讀取shp檔案屬性表

ArcEngine讀取shp檔案屬性表

開發環境:VS2013 + ArcEngine 10.4

        /// <summary>
        /// 獲取要素類
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private static IFeatureClass GetFeatureClass(string filePath)
        {
            IWorkspaceFactory pWorkspaceFactory = new
ShapefileWorkspaceFactory(); IWorkspaceFactoryLockControl pWorkspaceFactoryLockControl = pWorkspaceFactory as IWorkspaceFactoryLockControl; if (pWorkspaceFactoryLockControl.SchemaLockingEnabled) { pWorkspaceFactoryLockControl.DisableSchemaLocking(); } IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0
); IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileName(filePath)); return pFeatureClass; } /// <summary> /// 獲取要素屬性表 /// </summary>
/// <param name="pFeatureClass"></param> /// <returns></returns> private static DataTable GetAttributesTable(IFeatureClass pFeatureClass) { string geometryType = string.Empty; if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPoint) { geometryType = "點"; } if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryMultipoint) { geometryType = "點集"; } if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline) { geometryType = "折線"; } if (pFeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon) { geometryType = "面"; } // 欄位集合 IFields pFields = pFeatureClass.Fields; int fieldsCount = pFields.FieldCount; // 寫入欄位名 DataTable dataTable = new DataTable(); for (int i = 0; i < fieldsCount; i++) { dataTable.Columns.Add(pFields.get_Field(i).Name); } // 要素遊標 IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, true); IFeature pFeature = pFeatureCursor.NextFeature(); if (pFeature == null) { return dataTable; } // 獲取MZ值 IMAware pMAware = pFeature.Shape as IMAware; IZAware pZAware = pFeature.Shape as IZAware; if (pMAware.MAware) { geometryType += " M"; } if (pZAware.ZAware) { geometryType += "Z"; } // 寫入欄位值 while (pFeature != null) { DataRow dataRow = dataTable.NewRow(); for (int i = 0; i < fieldsCount; i++) { if (pFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry) { dataRow[i] = geometryType; } else { dataRow[i] = pFeature.get_Value(i).ToString(); } } dataTable.Rows.Add(dataRow); pFeature = pFeatureCursor.NextFeature(); } // 釋放遊標 System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor); return dataTable; } /// <summary> /// 讀取 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnShowTable_Click(object sender, EventArgs e) { IFeatureClass pFeatureClass = GetFeatureClass(@"C:\Users\DSF\Desktop\data\CHN_adm3.shp"); DataTable dataTable = GetAttributesTable(pFeatureClass); dgvAttributesTable.DataSource = dataTable; }

執行結果:
這裡寫圖片描述