【发布时间】:2012-03-01 08:13:50
【问题描述】:
我有一个包含两列的表格:纬度和经度。我想在“矩形”(好吧,在纬度/经度坐标度量中的矩形)边界框内获取所有对象:最小-最大纬度和最小-最大经度。基本上可以归结为以下伪 SQL:
SELECT * FROM MyTable WHERE lat < :maxlat AND lat > :minlat
AND lon < :maxlon AND lon > :minlon
索引表的最佳解决方案是什么?两列索引?两列上有两个索引?空间索引?
我想知道在这种情况下是否真的需要空间索引,因为您需要一个特殊的列、特定的库,所有这些都以牺牲数据库的可移植性和简单性为代价。
注意:我想保持这个问题与数据库无关,但为了完整起见,我提到我正在使用 PostGreSQL 8,不带(目前)PostGIS。
【问题讨论】:
-
你能保证你只会执行这种类型的空间查询吗?如果您甚至需要一个简单的加法,例如查找两点之间的真实世界(大圆)距离,那么所有这些空间库都会派上用场……另外,请考虑如果边界框穿过 +/- 经度会发生什么,例如170,0 -170,10(这是太平洋地区的有效边界框)。或许可以考虑在gis.stackexchange.com 中询问
-
是的,我可以保证我只会执行这种类型的空间查询。而且我已经有了计算两点之间大圆距离的函数(Haversine 函数)。至于穿越太平洋,它不在覆盖区域(但可以通过切换 minlon 和 maxlon 的小测试轻松处理)。
标签: database postgresql postgis