在GIS中判断两个图形相交是常用的方法(这里指的二维空间,以下所有内容的表述都是二维空间),怎么判断两个图形(图形不包括直线,我认为直线没有外接矩形,个人观点)是不是相交呢,首先判断外接矩形是不是相交。如果外接矩形都不想交,那么一定不相交。引出标题,判断外接矩形是否相交。
首先题目开起来很简单(开始的时候我是这样想的),但是做的时候发现有一点点小复杂。
什么是相交?
这个有点复杂了,我不知道拓扑学中怎么定义的,找了好多资料,最后还是没有找到,有的是数学中的定义,在GIS中根本就不试用,干脆看ogc怎么定义的吧。
原来相交和相离是取反的关系,那么就能看看相离吧。
这个是用DE-9IM(9交模型)定义的,那么相离就是边和边没有交集,边和内部没有交集。终于搞懂GIS中相交是怎么回事了。
搞懂概念就开始做了。
要想判断想交的情况,线判断不相交,那么什么情况不想交呢?
如下图是一个屏幕坐标系,我们想判断绿色方块是不是和other1,2,3相交。
首先看maxX线,这个线代表的是绿色方块x的最大值(平行于Y轴),如果other1,2,3的X最小值都大于绿色方块的x最大值,那么一定不会相交(有点绕)。
同理:还有三种情况,就不写了。
代码如下
/** * 利用快排的方法先排除一些情况,如果返回true一定不想交,返回false 可能相交 * @param other Envelope * @return */ public boolean intersects(Envelope other) { if (isNull() || other.isNull()) { return false; } return !(other.minX > maxX || other.minY > maxY || other.maxX < minX || other.maxY < minY); }
这样就排除了一部分情况,还有一些情况。改天继续...
原文:http://www.cnblogs.com/youngKen/p/4978240.html