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.mzph.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…