JTS学习-com.vividsolutions.jts.operation包

           JTS组织以下的文件夹:几何图形(geom包)、拓扑图(geomgraph包) 、基本算法(algorithm包)、索引方法(index包)、输入/输出(io包)、线性关系(linearref包)、计算交点(noding包)、几何图形操作(operation包)、平面图(planargraph包)、多边形化(polygnize包)、精度(precision)、工具(util包)。
            在前面的文章中,分析了,这两天看了JTS的User Development Guide与JTS Technical Specs,对JTS的operation包有了一点的了解。特写下来作为备忘。
            在operation包内,包含buffer、distance、linemerge、overlap、polygonize、predicate、relate、valide八个子包;分别对应着计算图形的缓冲、距离、;线段融合、图形覆盖、多边形化、断言、关联、有效性等的操作。当然首先要明白,所有的操作针对的都是在geom包中定义的Geometry对象。由于在计算机中,所有的图形都是离散的点组成,所以所有的操作都是在组成图形的点的集合上进行的。在本文陈述中,Geometry A,做点的集合时,也写作(A)。(表述并不确切)
            一个图形(Geometry)的缓冲(buffer)就是在数学意义上的Minkovski sum。故计算GeometryA的缓冲,也即(A)的Minkovski sum。在本包的buffer算法中加了个参数,从而将图形整个由一个管状的形体整个包围起来。看起来就像是个缓冲器,我觉得这是操作名称的来源吧。
            距离操作(distance)是个二元操作,操作对象Geometry A、B,返回(A)与(B)中距离最近的两个点的距离。是集合论中的基本概念。
            线段的融合(linemerge)是将Geometry A中相互连接的线段进行连接。也即将line segment A、B(分别由两个坐标点表示)融合成一个line segment,去掉中间那个连接点。
            图形的覆盖(overlap),在这里不想多说了,自己稀里糊涂的。
            多边形化操作(polygonize)对Geometry A进行计算,返回一个多边形(Polygon)。将由许多个点表示的图形,用少量的点来表示,减少图形的信息,就是我们所谓的对图形进行降维。
            断言(predicate)是一个二维的操作,对Geometry之间的关系进行判断的操作。
            关联(relate)是个很重要的操作,根据DE-9IM(The Dimensionally Extended Nine-Intersection Model),该方法返回两个Geometry A与B的相交矩阵IM(Intersections Matrix)。这个矩阵在计算图形关系上用到。
            有效性(valid)没有细看。

             基本上,operation包内的操作就是上述这些,组织的思路很清晰。难点在于该包的操作都是建立在集合的基础上,认识到这一点后,看代码的速度就快很多了。当然里面也有些不错的算法,比如DE-9IM,Minkovski sum,幸亏以前关注过算法。
           
             后续还会继续读JTS的源码,也会将不错的算法发上来。学习是很快乐的事情,呵呵。

             http://9.douban.com/site/entry/23213825/
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值