• 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

  • 相关阅读:
    解决函数内this指向
    .Math 数值对象
    时间函数
    数学中的弧度和角度
    闭包
    在拖拽元素的时候,如果元素的内部加了文字或者图片,拖拽效果会失灵?
    正则
    JS高级-事件对象
    JS高级-事件捕捉
    JS高级-面向对象
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204961.html
Copyright © 2020-2023  润新知