?
學習AE一段時間了,總是對QI不是很理解,今天一晚上寫了QI實例,嘗試理解下。
- 首先想到的是→改變空間參考→alter、SpatialReference→alterSpatialReference,輸入到幫助文檔里。
查看是IGeoDatasetSchemaEdit接口的方法,那么我們能想到:A.要實例化一個IGeoDatasetSchemaEdit接口變量.B.要得到一個空間參考,也就是改變成什么樣的空間參考。我們再在搜索里輸入:createSpatialReference→
通過以下這段代碼我們知道,CreateSpatialReference根據srID(空間參考ID),創建的空間參考有可能是地理坐標系,也有可能是投影坐標系。
我的參考教程是創建一個地理坐標系,不管是地理坐標系還是投影坐標系,反正空間參考要創建一個,接下來就是解決A的問題了:要實例化一個IGeoDatasetSchemaEdit接口變量。因為接口變量是不能用new來實現的,還是需要接口所支持的類的實例來進行實例化(interface A=new BClass()),我們就很順其自然的找到了實現了IGeoDatasetSchemaEdit接口的類:FeatureDataset 。
這個時候我們先不要急了:因為我們還有件事沒辦:到目前位置我們雖然很繁瑣的創建了一個地理坐標系的空間參考,但是我們還不知道用這個空間參考來改變誰的空間參考呢,所以我們要想辦法獲取當前地圖的信息。
所以我門選擇了FeatureDatset 。這就意味著我們可以通過這個類的變量來進行改變空間參考,當然這個變量的任務就是獲取要改變空間參考的信息。
我們也許可以通過IGeoDatasetSchemaEdit p=new FeatureDatasetClass();
但是:FeatureDatasetClass沒有定義默認的構造函數所以必須IGeoDatasetSchemaEdit類型接口變量的實例化要么通過FeatureDatasetClass類其他接口進行QI來實現;要么通過支持IGeoDatasetSchemaEdit的其他類來進行實例化(實例化它的類必須有構造函數,否則也只能進行QI)!
但是我們還有一個更好的東西:QI!用QI我們不僅可以實例化,還可以轉到其他接口,進而得到圖層的信息!所以我門又一次自然的看看這個FeatureDatasetClass 支持哪些接口:第一眼就看到了非常熟悉的IDataset 這個接口,雖然它不是我們要找的。。。我們要找的是:IGeoDataset接口。
也就是說,可以通過 IGeoDataset QI到IGeoDatasetSchemaEdit或者說從 IGeoDatasetSchemaEdit QI到? IGeoDataset
這里我們是用第一種,因為要通過 來獲得圖層的信息。這時我們再看支持 IGeoDataset的類,因為這個時候我們還是希望進行QI,并最終得到地圖信息。
二,單向QI了一段,我們再從其他方向QI一段時間:
我們知道我們可以通過IMap pMap=axMapControl1.Map;? 來獲得當前地圖的信息,我們看到IMap接口有個Layer屬性:而這個Layer屬性通過get_Layer(int index)函數,返回的是ILayer接口類型變量,這里涉及到ILayer接口,我們看下幫助文檔:想進行QI,我們首先找到支持ILayer接口的類,然后看這些類中的其他接口,所以我門又一次看了支持ILayer接口的類:從中我們選擇了FeatureLayer類,IFeatureLayer也是這個類的接口,所以我們可以實現從 ILayer接口QI到IFeatureLayer,這時我們看到 IFeatureLayer有個屬性:FeatureClass,而這個屬性返回都是IFeatureClass接口類型,這也就相當于實現了IFeatureLayer到IFeatureClass的轉變,也可以“自認為”是QI的一種,因為IFeatureClass也可以QI到別的接口(當一個接口實在QI不了的時候,看看有沒有屬性來進行間接QI→個人觀點)。
進入正題 我們看看支持IFeatureClass的類,我們看都一個熟悉的類FeatureClass,點開看看,我們發現FeatureClass也支持IGeoDataset接口,
就是說是先了上到下的對接,終于通過QI吧信息對接上了。
總的來說:1.進行QI就是不斷的接口跳轉,跳轉可以是同一個類中的倆個接口之間跳轉,也可以通過接口的屬性來實現接口“跳轉”。
???????????? 2.為什么要進行QI:因為接口的方法是在類中顯示實現的,每個類能實現的功能不同,而這些功能又是通過不同的接口來實現的,要完成某項操作(如改變空間參考),就會涉及不同的方法,這些方法在不同的接口中,這些接口只有通過共同的類來實現跳轉。
以上是我對照教程+幫助文檔+自己理解寫的,不是很專業,口語用的比較多,但還是希望對初學者能有一點的幫助吧!
個人觀點,轉載請注明出處!