zoukankan      html  css  js  c++  java
  • 通过JTS源码分析Rtree(未完待续)

    前言

    R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。它把B树的思想很好的扩展到了多维空间,采用了B树分割空间的思想,并在添加、删除操作时采用合并、分解结点的方法,保证树的平衡性。

    因此,R树就是一棵用来存储高维数据的平衡树。

     

    rtree的好处

         例如我想查找公司附近查找20英里以内所有的餐厅。

         如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有的餐厅获取其位置信息,然后计算是否满足要求。如果一个地区有100家餐厅的话,我们就要进行100次位置计算操作了,如果应用到谷歌地图这种超大数据库中,这种方法肯定不行

         我们来看看使用Rtree怎么查找的, 假设我要查询北京市朝阳区首开广场附近一公里的所有餐厅地址怎么办?打开地图(也就是整个R树),先选择国内还是国外(也就是根结点)。然后选华北地区(对应第一层结点),选择北京市(对应第二层结点),再选择朝阳区(对应第三层结点),最后选择首开广场所在的那个区域(对应叶子结点,存放有最小矩形),遍历所有在此区域内的结点,看是否满足我们的要求即可。怎么样,其实R树的查找规则跟查地图很像吧?对应下图:


    本文将通过简单的例子来讲解JTS中Rtree的实现

     

     

     

  • 相关阅读:
    使用Navicat for Oracle新建表空间、用户及权限赋予---来自烂泥
    NonAction与ChildActionOnly
    C# Monitor的Wait和Pulse方法使用详解
    机械键盘简介
    【转载】 中小型研发团队架构实践
    BinaryReader 自己写序列化
    显式接口实现
    AssemblyVersion和AssemblyFileVersion的区别
    自定义设置程序集版本重定向和程序集位置的信息
    单例模式中的属性实现
  • 原文地址:https://www.cnblogs.com/duanxingxing/p/5337940.html
Copyright © 2011-2022 走看看