通过JTS源码分析Rtree(未完待续)
2024-10-19 11:48:10
前言
R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。它把B树的思想很好的扩展到了多维空间,采用了B树分割空间的思想,并在添加、删除操作时采用合并、分解结点的方法,保证树的平衡性。
因此,R树就是一棵用来存储高维数据的平衡树。
rtree的好处
例如我想查找公司附近查找20英里以内所有的餐厅。
如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有的餐厅获取其位置信息,然后计算是否满足要求。如果一个地区有100家餐厅的话,我们就要进行100次位置计算操作了,如果应用到谷歌地图这种超大数据库中,这种方法肯定不行
我们来看看使用Rtree怎么查找的, 假设我要查询北京市朝阳区首开广场附近一公里的所有餐厅地址怎么办?打开地图(也就是整个R树),先选择国内还是国外(也就是根结点)。然后选华北地区(对应第一层结点),选择北京市(对应第二层结点),再选择朝阳区(对应第三层结点),最后选择首开广场所在的那个区域(对应叶子结点,存放有最小矩形),遍历所有在此区域内的结点,看是否满足我们的要求即可。怎么样,其实R树的查找规则跟查地图很像吧?对应下图:
本文将通过简单的例子来讲解JTS中Rtree的实现
最新文章
- Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理
- PHP获取今天、昨天、明天的日期
- UI抑制限制(UI Suppression Limitations)
- 【面试题013】在O(1)时间删除链表结点
- Hadoop项目开发环境搭建(Eclipse\MyEclipse + Maven)
- JQuery重要知识点
- linux-Python升级安装
- ServletConfig对象 【通过此对象获取到web.xml中的信息】
- caffe 配置 札记
- java基础之&;amp; 和 &;amp;&;amp; 的差别
- C++STL之双端队列容器
- Java面试题(二)
- ●BZOJ 4289 PA2012 Tax
- neutron基础一(网络基本命令)基本命令,包括veth peer
- JSP 页面跳转中的参数传递
- 使用gulp-babel转换Es6出现exports is not defined 问题
- reids高可用(灾难备份-持久化)
- svn 修改原来包名的方法和会报的错误
- E1. Array and Segments (Easy version)(暴力) &;&; E2. Array and Segments (Hard version)(线段树维护)
- java 下对字符串的格式化