天天看點

ArcGIS Engine二次開發——計算shapefile面圖層要素的面積

前幾天,有個同僚問我怎麼計算面圖層的面積,我也是好久沒做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);
        }