QI實例-改變空間參考

?

學習AE一段時間了,總是對QI不是很理解,今天一晚上寫了QI實例,嘗試理解下。

  1. 首先想到的是→改變空間參考→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:因為接口的方法是在類中顯示實現的,每個類能實現的功能不同,而這些功能又是通過不同的接口來實現的,要完成某項操作(如改變空間參考),就會涉及不同的方法,這些方法在不同的接口中,這些接口只有通過共同的類來實現跳轉。

以上是我對照教程+幫助文檔+自己理解寫的,不是很專業,口語用的比較多,但還是希望對初學者能有一點的幫助吧!

個人觀點,轉載請注明出處!

轉載于:https://www.cnblogs.com/chuang8/archive/2012/11/06/2757781.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379137.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VeryCD 的資料庫

呵呵,剛才看了下VeryCD的資料庫,恍然間才明白為什么VeryCD以前花大量時間和精力開發電驢,又為什么不久前突然取消了KAD網絡和ED2k網絡的搜索功能。呵呵,天下沒有免費的午餐哈,VeryCD先用電驢軟件聚集客戶群&#xff08…

Java IdentityHashMap keySet()方法及示例

IdentityHashMap類keySet()方法 (IdentityHashMap Class keySet() method) keySet() method is available in java.util package. keySet()方法在java.util包中可用。 keySet() method is used to get a set of all the existing keys in this IdenityHashMap to be viewed in …

C#省市二級聯動(王者榮耀挑選英雄為例)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace beyond_聯動_ {public partial clas…

二叉排序樹(Binary Sort Tree) 又稱為二叉查找樹(Binary Search Tree) - (代碼、分析)

目錄:代碼:分析:代碼: BSTree.h #ifndef _BSTREE_H_ #define _BSTREE_H_typedef void BSTree;//定義二叉樹類型 typedef void BSKey;//定義節點的鍵值類型(用于節點排序)typedef struct _tag_BSTreeNode …

springboot tomcat默認線程數_記一次JAVA線程池的錯誤用法

最近項目一個項目要結項了,但客戶要求 TPS 能達到上千,而用我寫的代碼再怎么弄成只能達到 30 的 TPS,然后我又將代碼中能緩存的都緩存了,能拆分的也都拆分了,拆分時用的線程池來實現的;其實現的代碼主要為…

引以為鑒-ARM開發板連線注意事項

前些日子把實驗室的三臺機子放到一個工位上,非常擁擠,做實驗也很不方便。因此,想把ARM開發板的環境重新搭建到自己的電腦上。說完就做,上午就開始忙活起來。把開發板上的USB線、串口線、JTAT接口、還有電源線一一插好。接著就開始…

CString 類型和引用

怎么理解CString & 類型?在函數參數表中,列了一項是此類型,據說是引用。可以給個具體方法,示例么? 由于子程序調用是棧傳遞參數,因此對參數的修改不會改變調用者傳入的參數的值。如果要改變調用者的參數…

Java IdentityHashMap putAll()方法與示例

IdentityHashMap類putAll()方法 (IdentityHashMap Class putAll() method) putAll() method is available in java.util package. putAll()方法在java.util包中可用。 putAll() method is used to copy all of the entry (key-value pairs) that exists from the given map (m)…

Python---實驗八

1,現在有一份‘邀請函.txt’的空白文件,請在同級目錄下編寫一段代碼,寫入內容‘誠摯邀請您來參加本次宴會’。 with open(fG:\study\Python\邀請函.txt,modew,encodingutf-8) as y:y.write(誠摯邀請您來參加本次宴會)效果圖如下:…

哈希表 - (代碼、分析 )

目錄:代碼:分析:代碼: BSTree.h BSTree.c 二叉排序樹(Binary Sort Tree) 又稱為二叉查找樹(Binary Search Tree) Hash.h #ifndef _HASH_H_ #define _HASH_H_typedef void Hash;//定義哈希表類型 typedef void HashKey;//定義哈…

scala spark 數據對比_IT大牛耗時三個月總結出大數據領域學習路線,網友評論:炸鍋了...

大數據不是某個專業或一門編程語言,實際上它是一系列技術的組合運用。有人通過下方的等式給出了大數據的定義。大數據 編程技巧 數據結構和算法 分析能力 數據庫技能 數學 機器學習 NLP OS 密碼學 并行編程雖然這個等式看起來很長,需要學習的東…

Java IdentityHashMap equals()方法與示例

IdentityHashMap類equals()方法 (IdentityHashMap Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this IdentityHashMap object and the given object (ob) are eq…

jQuery中關于Ajax的詳解

本文介紹如何使用jquery實現Ajax功能. 用于發送Ajax請求的相關函數如load, get, getJSON和post這些漸變Ajax方法, 對于核心的ajax 方法沒有過多介紹, 主要是通過配置復雜的參數實現完全控制Ajax請求。 Ajax讓用戶頁面豐富起來, 增強用戶體驗. Ajax是所有Web開發的必修課. 雖然A…

Python---實驗九作業

1,使用tkinter實現計算器程序。實現效果如下: from tkinter import * from tkinter.ttk import *def frame(master):"""將共同的屬性作為默認值, 以簡化Frame創建過程"""w Frame(master)w.pack(sideTOP, expandYES, fill…

分析FLV文件分析和解析器的開源代碼

分析一下GitHub上一份FLV文件分析和解析器的開源代碼 GitHub源碼地址:功能強大的 FLV 文件分析和解析器 :可以將flv文件的視頻tag中的h264類型數據和音頻tag中的aac類型數據導出 (只限h264和aac) (這個代碼不太適合用于大文件的分…

用pv操作描述如下前驅圖_LinkedList實現分析(二)——常用操作

上一篇文章LinkedList實現分析(一)——LinkedList初探與對象創建介紹了LinkedList中的一些重要屬性和構造方法,下面我們將詳細介紹一下LinkedList提高的常用方法的實現原理元素添加###add(E e)方法往LinkedList添加元素,LinkedList提供了多重方式&#x…

C++多重繼承與虛基類及與.NET的比較

多重繼承前面我們介紹的派生類只有一個基類,稱為單基派生或單一繼承。在實際運用中,我們經常需要派生類同時具有多個基類,這種方法稱為多基派生或多重繼承。2.1 多重繼承的聲明:在 C 中,聲明具有兩個以上基類的派生類與…

Javascript的IE和Firefox兼容性匯編

window.event現有問題&#xff1a;使用 window.event 無法在 FF 上運行解決方法&#xff1a;FF 的 event 只能在事件發生的現場使用&#xff0c;此問題暫無法解決。可以這樣變通&#xff1a;原代碼(可在IE中運行)&#xff1a;<input type"button" name"someB…

Java Double類compareTo()方法與示例

雙類compareTo()方法 (Double class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Double-object against the given Double-obje…

平院實訓門禁系統導入

這是我的配置&#xff08;如果是Win10最好每一步都管理員身份運行&#xff09; win7 SQLServer2008 VS2012 切記&#xff1a;注意&#xff1a;當你SQLserver創建數據庫和VS連接數據庫的時候得用同一種方式&#xff0c;要么都用window&#xff08;主機名&#xff09;&#xff0…