Contents

jts

jts 源码学习。学习源码,才能更深入的了解原理

index

从index的package-info里面可以看到,这个包提供各种空间索引,SpatialIndex接口里面定义了索引的4个操作,增删查,实现这个接口的有3个类:HPRtree,Quadtree和STRtree。下面简要介绍下包内的内容。

名称 空间索引 使用场景 help
Binary Interval Tree 四叉树的一维版本。给定一个包含 n 个区间的集合 S 和一个查询点 q,报告所有包含 q 的区间;和重叠区间搜索问题:给定一个包含 n 个区间的集合 S 和一个查询区间 Q,报告 S 中与 Q 重叠的所有这些区间。 https://iq.opengenus.org/interval-tree/
Monotone Chains 凸包 https://zhuanlan.zhihu.com/p/158043191
Hilbert-Packed R-tree 是R-tree的一种变体,是多维对象的索引,基于分形曲线构建静态 R 树的压缩算法 dim(E(a)∩E(b))
intervalrtree 一维间隔实现R树索引
KD-Tree 分割k维数据。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。 https://en.wikipedia.org/wiki/K-d_tree
Quadtree 将已知范围的空间等分成四个相等的子空间
R-tree MBR最小边界矩形的方法,从叶子节点开始用矩形将空间框起来
sweepline 它用于计算索引中间隔之间的所有重叠

可以参考JTS-SpatialIndex空间索引使用说明(十五)

srtree

https://developer.aliyun.com/article/750351 https://www.cnblogs.com/fly2wind/p/14525405.html https://www.jianshu.com/p/06ba03e1692f https://www.bbsmax.com/A/Vx5MXQG9JN/ http://t.zoukankan.com/naaoveGIS-p-6774549.html

https://blog.csdn.net/wk1134314305/article/details/76408181 继续 https://gitee.com/shengshifeiyang/jts-learning/blob/master/docs/jts-core/demo/foot-point.md https://www.zhihu.com/question/268006579

algorithm

geom

官网地址中可以看到,DE-9IM矩阵值,指两个几何之间的拓扑关系,这种拓扑关系可以用于描述两个几何图形空间关系的一种标准。 更多详情可以参考ogc官网或者wikipedia

DE-9IM矩阵是带有整数项的3x3矩阵,矩阵条目表示每个交点的可能维度 。通常将每个几何图形分为三部分:外部(exterior),边界(boundary)和内部(interior),如下表格。

Interior Boundary Exterior
Interior dim(I(a)∩I(b)) dim(I(a)∩B(b)) dim(I(a)∩E(b))
Boundary dim(B(a)∩I(b)) dim(B(a)∩B(b)) dim(B(a)∩E(b))
Exterior dim(E(a)∩I(b)) dim(E(a)∩B(b)) dim(E(a)∩E(b))

布尔形式

矩阵的定义域为{-1,0,1,2},常见的拓扑关系描述符大概10种左右

  • 0,1,2表示非空,用T进行表示
  • 空集-1用F表示
  • *表示是什么都可以(所以不需要计算)

可以参考wikipedia,jts或者GEOS找到相关的返回值,部分如下

谓词 返回值
相等(Equals) T*F**FFF*
相离(Disjoint) FF*FF****
相接(Touches) FT*******\F**T*****\F***T****
覆盖(Covers) T*****FF*\*T****FF*\***T**FF*\****T*FF*
叠置(Overlaps) T*T***T**\1*T***T**

参考

MBR

在JTS或shapely程序中,为了提升计算性能,一般还会先进行MBR判断,再进行DE-9IM判断

Area

jts使用鞋带定理计算面积

空间关系

  • 线段的拐向判断 可以利用矢量的叉积判断: p=(x1,y1),q=(x2,y2) p×q=x1y2-x2y1;

若PxQ>0,则说明P在Q的顺时针方向

若PxQ<0,则说明P在Q的逆时针方向

若PxQ=0,则说明PQ共线(共线有可能反向也可能正向)

  • 判断点是否在线段上 设点为Q,线段为P1P2,判断点Q在该线段上的依据是(Q-P1)X(P2-P1) = 0,这样就保证Q在P1P2这条直线上,但是还是不能保证在P1P2的线段上,所以我们得多加个条件:且Q在P1,P2为对角顶点的矩形内
  • 判断两线段是否相交 分为两步确定两天线段是否相交: ①快速排斥试验:mbr ②跨立试验:如果ab,cd相交,那么ab必跨过cd,那么(ac x ab )x(bd xab)<=0
  • 判断点是否在多边形内 一种是射线法,另一种是转角法。

https://www.cnblogs.com/zhongHW/p/11047020.html

geomgraph

io

operation

simplify

IntersectionMatrix

https://www.cnblogs.com/zhongHW/p/11047020.html 几何结构 DelaunayTriangulationBuilder MinimumBoundingCircle newVoronoiDiagramBuilder 度量函数 DistanceOp
DiscreteHausdorffDistance AreaSimilarityMeasure HausdorffSimilarityMeasure 空间算法 线段相交算法 RobustLineIntersector 数学函数 角度分析 Angle

JTS学习笔记

JTS简介