ArcGIS Engine二次開發——計算shapefile面圖層要素的面積
阿新 • • 發佈:2019-02-10
前幾天,有個同事問我怎麼計算面圖層的面積,我也是好久沒做AE的事情了,簡單的查了查,告訴他用IArea介面。到了下午,他的這個問題依舊沒有解決,繼續求助於我。我百度了下,沒有找到相應的文章,於是我意識到這個簡單的事情,可能對於很多接觸AE不深的人,真的是非常難得事情。最難的可能是不知道怎麼做,就像我的同事一樣。我很快就告訴他用IArea介面,他卻驚訝的問我“你怎麼知道的?”,並說他也是查到“似乎是用這個介面”,當然這是第一個層次的,屬於還沒入門,剛剛開始接觸AE,所有的事情基本全都靠搜尋引擎來解決,從網上找到程式碼了問題就解決了,找不到就解決不了。另一個層次的選手是知道要用某個介面,可是就是不知道怎麼用,這種層次的,就算是入門了,但是還不精通,遇到問題不知道如何下手。其實無論什麼層次,全部都應該學會看AE的類圖和幫助,尤其是類圖,在安裝目錄下的Diagram目錄裡,看多了自然就會得心應手。廢話不多說了,下面是我寫的一段試驗程式碼,公佈一下,希望能幫助那些有需求的童鞋,給他們節省點時間。
using System.Runtime; using System.Runtime.InteropServices; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.Geometry; private void Form1_Click(object sender, EventArgs e) { IWorkspaceFactory pWSF = null; double dArea = 0; try { pWSF = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pWS = pWSF.OpenFromFile(@"H:\水體淹沒面積", 0) as IFeatureWorkspace; IFeatureClass pFC = pWS.OpenFeatureClass("水體淹沒面積專題.shp"); IFeatureCursor pFeatureCur = pFC.Search(null, false); IFeature pFeature = pFeatureCur.NextFeature(); while (pFeature != null) { if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon) { IArea pArea = pFeature.Shape as IArea; dArea = dArea + pArea.Area; } pFeature = pFeatureCur.NextFeature(); } Marshal.ReleaseComObject(pFeatureCur); } catch (System.Exception ex) { } Marshal.ReleaseComObject(pWSF); }