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