zoukankan      html  css  js  c++  java
  • GIS区域空间搜索一个必要的优化

    在项目中需要对一个对象的周边做空间搜索,当空间数据表相当大的时候直接搜索是非常缓慢的。

    比如在全上海的地物信息包括政务机关,商业,交通,娱乐,餐饮,医院,学校..等等 合计有数十万条记录。当对一个坐标点(x,y)的周边1000m做空间搜索时,就是对这个点画圆,然后求圆内的点,用数学公式就是求两点间距离。

    一个实际的例子就是在Oracle Spatail中,对这么一张地物表做空间搜索,所用到的函数是sdo_geom.sdo_distance,列出函数返回值小于1000的结果集,搜索结果为1000条左右的情况下我的脚本运行了60秒。数据库的空间索引是没有问题的,似乎两点距离函数没有用到空间索引。

    我们可以把圆的外切矩形先求出来,这个是比较容易,而且也不用那么精确,先用这个矩形去缩小范围,再求距离。毕竟矩形只需要大于和小于不像圆的运算复杂。在oracle spatail中求矩形空间搜索结果应该用sdo_filter函数,这个可以充分利用空间索引来提高效率,同样的结果集只用时不到2秒。最后的语句大致如下:

    where sdo_filter(..)=true and sdo_geom.sdo_distance(...)<=1000

  • 相关阅读:
    Python 集合
    Python 文字列
    JUNIT5(maven配置)
    Javascript严格模式
    移动互联测试
    Python的基础知识
    Linux系统下发件oa环境
    禅道的使用
    Linux系统的安装过程
    Oracle基础知识
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204961.html
Copyright © 2011-2022 走看看