AE開發實例代碼總結_第1頁
AE開發實例代碼總結_第2頁
AE開發實例代碼總結_第3頁
AE開發實例代碼總結_第4頁
AE開發實例代碼總結_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1、AE開發技術文檔一、數據加載問題1、加載個人數據庫個人數據庫是保存在Access中的數據庫。加載方式有兩種:通過名字和通過屬性加載(也許不只是這兩種,AE中實現同一功能可以有多種方式)A、通過設置屬性加載個人數據庫首先通過IPropertySet接口 定義要連接數據庫的一些相關屬性,在個人數據庫中為數據庫的路徑,例如:IPropertySet Propset= new PropertySetClass(); Propset.SetProperty(“DATABASE”,”D:testAodatashMapdata.mdb”);當定義完屬性并設置屬性后就可以進行打開數據庫的操作了,在ArcE

2、ngine開發中存在IWorkspaceFactory 、IFeatureWorkspace 、IFeatureClass 、IFeatureLayer等幾個常用的用于打開和操作數據空間地物的接口。IWorkspaceFactory 是一個用于創建和打開工作空間的接口,它是一個抽象的接口,我們在具體應用時要用對應的工作空間實例化它,如下: IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass (); 如果我們打開的是SDE 數據庫就要用 SdeWorkspaceFactoryClass 實例化Fact。當我們完成了工作空間的實例化后就

3、可以根據上邊設置的屬性打開對應的Access 數據庫了。打開方式如下: IFeatureWorkspace Workspace = Fact.Open( Propset,0) as IFeatureWorkspace; 打開Access 工作空間后接下來的事情是做什么了,很簡單,找到對應的地物類,賦給相應的層,通過MapControl 控件添加對應的層,然后刷新地圖。以下為添加某一層的代碼: IFeatureClass Fcls = Workspace.OpenFeatureClass("District");/找到對應的地物類 IFeatureLayer Fly = ne

4、w FeatureLayerClass();/建立新圖層 Fly.FeatureClass = Fcls; /將地物賦給相應的層MapCtr.Map.AddLayer (Fly);/添加層 MapCtr.ActiveView.Refresh();/刷新地圖 其中District 為地物類的名字,MapCtr 為AE中MapControl 的對象。上邊的通過屬性設置加載數據空間的方式還可以用于SDE 數據庫,在SDE 數據庫加載時會介紹。以下為通過設置屬性加載Access 數據庫的完整C#代碼:public void AddAccessDBByPro() IPropertySet Propset

5、 = new PropertySetClass(); Propset.SetProperty("DATABASE","D:testAodatashMapData.mdb" ); IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass (); IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace; IFeatureClass Fcls = Workspace.OpenFeatureClass ("Di

6、strict"); IFeatureLayer Fly = new FeatureLayerClass(); Fly.FeatureClass = Fcls; MapCtr.Map.AddLayer(Fly); MapCtr.ActiveView.Refresh(); B、通過數據庫名字加載個人數據庫public void AddAccessDBByName()IworkspaceName pWorkspaceName = new WorkspaceNameClass();pWorkspaceName.WorkspaceFactoryProgID= “esriDataSourcesG

7、DB.AccessWorkspaceFactory”;pWorkspaceName.PathName =“D:testAodatashMapData.mdb”;IName n=pWorkspaceName as IName;IFeatureWorkspace Workspace= n.Open() as IFeatureWorkspace;IFeatureClass Fcls = Workspace.OpenFeatureClass ("District"); IFeatureLayer Fly = new FeatureLayerClass(); Fly.FeatureC

8、lass = Fcls; MapCtr.Map.AddLayer(Fly); MapCtr.ActiveView.Refresh(); 首先創建一個個人數據庫工作空間名,再指定工作空間名的ProgID,以確定打開的是什么類型的工作空間,例如在打開Access個人數據庫時,使用下面代碼;IworkspaceName pWorkspaceName = new WorkspaceNameClass();pWorkspaceName.WorkspaceFactoryProgID= “esriDataSourcesGDB.AccessWorkspaceFactory”;pWorkspaceName.Pa

9、thName =“D:testAodatashMapData.mdb”;屬性WorkspaceFactoryProgID可以確保工作空間是AccessWorkspaceFactory,即個人數據庫,同時要指定打開數據庫路徑。為了打開數據庫,打開工作空間必須使用IName接口(思考有沒有其他辦法),所以接著定義IName、對象,并把工作空間名轉換成IName類型,并賦值給IName對象,然后通過IName對象的open方法打開相應的工作空間,代碼如下:IName n=pWorkspaceName as IName;IFeatureWorkspace Workspace= n.Open() as

10、IFeatureWorkspace;2、AE開發編輯功能數據編輯問題1. 需要了解的概念長事務 短事務 編輯空間 抽象類,類,和組件對象類2、最基本的添加點線面功能添加點(方法有多種,基本思路一樣,只是少量的接口有變化)通過FeatureClass的CreatFeature函數來添加地物。public void AddPointByStore()/得到要添加地物的圖層IFeatureLayer l=MapCtr.Map.get_Layer(0) as IFeatureLayer;/定義一個地物類,把要編輯的圖層轉化為定義的地物類IFeatureClass fc= l.FeatureClass;

11、/先定義一個編輯的工作空間,然后把它轉化為數據集,最后轉化為編輯工作空間,IWorkspaceEdit w=(fc as IDataset).Workspace as IWorkspaceEdit;IFeature f;IPoint p;/開始事務操作w.StartEditing(false); /?/開始編輯w.StartEditOperation();for(int i=0;i<100;i+)/創建一個地物f=fc.CreateFeature();p=new PointClass();/設置點的坐標p.PutCoord(i,i);/確定圖形類型f.Shape=p;/保存地物f.Sto

12、re()/結束編輯w.StopEditOperation();/結束事務操作w.StopEditing(true);二、添加線方法跟添加點一樣,不同的只是地物類型不一樣而已,AE中各類庫的介紹1、 問題一:什么是UI組件?2、 類庫介紹空間拓撲運算1、高級幾何對象:點(point)、多點(multipoint)、線(polyline)、面(polygon)、multipatch等。(multipatch:多片,三維地形圖中的地圖符號包括點狀符號、線狀符號、面狀符號、體狀符號以及多片(MultiPatch)符號等)2、拓撲:空間拓撲描述的事自然界地理對象的空間位置關系,即相鄰、重合、連通等。是在

13、同一個要素集下的要素類之間的關系的集合,所以要參與一個拓撲的所有要素類,必須在同一個要素集內(也就是具有同一個空間參考),這樣進行的拓撲檢查才是精確的。3、一個要素集可以有多個拓撲,但每個要素類最多只能參與一個拓撲,一個拓撲中可以定義多個規則,是地理對象空間屬性的一部分,在目前ESRI提供的數據存儲方式中,Coverage和GeoDatabase能夠建立拓撲,而Shape格式的數據不能建立拓撲。4、 esriTRTAny 任何拓撲規則,查詢拓撲的時候用(ESRI提供的拓撲關系)5、AE中提供了ITopologicalOperator接口用于拓撲運算,ITopologicalOperator接口

14、用來通過對已存在的幾何對象做空間拓撲運算,以產生新的集合對象。ITopologicalOperator接口在GIS開發中的使用非常廣泛,通常GIS系統中的緩沖區分析、裁剪幾何圖形、幾何圖形差分操作、幾何圖形合并操作等都需要此接口。Boundary 方法用于幾何圖形對象的邊界。Polygon的幾何對象的Boundary是組成它的Polyline幾何對象,Polyline幾何對象的Boundary是組成它的頂點Point幾何對象,而Point的幾何對象的Boundary是空對象。Buffer 用于集合對象緩沖區分析拓撲操作,該方法用于給一個高級幾何對象產生一個緩沖區,無論是Polygon、Poly

15、line、還是Point,他們的緩沖區都是具有面積的幾何對象。Clip 用于對幾何對象進行裁剪空間拓撲操作。Clip方法可用一個Envelope對象對一個幾何對象進行裁剪,結果是幾何對象被Envelope對象所包圍的部分。ConstructUion用于將多個枚舉對象與單個幾何對象合并為單個幾何對象。ConvexHull 用于構建幾何對象的凸多邊形。ConvexHull方法用于產生一個幾何圖形的最小的邊框凸多邊形(沒有凹面包含幾何圖形的最小多邊形)Cut 用于切割幾何對象,不支持GeometryBags幾何對象,它可以指定一條切割曲線和一個幾何圖形,經過切割運算后把幾何圖形分為左右兩部分,左右兩

16、部分是相對曲線的方向而言的。點與多點不可被分割。Polyline和Polygon只有與切割曲線相交時才能執行Cut方法。Difference 用于從一個幾何圖形中減去其與另一個圖形相交的部分,產生兩個幾何對象的差集。Intersection方法用于兩個同緯度幾何對象的交集部分。Simplify用于使幾何對象拓撲一致。SymmetricDifference對稱差分可將兩個幾何圖形的并集部分減去兩個幾何圖形交集的部分。開發實例一、 鷹眼功能的實現:分析:鷹眼圖的操作主要由以下幾個動作,當在一個控件中移動一幅圖的時候另一控件中的圖也發生變化,當在主控件中重新加載一幅圖的時候,另外一個控件的圖也發生相

17、應的變化,同時我們在鳥瞰的控件中加入一紅色邊框,注意這個其實是一個面,只是填充的顏色是透明的而已。通過分析我們知道,我們要添加兩個MapControl控件,名字分別是axMapControl1和axMapControl2,其中axMapControl1為主圖,而axMapControl2為鳥瞰圖。方法:步驟一:對于名稱為axMapControl1的MapControl控件,只需要在axMapControl1的OnExtentUpdated和OnMapReplaced中分別添加以下代碼:private void axMapControl1_OnExtentUpdated(object sende

18、r, IMapControlEvents2_OnExtentUpdatedEvent e) / 得到新范圍 IEnvelope pEnvelope = (IEnvelope)e.newEnvelope; IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer; IActiveView pActiveView = pGraphicsContainer as IActiveView; /在繪制前,清除axMapControl2中的任何圖形元素 pGraphicsContainer.DeleteA

19、llElements(); IRectangleElement pRectangleEle = new RectangleElementClass(); IElement pElement = pRectangleEle as IElement; pElement.Geometry = pEnvelope; /設置鷹眼圖中的紅線框 IRgbColor pColor = new RgbColorClass(); pColor.Red = 255; pColor.Green = 0; pColor.Blue = 0; pColor.Transparency = 255; /產生一個線符號對象 IL

20、ineSymbol pOutline = new SimpleLineSymbolClass(); pOutline.Width = 3;的屬性 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pColor; pFillSymbol.Outline = pOutline; IFillShapeElement pFillShapeEle = pElement as IFillShapeElement; pFillShapeEle.Symbol = pFillSymbol; pGraphicsCo

21、ntainer.AddElement(IElement)pFillShapeEle, 0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e) if (axMapControl1.LayerCount > 0) axMapControl2.Map = new MapClass();for (int

22、 i = 0; i <= axMapControl1.Map.LayerCount - 1; i+) axMapControl2.AddLayer(axMapControl1.get_Layer(i); axMapControl2.Extent = axMapControl1.Extent; axMapControl2.Refresh(); 步驟二:對于名稱為axMapControl2的MapControl控件,只需要在axMapControl2的OnMouseMove和OnMouseDown中分別添加以下代碼:private void axMapControl2_OnMouseMove

23、(object sender, IMapControlEvents2_OnMouseMoveEvent e) if (e.button = 1) IPoint pPoint = new PointClass(); pPoint.PutCoords(e.mapX, e.mapY); axMapControl1.CenterAt(pPoint); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); private void axMapControl2_OnMouseDow

24、n(object sender, IMapControlEvents2_OnMouseDownEvent e) if (axMapControl2.Map.LayerCount > 0) if (e.button = 1) IPoint pPoint = new PointClass();pPoint.PutCoords(e.mapX, e.mapY); axMapControl1.CenterAt(pPoint); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, nul

25、l); else if (e.button = 2) IEnvelope pEnv = axMapControl2.TrackRectangle(); axMapControl1.Extent = pEnv; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); 二、 顯示屬性表的信息我們知道ArcMap中的Table of Contents有很多功能,如下圖:而ArcGIS Engine提供的TOCControl控件幾乎沒有提供,那么這些都是需要自己開發的,在這里我做

26、一個顯示屬性表的功能。分析:要顯示某一個圖層的屬性表,首先要將這個圖層選中,然后在另外一個Form中將選中的這個圖層的屬性信息進行顯示。方法:添加一個上下文菜單,添加一個新的Form窗體,在這個新的窗體上添加GridView控件,并在TOCControl控件的OnMouseDown事件下添加如下代碼(pGlobalFeatureLayer是我定義的一個全局變量):private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e) if (

27、axMapControl1.LayerCount > 0) esriTOCControlItem pItem = new esriTOCControlItem(); pGlobalFeatureLayer = new FeatureLayerClass(); IBasicMap pBasicMap = new MapClass(); object pOther = new object();object pIndex = new object(); axTOCControl1.HitTest(e.x, e.y, ref pItem, ref pBasicMap, ref pGlobalF

28、eatureLayer, ref pOther, ref pIndex); if (e.button = 2) context.Show(axTOCControl1, e.x, e.y); 在上下文菜單的打開屬性表的Click事件中添加如下代碼: private void 打開屬性表ToolStripMenuItem_Click(object sender, EventArgs e) FormTable Ft = new FormTable(pGlobalFeatureLayer as IFeatureLayer); Ft.Show(); 在新的窗體中添加一個將屬性表顯示到GridView控件

29、中的函數,如下: public void Itable2Dtable() IFields pFields; pFields = pFeatureLayer.FeatureClass.Fields; dtGridView.ColumnCount = pFields.FieldCount; for (int i = 0; i < pFields.FieldCount;i+ ) string fldName = pFields.get_Field(i).Name; dtGridView.Columnsi.Name = fldName; dtGridView.Columnsi.ValueType

30、 = System.Type.GetType(ParseFieldType(pFields.get_Field(i).Type); IFeatureCursor pFeatureCursor;pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false); IFeature pFeature; pFeature = pFeatureCursor.NextFeature(); while (pFeature != null) string fldValue = new stringpFields.FieldCount; for (i

31、nt i = 0; i < pFields.FieldCount; i+) string fldName; fldName = pFields.get_Field(i).Name; if (fldName=pFeatureLayer .FeatureClass .ShapeFieldName) fldValuei = Convert.ToString(pFeature.Shape.GeometryType); else fldValuei = Convert.ToString(pFeature.get_Value(i); dtGridView.Rows.Add(fldValue); pF

32、eature = pFeatureCursor.NextFeature(); 數據庫知識:DB2、Informix、PostgreSQL數據庫打開方式以及方法:1、 打開個人數據庫:public IWorkspace GetMDBWorkspace(String _pGDBName) IWorkspaceFactory pWsFac = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFac.OpenFromFile(_pGDBName,0);return pWs; 2、 打開文件數據庫:public IWorkspace GetF

33、GDBWorkspace(String _pGDBName) IWorkspaceFactory pWsFac = new FileGDBWorkspaceFactoryClass(); IWorkspace pWs = pWsFac.OpenFromFile(_pGDBName, 0); return pWs; 3、 打開SDE數據庫:打開SDE數據庫我們使用的是Open方法,要用這個方法,我們就要對IPropertySet對象設置,要打開SDE數據庫,我們要獲取SDE數據庫的服務器地址,數據庫實例,數據庫,用戶,密碼等參數。而IPropertySet就好比一個Key-Value的對象,用來

34、幫組我們設置這些,然后傳到Open方法中。public IWorkspace GetSDEWorkspace(String _pServerIP, String _pInstance, String _pUser, String _pPassword, String _pDatabase, String _pVersion) ESRI.ArcGIS.esriSystem.IPropertySet pPropertySet = new ESRI.ArcGIS.esriSystem.PropertySetClass(); pPropertySet.SetProperty("SERVER&

35、quot;, _pServerIP); pPropertySet.SetProperty("INSTANCE", _pInstance); pPropertySet.SetProperty("DATABASE", _pDatabase); pPropertySet.SetProperty("USER", _pUser); pPropertySet.SetProperty("PASSWORD", _pPassword); pPropertySet.SetProperty("VERSION", _p

36、Version); ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2 workspaceFactory; workspaceFactory = (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory2)new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); return workspaceFactory.Open(pPropertySet, 0); 注意,打開SDE數據庫需要用到ArcGIS Engine運行時的企業級許可。(即此時的License需要特別設置ArcE

37、ngine的Lisence應使用企業數據庫類型,在From1_Load事件中初始化lisence,不能使用lisence控件設置,否則提示沒有許可lisence。)具體的解決代碼如下:private void From1_Load(object sender,EventArg e)IAoInitialize pao=new AoInitializeClass();pao.Initialize(esriLisenceProductCode.esriLisenceProductCodeEngineGeoDB);4.4.2 獲取數據庫中的要素類 在ArcGIS Engine中,要得到某一個類,首要要

38、獲取工作空間,然后進入工作空間再得到相應的東西,也就是以下兩個步驟: l 獲取工作空間; l 獲取相應的要素類。 我們定義一個函數用來獲取個人數據庫的路徑public string WsPath() string WsFileName="" OpenFileDialog OpenFile = new OpenFileDialog(); OpenFile.Filter = "個人數據庫(MDB)|*.mdb" DialogResult DialogR = OpenFile.ShowDialog(); if (DialogR = DialogResult.C

39、ancel) else WsFileName = OpenFile.FileName; return WsFileName; 要獲取要素類,首先獲取工作空間,然后對工作空間中的要素類進行遍歷,代碼如下: private void button2_Click(object sender, EventArgs e) string WsName = WsPath(); if (WsName != "") IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenF

40、romFile(WsName, 0); IEnumDataset pEDataset =pWs.get_Datasets(esriDatasetType.esriDTAny);IDataset pDataset = pEDataset.Next(); while (pDataset != null) if (pDataset.Type =esriDatasetType.esriDTFeatureClass) FeatureClassBox.Items.Add(pDataset.Name); /如果是數據集 else if (pDataset.Type = esriDatasetType.esr

41、iDTFeatureDataset) IEnumDataset pESubDataset = pDataset.Subsets; IDataset pSubDataset = pESubDataset.Next(); while (pSubDataset != null) FeatureClassBox.Items.Add(pSubDataset.Name);/ -這是從哪里來的?-pSubDataset = pESubDataset.Next(); pDataset = pEDataset.Next(); FeatureClassBox.Text = FeatureClassBox.Item

42、s0.ToString(); 判斷要素是否被編輯:ArcGIS Engine 提供了一個IDatasetEdit的接口用來判斷我們的數據是否處于編輯狀態,該接口只有一個方法,如下:示例代碼如下:public bool ISEdit (IFeatureClass pFeatureClass) IDatasetEdit pDataEdit = pFeatureClass as IDatasetEdit; return pDataEdit.IsBeingEdited(); 如何刪除要素類:IFeatureWorkspace這個接口主要是用于管理基于矢量數據的,如表,要素類,要素數據集等。要想刪除一個

43、要素類,那么必須先得到這個。,如要打開一個名稱為PointTest的要素類,只需要在OpenFeatureClass中傳入這個要素類的名稱,代碼如下: IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs = pWsFt.OpenFromFile(WsName, 0); IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; IFeatureClass pFClass = pFWs.OpenFeatureClass("PointTest&qu

44、ot;);如果是在ArcMap中,我們會切換到Catalog中然后進入相應的數據庫,然后刪除相應的要素類,這種操作會讓我們想到FeatureClas這個對象會提供刪除的方法,其實不然,這個刪除的方法是定義在Dataset這個對象中。 private void button1_Click(object sender, EventArgs e) string WsName = WsPath(); if( WsName !="") IWorkspaceFactory pWsFt = new AccessWorkspaceFactoryClass(); IWorkspace pWs

45、 = pWsFt.OpenFromFile(WsName, 0); IFeatureWorkspace pFWs = pWs as IFeatureWorkspace; IFeatureClass pFClass = pFWs.OpenFeatureClass("PointTest");IDataset pDatset = pFClass as IDataset; pDatset.Delete(); 刪除前:刪除后:創建要素類創建要素類用到了IFeatureWorkspace.CreateFeatureClass方法。所需接口:IField,IFieldEdit,IFiel

46、ds,IFieldsEdit,IGeometryDef,IGeometryDefEdit接口(注意 在NET中,會遇到以“_2”結尾的屬性,這些屬性是可寫的。)/定義一個幾何字段,類型為點類型 ISpatialReference pSpatialReference = axMapControl1.ActiveView.FocusMap.SpatialReference; IGeometryDefEdit pGeoDef = new GeometryDefClass(); IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit; pG

47、eoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; pGeoDefEdit.SpatialReference_2 = pSpatialReference;/定義一個字段集合對象 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; /定義單個的字段 IField pField = new FieldClass(); IFieldEdit pFieldEdit = (IFieldEdit)pField; pF

48、ieldEdit.Name_2 = "SHAPE" pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldsEdit.AddField(pField); pFieldEdit.GeometryDef_2 = pGeoDef; /定義單個的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "STCD" pFieldEdit.Type_2 = esriF

49、ieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); /定義單個的字段,并添加到字段集合中pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SLM10" pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); /定義單個的字段,并添加到字段集合中 pField = new FieldCl

50、ass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SLM20" pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); /定義單個的字段,并添加到字段集合中 pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "SLM40" pFieldEdit.Type_2 =

51、esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(pField); IWorkspaceFactory pFtWsFct = new AccessWorkspaceFactory();IFeatureWorkspace pWs = pFtWsFct.OpenFromFile("E:arcgisEngines.mdb", 0) as IFeatureWorkspace;IFeatureClass pFtClass = pWs.CreateFeatureClass("Test", pFields,

52、 null, null, esriFeatureType.esriFTSimple, "SHAPE", null)/?如何改變字段的別名?public void ChangeFieldAliasName(ITable pTable, string pOriFieldName, string pDesFieldName) IClassSchemaEdit pClassSchemaEdit = (IClassSchemaEdit)pTable; /給對象加上鎖 ISchemaLock pSchemaLock = (ISchemaLock)pTable; pSchemaLock.

53、ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock); if (pTable.FindField(pOriFieldName) != -1) pClassSchemaEdit.AlterFieldAliasName(pOriFieldName, pDesFieldName); pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);使用IFeatureSelection接口高亮顯示在介紹IMap接口那一節,我們用IMap的IMap.SelectFeature方

54、法實現了對查詢的要素高亮顯示,現在我們用IFeatureSelection接口實現查詢高亮顯示IMap pMap = axMapControl1.Map; IFeatureLayer pFeaturelayer = GetLayer(pMap, "Roads") as IFeatureLayer; IFeatureSelection pFeatureSelection = pFeaturelayer as IFeatureSelection; IQueryFilter pQuery = new QueryFilterClass(); pQuery.WhereClause =

55、 "TYPE=" +"'paved'" pFeatureSelection.SelectFeatures(pQuery,esriSelectionResultEnum.esriSelectionResultNew,false); axMapControl1.ActiveView.Refresh();其中GetLayer函數是我們寫的一個根據圖層的名稱獲取圖層的方法,代碼如下private ILayer GetLayer(IMap pMap, string LayerName) IEnumLayer pEnunLayer; pEnunLay

56、er = pMap.get_Layers(null, false); pEnunLayer.Reset(); ILayer pRetureLayer; pRetureLayer = pEnunLayer.Next(); while (pRetureLayer != null) if (pRetureLayer.Name = LayerName) break; pRetureLayer = pEnunLayer.Next(); return pRetureLayer; 提問:以下三種方式的區別在哪里?axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);axMapControl1.ActiveView.Refresh();axMapControl1.Refresh();創建符合要求的表:public ITable CreateT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論