GIS区域空间搜索一个必要的优化
2008-04-03 00:27
267 查看
在项目中需要对一个对象的周边做空间搜索,当空间数据表相当大的时候直接搜索是非常缓慢的。
比如在全上海的地物信息包括政务机关,商业,交通,娱乐,餐饮,医院,学校..等等 合计有数十万条记录。当对一个坐标点(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
比如在全上海的地物信息包括政务机关,商业,交通,娱乐,餐饮,医院,学校..等等 合计有数十万条记录。当对一个坐标点(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
相关文章推荐
- GIS区域空间搜索一个必要的优化
- 一个有趣的等式 (搜索用:优化 java 算法)
- elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能
- 一个表空间使用率查询sql的优化
- 颠倒一个字符串。优化速度。优化空间。
- 一个表空间使用率查询sql的优化
- 推荐一个搜索优化的站点
- 优化内存中DataTable搜索速度,IP区域汇总
- 找到一个字符串,优化速度,优化空间
- 告诉你一个搜索服务优化方案:基于RDF的知识图谱管理
- 从指定内存区域中new(分配)一个空间
- 如何选择一个虚拟空间运营商,价格为何是一个重要因素
- 分享一个针对触摸设备优化的图片幻灯jQuery插件 - touchtouch
- Mybatis 一个搜索框对多个字段进行模糊查询
- 实现对一个含n个元素的单链表的逆转.要去除存储链表本身所需的空间外,该过程只能使用固定大小的存储空间.
- 做一个网站搜索引擎优化项目的注意事项
- 面试题--位操作---延伸到一个用空间换取时间效率的例子
- 一个SQL Server 的存储过程,实现在表上的模糊搜索
- 关于SQL优化的一个小试例子
- [家里蹲大学数学杂志]第204期矩阵空间的一个直和分解