前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ArcEngine开发中WKSPoint、WKSPointZ与IPoint三种点对象的区别

ArcEngine开发中WKSPoint、WKSPointZ与IPoint三种点对象的区别

作者头像
acoolgiser
发布2019-01-17 10:02:14
7250
发布2019-01-17 10:02:14
举报
文章被收录于专栏:acoolgiser_zhuanlan

最近忙着做毕业设计,用到了点对象,发现ArcEngine中定义了三个点对象(结构),就想钻一下牛角尖,弄清楚其区别是什么。

一、先来看一下查到的类库和接口,如下图:

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

二、再来看一下IPoint的接口:

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

再看上图Point对象的构成,也就是说,Point对象是0维对象,不是二维,也不是三维,它只有X/Y坐标属性,在进行三维开发或者三维相关的工作时,可以通过Z值属性(注意是单独另外的属性,而不是与X/Y一样的坐标)来设置。或者再对比下面两个图,即可明显地看出区别。

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

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

Description

Returns or Sets the M attribute on the Point.  The M attribute refers to the Point's measure (similar to an address).  The point must be MAware to make use of the M attribute.

三、延伸小知识

从上面的对比中可以得出结论,ArcGIS乃至ArcEngine开发中点对象(IPoint)是0维的,而不是一维或二维。那么以此类推,线对象是一维,面对象是二维的。

对于GISer来说,这是一个很重要而且基础的知识点。笔者准备考研时在某一年的真题中就考过,当时还不理解原因,现在清楚了,哈哈。

四、要注意的是对象模型图中查不到WKSPoint、WKSPointZ结构类型,因为对象模型图中都是接口和类及其继承关系等信息,所以可以查到IPoint接口。笔者上面写的信息都是在ArcGIS的在线帮助文档上面查的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年05月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Description
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档