ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

 时间:2024-10-13 08:36:24

1、最近忙着做毕业设计,在开发时用到了点对象,发现ArcEngine中定义了三个点对象(结构),到底我该用哪个呢?于是想钻一下牛角尖,弄清楚其区别是什么。往下看:

2、一、第一步,先来看一下我查到的相关类库和接口。首先是找到了ESRI.ArcGIS.esriSystem类库,其中定义了两种structure结构,这两个结构变量比较类似,如下图:

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

3、二、第二步,先看一下WKSPoint对象,如图,这是一个二维点对象,只定义了X、Y坐标属性。

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

4、三、第三步,再看一下WKSPointZ对象,如图,这是一个三维点对象,除了X/Y值,还定义了Z坐标属性。

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

5、四,第四步,不难发现,WKSPoint、WKSPointZ是在System类库中定义的两种系统结构Structure,可以和C++里面的结构体变量进行类比理解(C#与C++有一定的联系,都是面向对象的语言),即这哥俩是系统变量,写代码在哪儿都可以任意用,需添加ESRI.ArcGIS.esriSystem引用。

6、五、第五步,再看一下IPoint对象所在的类库和接口,在帮助文档中查到,如图所示,可以明显地看到,IPoint接口定义的点醑穿哩侬对象Point是一个二维点对象,在“Description”中,写到了“一个Point是表示二维XY平面中的特定(x,y)位置的零维物体。一个Point可以具有与之相关的Z值、M值和ID属性。这些属性的存在不会改变Point对象的维数(即仍然是0维啦),也不会改变基于Point执行的几何计算。属性仅被认为是属性计算时,点是ZAware, MAware, or PointIDAware。可以使用PutoCords方法构造点,单独设置X和Y属性,或者使用IConstructPoint 接口。”

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别
ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

7、六、第六步,再看下图中Point对象的构成,也就是说,Point对象是0维对象,不是二维,也不是三维,它只有X/Y坐标属性,在进行三维开发或者三维相关的工作时,可以通过Z值属性(注意是单独另外的属性,而不是与X/Y一样的坐标)来设置。

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

8、七,第七步,或者再对比下面两个图,即可明显地看出区别。

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别
ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

9、八,第八步,再来看一下对Point对象的Z值属性的解释,如下图,描述信息翻译过来为“返回或设置Point点对象的Z属性。虽然Z属性是指点的三维深度,但点在空间上仍然只存在于具有Z属性的2维中。此外,点必须成为ZAware对象才能使用Z属性。”在C#开发环境使用时,下图中的代码是很好的例子。

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

10、九,第九步,同样地,M值应该很简单了,就是测量属性,设置测量容差的。用法和Z值类似,描述信息如下:

ArcEngine中WKSPoint、WKSPointZ与IPoint的区别

11、十,第十步,从上面的对比中可以得出结论,ArcGIS乃至ArcEngine开发中点对象(IPoint)是0维的,而不是一维或二维。那么以此类推,线对象是一维,面对象是二维的。对于GISer来说,这是一个很重要而且基础的知识点。笔者做的是ArcEngine三维开发,需要定义点的坐标,因此选择IPoint和WPSPointZ对象均可。

  • 小学教育:古诗词怎么添加拼音
  • 怎么区分静态描写与动态描写
  • 如何利用WORD制作小学方格作文本,行线数学本
  • Word文档字体与字号的设置方法
  • 怎么在文字下方加点?
  • 热门搜索
    手抄报标题艺术字 生活中的小窍门手抄报 关于地理的手抄报 心里手抄报 物理手抄报版面设计图 好书我推荐手抄报 小学法制教育手抄报 安全主题手抄报 有关法制的手抄报 关于感恩节的手抄报