考虑到有数百万个可能重叠的可变大小的边界框减去宽度为5km的情况。
使用参数findIntersections(Longitude,Latitude,Radius)创建一个快速函数,输出是这些边界框id的列表,其中每个边界框原点位于函数参数尺寸的周边内。
如何优雅地解决这个问题?
答案 0 :(得分:4)
这通常使用R-tree数据结构
完成像mysql或postgresql这样的dbs都有GIS模块,它们使用引擎盖下的r树快速检索地图上某点附近的位置。
来自http://en.wikipedia.org/wiki/R-tree:
R树是树数据结构 类似于B树,但是被使用 用于空间访问方法,即用于 索引多维 信息;例如,(X,Y) 地理数据坐标。一个 R树常见的实际用法 可能是:“查找2中的所有博物馆 我目前的公里(1.2英里) 位置”。
数据结构用空格分割空间 分层嵌套,可能 重叠,最小边界 矩形(MBR,也称为 什么。边界框,即“矩形” R树中的“R”代表)。
Priority R-Tree(PR-tree)是一种变体,其最长运行时间为:
"O((N/B)^(1-1/d)+T/B) I/Os, where N is the number of d-dimensional (hyper-)
rectangles stored in the R-tree, B is the disk block size, and T is the output
size."
在实践中,大多数现实世界的查询都会有更快的平均案例运行时间。
fyi,除了发布的其他优秀代码之外,还有一些很酷的内容,例如SpatiaLite和SQLite R-tree module
答案 1 :(得分:1)
答案 2 :(得分:0)
这似乎是一种更好的更通用的方法GiST