0
点赞
收藏
分享

微信扫一扫

RTree判断点在多边形内-Java版本

唯米天空 2022-03-12 阅读 86

RTree判断点在多边形内-Java版本

1.什么是RTree

2.RTree java依赖

rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree

上面有详细的使用说明

最新版本的maven依赖可在中央仓库查到:https://mvnrepository.com/artifact/com.github.davidmoten/rtree

这里我们使用0.8.7版本

<!-- https://mvnrepository.com/artifact/com.github.davidmoten/rtree -->
<dependency>
    <groupId>com.github.davidmoten</groupId>
    <artifactId>rtree</artifactId>
    <version>0.8.7</version>
</dependency>

3.使用

3.1创建R树

创建R树

//创建时,可以指定最小、最大孩子结点数,splitter,selector
RTree<String, Geometry> tree = RTree.minChildren(3).maxChildren(6).create();

创建R*树

R*树是R树的变种,是在节点分裂方法上做了改进的R树,这点后续再写篇博客详细介绍

RTree<String, Geometry> tree = RTree.star().maxChildren(6).create();

这样,第一步创建R树操作就完成了,是不是很简单!!!

3.2 往R树插入数据

可插入4种空间数据:点、线、圆、矩形

  • Geometries.Rectangle
  • Geometries.circle
  • Geometries.point
  • Geometries.line

为什么没有面数据呢?

  • 面其实也是多个线的组合,只需要将多边形的边依次插入R树就行
//插入点数据
tree = tree.add("testPoint", Geometries.point(116.0D, 32.0D));

3.3 删除R树里的数据

删除的时候需要匹配名称和地理信息

//删除点数据
tree = tree.delete("testPoint", Geometries.point(116.0D,32.0D));

3.4 搜索

R树对空间信息的查找平均时间复杂度是O(logN),最坏情况下是O(N)

搜索方法返回的结果需要Observable泛型

Observable<Entry<String, Point>> entries = tree.search(Geometries.rectangle(8, 15, 30, 35));

或者返回Iterable类型

Iterable<Entry<String, Point>> result = tree.search(Geometries.point(116.11D, 31.11D))
                .toBlocking().toIterable();

4. 实际应用:判断点是否在多边形内

待补充

举报

相关推荐

0 条评论