QI实例-改变空间参考
?
學(xué)習(xí)AE一段時(shí)間了,總是對QI不是很理解,今天一晚上寫了QI實(shí)例,嘗試?yán)斫庀隆?/p>
查看是IGeoDatasetSchemaEdit接口的方法,那么我們能想到:A.要實(shí)例化一個(gè)IGeoDatasetSchemaEdit接口變量.B.要得到一個(gè)空間參考,也就是改變成什么樣的空間參考。我們再在搜索里輸入:createSpatialReference→
通過以下這段代碼我們知道,CreateSpatialReference根據(jù)srID(空間參考ID),創(chuàng)建的空間參考有可能是地理坐標(biāo)系,也有可能是投影坐標(biāo)系。
我的參考教程是創(chuàng)建一個(gè)地理坐標(biāo)系,不管是地理坐標(biāo)系還是投影坐標(biāo)系,反正空間參考要?jiǎng)?chuàng)建一個(gè),接下來就是解決A的問題了:要實(shí)例化一個(gè)IGeoDatasetSchemaEdit接口變量。因?yàn)榻涌谧兞渴遣荒苡胣ew來實(shí)現(xiàn)的,還是需要接口所支持的類的實(shí)例來進(jìn)行實(shí)例化(interface A=new BClass()),我們就很順其自然的找到了實(shí)現(xiàn)了IGeoDatasetSchemaEdit接口的類:FeatureDataset 。
這個(gè)時(shí)候我們先不要急了:因?yàn)槲覀冞€有件事沒辦:到目前位置我們雖然很繁瑣的創(chuàng)建了一個(gè)地理坐標(biāo)系的空間參考,但是我們還不知道用這個(gè)空間參考來改變誰的空間參考呢,所以我們要想辦法獲取當(dāng)前地圖的信息。
所以我門選擇了FeatureDatset 。這就意味著我們可以通過這個(gè)類的變量來進(jìn)行改變空間參考,當(dāng)然這個(gè)變量的任務(wù)就是獲取要改變空間參考的信息。
我們也許可以通過IGeoDatasetSchemaEdit p=new FeatureDatasetClass();
但是:FeatureDatasetClass沒有定義默認(rèn)的構(gòu)造函數(shù)所以必須IGeoDatasetSchemaEdit類型接口變量的實(shí)例化要么通過FeatureDatasetClass類其他接口進(jìn)行QI來實(shí)現(xiàn);要么通過支持IGeoDatasetSchemaEdit的其他類來進(jìn)行實(shí)例化(實(shí)例化它的類必須有構(gòu)造函數(shù),否則也只能進(jìn)行QI)!
但是我們還有一個(gè)更好的東西:QI!用QI我們不僅可以實(shí)例化,還可以轉(zhuǎn)到其他接口,進(jìn)而得到圖層的信息!所以我門又一次自然的看看這個(gè)FeatureDatasetClass 支持哪些接口:第一眼就看到了非常熟悉的IDataset 這個(gè)接口,雖然它不是我們要找的。。。我們要找的是:IGeoDataset接口。
也就是說,可以通過 IGeoDataset QI到IGeoDatasetSchemaEdit或者說從 IGeoDatasetSchemaEdit QI到? IGeoDataset
這里我們是用第一種,因?yàn)橐ㄟ^ 來獲得圖層的信息。這時(shí)我們再看支持 IGeoDataset的類,因?yàn)檫@個(gè)時(shí)候我們還是希望進(jìn)行QI,并最終得到地圖信息。
二,單向QI了一段,我們再從其他方向QI一段時(shí)間:
我們知道我們可以通過IMap pMap=axMapControl1.Map;? 來獲得當(dāng)前地圖的信息,我們看到IMap接口有個(gè)Layer屬性:而這個(gè)Layer屬性通過get_Layer(int index)函數(shù),返回的是ILayer接口類型變量,這里涉及到ILayer接口,我們看下幫助文檔:想進(jìn)行QI,我們首先找到支持ILayer接口的類,然后看這些類中的其他接口,所以我門又一次看了支持ILayer接口的類:從中我們選擇了FeatureLayer類,IFeatureLayer也是這個(gè)類的接口,所以我們可以實(shí)現(xiàn)從 ILayer接口QI到IFeatureLayer,這時(shí)我們看到 IFeatureLayer有個(gè)屬性:FeatureClass,而這個(gè)屬性返回都是IFeatureClass接口類型,這也就相當(dāng)于實(shí)現(xiàn)了IFeatureLayer到IFeatureClass的轉(zhuǎn)變,也可以“自認(rèn)為”是QI的一種,因?yàn)镮FeatureClass也可以QI到別的接口(當(dāng)一個(gè)接口實(shí)在QI不了的時(shí)候,看看有沒有屬性來進(jìn)行間接QI→個(gè)人觀點(diǎn))。
進(jìn)入正題 我們看看支持IFeatureClass的類,我們看都一個(gè)熟悉的類FeatureClass,點(diǎn)開看看,我們發(fā)現(xiàn)FeatureClass也支持IGeoDataset接口,
就是說是先了上到下的對接,終于通過QI吧信息對接上了。
總的來說:1.進(jìn)行QI就是不斷的接口跳轉(zhuǎn),跳轉(zhuǎn)可以是同一個(gè)類中的倆個(gè)接口之間跳轉(zhuǎn),也可以通過接口的屬性來實(shí)現(xiàn)接口“跳轉(zhuǎn)”。
???????????? 2.為什么要進(jìn)行QI:因?yàn)榻涌诘姆椒ㄊ窃陬愔酗@示實(shí)現(xiàn)的,每個(gè)類能實(shí)現(xiàn)的功能不同,而這些功能又是通過不同的接口來實(shí)現(xiàn)的,要完成某項(xiàng)操作(如改變空間參考),就會涉及不同的方法,這些方法在不同的接口中,這些接口只有通過共同的類來實(shí)現(xiàn)跳轉(zhuǎn)。
以上是我對照教程+幫助文檔+自己理解寫的,不是很專業(yè),口語用的比較多,但還是希望對初學(xué)者能有一點(diǎn)的幫助吧!
個(gè)人觀點(diǎn),轉(zhuǎn)載請注明出處!
轉(zhuǎn)載于:https://www.cnblogs.com/chuang8/archive/2012/11/06/2757781.html
總結(jié)
以上是生活随笔為你收集整理的QI实例-改变空间参考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “覩实情有悲”上一句是什么
- 下一篇: DNF里无尽永恒在哪里换票?