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/
在前面的文章中,分析了,这两天看了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/