版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、牟乃夏牟乃夏 ArcGIS Engine ArcGIS Engine 地理信地理信息系統(tǒng)開發(fā)教程息系統(tǒng)開發(fā)教程配套配套PPT-PPT-第6章 空間數(shù)據(jù)編輯目錄 1. 簡介 2. 編輯對象 3. 開始編輯 4. 設置編輯圖層 5. 設置編輯任務 6. 編輯操作 7. 節(jié)點編輯 8. 屬性編輯 9. 保存編輯 10. 結束編輯1.簡介 空間數(shù)據(jù)編輯是指產(chǎn)生新的矢量數(shù)據(jù)或對已有的矢量空間數(shù)據(jù)進行的再加工,包括矢量數(shù)據(jù)的生產(chǎn)、加工、維護、錯誤修正等,這是空間數(shù)據(jù)維護與加工的基本環(huán)節(jié),也是基于ArcGIS Engine開發(fā)的GIS系統(tǒng)的基本功能。 空間數(shù)據(jù)的編輯包括矢量圖形編輯和屬性數(shù)據(jù)的編輯兩部分。
2、空間數(shù)據(jù)的編輯操作是針對工作空間下的數(shù)據(jù)工作空間下的數(shù)據(jù)進行的,如:ShapefileWorkspaces工作空間、AccessWorkspace工作空間、FileGDBWorkspace工作空間等。1.簡介 本章以編輯FileGDBWorkspace為例介紹空間數(shù)據(jù)的編輯(當然,也支持對ShapefileWorkspaces工作空間、AccessWorkspace工作空間等數(shù)據(jù)的編輯操作)。 實例程序實現(xiàn)思路調用IEngineEditor接口的StartEditing方法打開一個編輯對象,并設定相關參數(shù);將設定好參數(shù)的IEngineEditor接口跳轉到IEngineEditLayers接口
3、,利用該接口的SetTargetLayer方法來設置一個目標圖層;通過IEngineEditTask對象設定編輯任務,并將其傳遞給當前的EngineEditor對象的CurrentTask屬性;實現(xiàn)所要執(zhí)行的編輯操作;在編輯對象過程中,使用IEngineEditor接口的StopEditing方法,并輸入?yún)?shù)“true”結束編輯任務并保存(或者直接調用ControlsEditingSaveCommand方法進行保存,本章使用前者);停止編輯。1.簡介 代碼說明 在ArcGIS Engine的編程過程中,數(shù)據(jù)編輯部分的代碼較為復雜。一般的,ArcGIS Engine實現(xiàn)空間數(shù)據(jù)編輯的方法有兩種:
4、一種是直接調用ArcGIS Engine封裝的工具,另一種是根據(jù)操作過程逐步編寫代碼。 本章實例的程序架構為一個解決方案下有兩個項目,分別是GISEditor(作為啟動項目)和GISEditor.EditTool。其中GISEditor項目主要用來設計程序的主界面,實現(xiàn)各編輯功能的按鈕(按鈕功能的具體實現(xiàn)函數(shù)在GISEditor.EditTool項目中)。GISEditor.EditTool項目主要用來實現(xiàn)各編輯操作,這個項目所包含的類從功能上可分為三種:Command(命令類)、Tool(工具類)、BasicClass(公共基礎類),在解決方案管理器中分別對應于Command、Tool和Ba
5、sicClass文件夾。1.簡介 Command文件夾中包含的類是以命令方式來實現(xiàn)編輯操作的,運行時單擊對應按鈕即可,如:UndoCommandClass(撤銷操作類)、RedoCommandClass(恢復操作類)、DelFeatureCommandClass(刪除要素操作類)等。 Tool文件夾中所包含的類是以工具的方式(即鼠標與視圖交互的方式)來實現(xiàn)編輯操作的,如AddVertexToolClass(添加節(jié)點工具類)、MoveVertexToolClass(移動節(jié)點工具類)、DelVertexToolClass(刪除節(jié)點工具類)、MoveFeatureToolClass(移動要素工具類)
6、等。 BasicClass文件夾中包含的類有:EditVertexClass(編輯節(jié)點類)、MapManager(視圖控制類)、SupportZMFeatureClass(修改Z、M值類)等。這些類封裝了各種編輯操作的公共方法,如MapManager中封裝了GetRgbColor方法用于獲取顏色、CalDistance方法用于計算兩點之間X方向和與Y方向上的距離、ConvertPixelsToMapUnits方法用于單位之間的轉換、GetSelectedFeatures方法用于獲取選擇要素等。實例程序中還用到了IHookHelper(鉤子接口),它主要有如下功能:1.通過IHookHelper
7、,獲取地圖控件和主窗體:m_hookHelper.Hook = m_Hook;(m_Hook為mainMapControl.Object,即主視圖對象);2.通過IHookHelper,獲取IActiveView和IMap對象:m_Map = m_hookHelper.FocusMap;3.通過IHookHelper,操作地圖:HookActions hookActions= m_hookHelper as IHookHelper;獲取IHookActions,再通過IHookActions進行Flash、Pan、等操作2. 編輯對象 ArcGIS Engine的編輯過程就是用戶通過鼠標與控件
8、進行點、線、面等幾何對象的添加、修改、刪除等可視化的交互過程。為更好的理解這個交互過程,需要了解編輯過程中的幾何對象及DisplayFeedback對象。 幾何對象 Geometry類是所有幾何對象的父類,它是一個抽象類。IGeometry接口定義了所有的幾何對象都擁有的屬性或方法,如Dimension用于查詢幾何形體對象的維度,Envelope用于返回幾何對象的包絡線,GeometryType則可以返回查詢對象的類型等。 當使用new關鍵字創(chuàng)建一個幾何對象后,這個Geometry其實是空的,需要給它添加具體的信息。如新建一個Point對象后,如果不設置它的X、Y坐標,這個點是無法明確顯示的。
9、2. 編輯對象 幾何對象 幾何對象分為兩種層次,一種是構成要素形狀的幾何圖形,如Point、Polyline、Envelope等;另一種是構成這些形狀的組成部分,如Path、Segment等,前者被稱為“高級幾何對象”。幾何對象幾何對象關系圖關系圖2. 編輯對象 “高級幾何對象”Point對象是一個0維的幾何圖形,具有X、Y坐標值,以及可選的屬性,如高程(Z值)、測量值(M)和ID號,它用于描述需要精確定位的對象。MultiPoint點集對象是無序點的集群,它用于表示具有相同屬性設置的同一組點,是由多個點組成的一個點狀地理對象。Envelope包絡線是一個矩形,它用于表示要素的空間范圍。它覆蓋
10、了幾何對象的最小坐標和最大坐標,同時也記錄了幾何對象的Z值和M值的變化范圍。所有的幾何形體對象都擁有一個包絡線。Polyline多義線是一個有序路徑(一個有序路徑(Path)的集合)的集合,這些路徑既可以是連續(xù)的,也可以是離散的。這個對象可以用于表示具有線狀特征的對象,如河流、公路和等高線等。Polygon多邊形是環(huán)(環(huán)(Ring)的集合)的集合,環(huán)是一個封閉的路徑。Polygon可以由一個或者多個環(huán)組成,設置環(huán)內(nèi)套環(huán),形成島環(huán)的情況,但是內(nèi)外環(huán)之間不能重疊,對于一個給定的點而言,它總是在多邊形“內(nèi)部”、“外部”或者“邊界上”,它通常用于描述具有面狀特性的要素。2. 編輯對象 “高級幾何對象”
11、的組成構件 Polyline是由Path組成的,Polygon是由Ring組成的。Path是連續(xù)的Segment的集合,除了路徑的第一個Segment和最后一個Segment外,其余的Segment的起始點都是前一個Segment的終止點,即Path對象的中對象的中的的Segment不能出現(xiàn)分離不能出現(xiàn)分離,Path可以是任意數(shù)的Line,CircularArc,EllipticArc和BezierCurve的組合,而Segment是連接起點和終點的一段直線或曲線. Ring是一種封閉的路徑,它的起始點是同一點。Ring對象具有“內(nèi)部”和“外部”屬性。由于Ring是封閉的Path,因此其組成可
12、以看作是一系列首尾相連的同方向的Segment對象,并且不能自相交.Path與SegmentRing2. 編輯對象Polyline組成關系圖 Polygon組成關系圖幾何對象幾何對象組成對象組成對象用于創(chuàng)建和編輯此形狀的接口用于創(chuàng)建和編輯此形狀的接口PathSegmentISegmentCollectionRingSegmentISegmentCollectionMultiPatchTriangleFan、TriangleStrip、RingIGeometryCollectionMultiPointPointIPointCollection、IGeometryCollectionPolylin
13、ePathIGeometryCollectionPolygonRingIGeometryCollectionTriangleFanSegmentIPointCollection、IGeometryCollectionTriangleStripSegmentIPointCollection、IGeometryCollection幾何對象組合關系及接口2. 編輯對象 Point和MultiPoint對象 IPoint定義了Point對象的屬性和方法,ID屬性返回點對象的ID號,M、Z值返回點的測度值和高程值,X、Y返回點的X、Y坐標值。PutCoords用于設置一個點的X、Y坐標值,當用戶新生成一
14、個點后,使用該方法來創(chuàng)建一個實際的點對象。 點集(MultiPoint)是具有相同屬性的點的集合,它在構成高級幾何對象、幾何對象動態(tài)模擬等方面起了重要的作用。IMultiPoint是MultiPoint類的接口,它并沒有方法,但可以使用它來判斷某個對象是否是MultiPoint對象。MultiPoint對象可以使用Add方法來添加一個點到它的集合中去,這個過程需要使用IPointCollection接口來完成。2. 編輯對象 Envelope對象 Envelope(包絡線)是一個幾何形體的最小邊框矩形,每一個Geometry對象都有一個包絡線對象,包絡線對象定義了最大、最小Z值、M值,這兩個值
15、可以分別通過IZAware、IMare接口來定義。IEnvelope是包絡線對象的主要接口,它定義了XMax、XMin、YMax、YMin、Height、Width等屬性用于獲得和設置一個包絡線對象的空間坐標。Expand方法用于有比例的縮放包絡線的范圍,并產(chǎn)生一個新的包絡線對象,在縮放地圖的視圖操作中經(jīng)常使用這個方法。Offset是一個偏移方法,它通過添加一個X值和Y值(可以是正值也可以是負值)給XMax、XMin和YMax、YMin,移動包絡線本身,在這個移動過程中包絡線的形狀保持不變。CenterAt方法則通過改變包絡線的中心點來移動包絡線。2. 編輯對象 DisplayFeedback
16、對象 DisplayFeedback是用戶使用鼠標與控件進行可視化交互的對象集,這種交互包括添加、移動要素或圖形元素,以及改變它們的幾何形狀等。該對象還可用在不產(chǎn)生任何幾何對象的任務中,如測量兩點之間的距離、多邊形選擇等。生成新對象的DisplayFeedback,主要是以New開頭的Feedback對象,如生成多邊形的NewPolygonFeedback、生成矩形的NewEnvelopeFeedback等。 在DisplayFeedback對象中,除去GroupFeedback子對象外,其他所有子對象都有相似的方法,按行為可分為兩種類型: 使DisplayFeedback對象返回一個新的Ge
17、ometry。 DisplayFeedback對象僅為顯示目的。2. 編輯對象 產(chǎn)生新Geometry的Feedback對象 NewLineFeedback、NewPolygonFeedback、NewBezierCurveFeedback三個對象分別用來產(chǎn)生新的Polyline、Polygon、BezierCurve幾何對象。盡管產(chǎn)生不同幾何對象的接口不一樣,但三個接口的方法卻基本一致。如在MouseDown事件中使用Start方法添加一個起始點或者中間點,在MouseMove事件中使用MoveTo方法來移動幾何形體對象到一個新的點,在MouseDblClick事件中使用Stop方法返回所產(chǎn)
18、生的幾何對象。 NewEnvelopeFeedback對象實現(xiàn)了INewEnvelopeFeedback接口,該接口定義了產(chǎn)生一個矩形包絡線的屬性和方法。其中Constraint屬性是esriEnvelopeConstraints類型的枚舉類型變量,用于限制交互產(chǎn)生矩形的包絡線形狀,分別是esriEnvelopeConstraintsNone(返回矩形形狀不受限制)、esriEnvelopeConstraintsSquare(返回矩形為正方形)、esriEnvelopeConstraintsAspect(返回矩形對象的長寬成一定比例)。 NewCircleFeedback類實現(xiàn)了INewCir
19、cleFeedback接口,該接口定義了產(chǎn)生一個圓形對象的屬性和方法。在繪制一個圓形幾何對象時,首先選擇一個點作為圓心,然后移動鼠標至特定的點,釋放鼠標后確定圓的半徑。2. 編輯對象 移動整個幾何形體對象 數(shù)據(jù)編輯中常常需要移動整個幾何對象,如把點、線、包絡線或多邊形整體移動。移動這些幾何對象需要用到MovePointFeedback、MoveLineFeedback、MoveEnvelopeFeedback、MovePolygonFeedback四個類。 MovePointFeedback實現(xiàn)了IMovePointFeedback接口,用于實現(xiàn)對點對象的移動,MoveLineFeedback
20、、MoveEnvelopeFeedback、MovePolygonFeedback分別實現(xiàn)了IMoveLineFeedback、IMoveEnvelopeFeedback、IMovePolygonFeedback接口,用于實現(xiàn)對線、矩形、多邊形對象的移動。2. 編輯對象 其它DisplayFeedback對象 在軟件開發(fā)過程中,當打算同時移動多個幾何對象時,可以使用IMoveGeometryFeedback接口來實現(xiàn)。 ResizeEnvelopeFeedback類用于改變一個Envelope對象的尺寸,用ResizeEdge屬性確定是移動Envelope的邊還是角;Constrains屬性確
21、定整形時對象的尺寸比例,如整形為一個正方形或者整形過程中Envelope的寬度和高度保持一定的比例不變。 如果希望旋轉或伸縮一個已經(jīng)存在的Polyline對象,則可以使用IStretchLineFeedback接口。該接口定義了一個Anchor屬性,用于確定旋轉過程中的固定點(錨點),該點一般被設置為Polyline的起始點或者終止點。如果沒有設置,則系統(tǒng)默認使用起始點作為固定點,Anchor屬性需要在IStretchLineFeedback接口的Start方法使用后進行設置。3. 開始編輯 在ArcGIS Engine中開啟編輯任務需使用EngineEditor類,它相當于ArcMap軟件的
22、Editor工具條。 IEngineEditor接口介紹 EngineEditor類實現(xiàn)了IEngineEditor接口,它的功能是啟動或者停止一個編輯流程。 IEngineEditor接口的主要方法和屬性如下:(5)GetTaskByUniqueName方法用于通過名稱從EngineEditor獲得編輯任務。(6)CurrentTask屬性用于獲取當前的編輯任務。(7)EditWorkspace屬性用于獲得當前正在編輯的Workspace對象。(8)EditState屬性用于查看當前的編輯狀態(tài)。(9)EditSessionMode屬性由于編輯的對象存在版本化(ArcSDE空間數(shù)據(jù)庫)和非版本
23、化兩種類型,所以需要設置IEngineEditor接口的EditSessionMode屬性,用來指明是版本化圖層還是非版本化圖層。(1)StartEditing方法用于開啟一個編輯對象,調用該方法需要傳入IMap和IWorkspace兩個參數(shù)。(2)EnableUndoRedo方法用來設置工作空間是否支持“恢復/撤銷”的操作。(3)AbortOperation方法用于當在編輯過程中出現(xiàn)異常時,程序可以使用它來取消所做的操作,以免發(fā)生不可恢復的破壞。(4)StopEditing方法用于在整個編輯流程完成后來結束編輯。3. 開始編輯 實現(xiàn)開始編輯功能的核心代碼:4. 設置編輯圖層 在進行編輯時,需
24、要明確對哪個圖層進行編輯操作,所以在開始一個編輯對象之后,必須設置編輯哪一個圖層。在ArcGIS Engine中設置編輯圖層需使用EngineEditor類的IEngineEditLayers接口的相關方法和屬性。 IEngineEditLayers接口介紹 IEngineEditLayers接口用于獲取編輯會話過程中有關圖層的信息。如判斷一個圖層是否可編輯、設置當前目標圖層等。 IEngineEditLayers接口的主要方法和屬性如下:(1)CurrentSubtype屬性用于返回目標圖層的子類型,若IEngineEditLayers的目標圖層沒有任何子類型,返回值為0。(2)Target
25、Layer屬性用于返回EngineEditor的目標圖層,所謂目標圖層就是通過命令或者編輯任務新建一個要素并寫入的要素圖層。(3)IsEditable方法用于檢查一個指定的圖層是否可編輯,當開始一個編輯對象,用該方法自動訪問地圖中的每一個圖層,只有可編輯的圖層將被添加到ControlsEditingTargetToolControl(編輯目標工具控件)中。(4)SetTargetLayer方法用于設置EngineEditor的目標圖層。5. 設置編輯任務 設置編輯任務實質上就是確定在編輯過程中執(zhí)行什么樣的操作,如是添加要素、刪除要素還是修改要素。在ArcGIS Engine中設置編輯任務需使用
26、IEngineEditTask接口的相關方法和屬性。 IEngineEditTask接口介紹 IEngineEditTask接口負責向EngineEditor的CurrentTask屬性傳遞當前所指定的編輯任務,這個任務也可以看做是為了執(zhí)行某個編輯操作(如創(chuàng)建要素等)而封裝的一個流程。 實現(xiàn)設置編輯任務功能的核心代碼如下:6. 編輯操作 編輯操作實現(xiàn)的功能包括:選擇要素、移動要素、撤銷操作、恢復操作、添加要素和刪除要素等。 選擇要素 在當前地圖窗口中進行要素選擇的實現(xiàn)過程,核心代碼:6. 編輯操作 移動要素 在編輯過程中,常常需要對某一個或者多個幾何對象進行整體移動,以改變幾何對象的位置,要素
27、移動的過程如下: 鼠標在控件上點擊后觸發(fā)OnMouseDown事件,獲取移動的起始點; 鼠標在控件上移動,觸發(fā)OnMouseMove事件,實現(xiàn)移動要素到指定點; 當釋放鼠標左鍵時,完成移動要素事件。6. 編輯操作 添加要素 添加要素的編輯操作中用到了NewMultiPointFeedback、NewPolygonFeedback、NewLineFeedback等對象,分別用來添加多點、多邊形、線等幾何對象,三個類分別實現(xiàn)了INewMultiPointFeedback、INewPolygonFeedback、INewLineFeedback三個接口。 根據(jù)圖層類型添加要素的過程: 當鼠標在控件上
28、單擊時,觸發(fā)OnMouseDown事件,獲得第一個點坐標,添加第一個點,當圖層類型為點層時,則直接在鼠標點擊位置創(chuàng)建點要素對象; 鼠標在控件上移動時,創(chuàng)建的要素對象移動到鼠標移動點位置; 當雙擊鼠標左鍵時,觸發(fā)OnDblClick事件,獲取所繪制的要素;6. 編輯操作 刪除要素 在編輯要素過程中,常常需要刪除已有不合理的要素,在刪除過程中需要用到IFeature接口的Delete方法,此方法用于刪除指定的要素。實例代碼6. 編輯操作 撤銷操作 如果發(fā)現(xiàn)編輯過程中出現(xiàn)錯誤,可以通過IWorkspaceEdit2接口的UndoEditOperation方法來恢復到錯誤發(fā)生前的狀態(tài)。實例代碼6. 編輯操作 恢復操作 在編輯過程中,由于誤刪或者添加的幾何對象不正確,可以通過IWorkspaceEdit2對象的RedoEditOperation方法來恢復到誤操作發(fā)生前的狀態(tài)。7. 節(jié)點編輯 無論用戶編輯的是要素還是圖形元素,實質上都是在改變它們的Geometry屬性。在實際工作中,除添加、刪除和移動幾何對象這些針對整個幾何對象的操作外,還經(jīng)常需要對已經(jīng)存在的幾何對象進行形狀的修改,這需要對構成幾何對象的節(jié)點進行編輯,包括添加節(jié)點、刪除節(jié)點和移動節(jié)點等。 Polyline、Polygon和BezierCurve這三類幾何對象,都是由
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度飛機租賃與飛行員培訓服務合同3篇
- 2025屆江蘇蘇州市四校高三12月聯(lián)考語文試題(學生版)
- 兒童身體協(xié)調性訓練考核試卷
- 公路客運服務投訴處理與改進考核試卷
- 2025版木屋建筑工程質量保修合同示范文本4篇
- 2025版學校小賣部環(huán)保購物袋定制與銷售合同2篇
- 2025年分期美食體驗券購買合同
- 2025年養(yǎng)老保險擔保合同
- 2025年嬰童用品贈與合同
- 2025年倉庫貨物清點協(xié)議
- 中央2025年國務院發(fā)展研究中心有關直屬事業(yè)單位招聘19人筆試歷年參考題庫附帶答案詳解
- 2024年09月北京中信銀行北京分行社會招考(917)筆試歷年參考題庫附帶答案詳解
- 外呼合作協(xié)議
- 小學二年級100以內(nèi)進退位加減法800道題
- 保險公司2025年工作總結與2025年工作計劃
- 2024年公司領導在新年動員會上的講話樣本(3篇)
- 眼科護理進修專題匯報
- GB/T 33629-2024風能發(fā)電系統(tǒng)雷電防護
- 深靜脈血栓(DVT)課件
- 2023年四川省廣元市中考數(shù)學試卷
- GB/T 19885-2005聲學隔聲間的隔聲性能測定實驗室和現(xiàn)場測量
評論
0/150
提交評論