Esri geometry api java 学习 数据结构 (4) 多顶点形状的数据结构 (MultiVertexGeometry、MultiPoint、Polygon、Polyline)

上一节讲的是点Point在Esri的存储方式,那么现在多顶点是如何存储的呢?

既然Point使用了数组:double[] m_attributes;  double数组按顺序存储所有属性数据,

那么多点就可以使用二维数组做一个Point[] MultiVertex = Point[]();不就好了嘛(`・ω・´)

 

但是把所有属性数据都用double存储实在是太奢侈了!另外在处理地理数据时很多都是针对单一属性的操作,没有必要把别的属性也一起遍历一遍又一遍。所以这里我们把每个数据按照属性拆开成一列列存储(简单列式存储?),每一列都叫做一个“属性流”AttributeStream,属性流分为6种AttributeStreamOfDbl、OfFloat、OfFloat、OfInt8、OfInt16、OfInt32、OfInt64,这样做既节约了存储空间,同时也保证了存储数据格式与属性格式一致。

当属性代表n个值时(比如XY),单条属性流里就会按顺序存储X1、Y1、X2、Y2、X3、Y3、X4、Y4、X5、Y5......

来个栗子:建立只有XY属性的ployline

 

m_vertexAttributes    AttributeStreamBase[1]  (id=42)    里面存储了一条AttributeStream(XY)
XY按照上述顺序存储

对比:建立有XY属性和ID属性的的ployline

添加了ID的一条属性流,这条流格式是int32

 

 

 

 

ok,属性都放在容器里准备好了,那么怎么把这些多点数据分割开成一个个单独的图形呢?

(MultiPoint下面就别看啦点直接分了就行啦!)

分割开这些属性的方法当然是记录这些图形的首点和尾点(下一个首点-1)啦,比如说第一个ployline由第1到第2个点组成,那么

就记录【0(第一个点),2(下一条的第一个点)】

下一个是3-9

就记录【2(第一个点),9(下一条的第一个点)】

最后一条线一定要把下一条的第一个点补在最后!

组合后就是【0,2,9】啦,这也是一个数组,也能被看做一条整数属性流,就把它存在路径分割path的说明里面吧!

以后我再找第一条线就是【0,2-1】!ok!

 

现在出现了最后一个问题!我怎么知道这一条线是封闭的呢(Polygon)?还是不封闭的呢(Polyline)?

这个数据流存储存储Polygon是不会有 最后点 = 首点 的操作的,存储时也不会特意在最后加一个首点。它只是简单的告诉你:“这是封闭的!Flag = 1!”,那么记录这些封闭的情况又出了一个属性记录数组叫它Flag吧(m_pathFlags) !

 

 栗子:p1.closePathWithLine();(把最后一条线封闭成Polygon!)

 

 

此外MultiVertexGeometry还会存储一些其他简单的属性:

m_moveToPoint    Point   正在绘制的线的首点

m_envelope    域

m_cachedArea2D   面积 

m_cachedLength2D    长度

m_pointCount    点个数

等等其他属性,有兴趣的可以跑跑程序看一下~
 

好嘞,本节结束,下节会讲讲当进行操作时每条数据流是怎么被增删改查和其他特别操作的,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值