我想创建一个GPS坐标的大型数据库,可以通过说“返回[此坐标]的’n’米范围内的所有坐标”来查询.
我需要它尽可能高效,因此循环遍历数据库中的所有坐标并计算坐标是否在’n’米内并不是一个理想的解决方案.
有更简单的解决方案吗?
谢谢
解决方法
我通常使用lat / lon进行这种查询.使用球面几何体,可以在特定点周围放置边界框.例如,假设您有一个点(X,Y),您希望1英里内的所有坐标(转换为米,我将作为练习留给读者).您可以确定(X-1,Y-1),(X 1,Y 1)的边界框.然后使用BETWEEN运算符查询点数据库(SELECT foo FROM bar在X-1和X 1之间的位置和在Y-1和Y 1之间的LON).然后,您将详细距离计算到边界框的“圆角”.
需要注意的是,经度线在球体的顶部更靠近在一起,因此距离赤道越远,你就会得到偏斜的结果.但它仍可用于快速筛选结果集.
谷歌“Great Circle Distance”的计算方法.
编辑:每英里有0.167469度经度(实际范围从0.167469到0.014564),每英里有0.014483度纬度.所以你的边界框是(lat – (英里* 0.014483),lon – (英里* 0.167469)),(lat(英里* 0.014483),lon(英里* 0.167469))