0

我正在尝试存储 GPS 位置数据库并运行查询以查找给定半径内的点以及最近的点。我正在使用 mysql 并且一直在研究空间扩展。我不确定我是否了解如何实际使用空间扩展来执行我在位置半径查询中寻找的内容。

所以这就是我对我的选择的想法:

  1. 将 lat 和 long gps 坐标存储为 db 中的浮点索引变量。当我得到一个点 gps 坐标和一个范围时,计算要查询的最大和最小 lat 和 long 值,然后根据这些中的距离函数进行排序以进行排序。

  2. 使用空间扩展。我不太肯定这会奏效。未实现 Distance() 函数。使用空间索引需要找到一个边界框(可行)并调用 MBRContains 边界框函数来找到该边界框中的点。但是,点的边界为零,因此 MBRContains 函数不适用于点。

我不确定执行此操作的标准方法是什么(似乎没有),并且非常感谢任何经验/想法/对决定的帮助。我目前正在使用 mysql 5.13,我很确定即使是 5.5 也没有距离度量。

另外 - 即使 2. 有效,哪一个会更快?请让我知道您的想法是什么,尤其是如果您确定/已经看到某些东西可以用于快速和大型查找!

Mysql 空间索引:http ://dev.mysql.com/doc/refman/5.5/en/using-a-spatial-index.html

4

2 回答 2

1

像这样的东西应该可以用来获取坐标和任意点之间的距离,在这个例子中是“原点”。

SELECT 
place.name,
place.foo,
ROUND( SQRT(
   POW((69.1 * ({$origin->lat} - place.lat)), 2) 
 + POW((53.0 * ({$origin->lon} - place.lon)), 2)
), 1) AS distance
FROM place
ORDER BY distance ASC

希望有帮助...

于 2010-07-08T02:52:37.237 回答
0

gps坐标有多近?如果它们相对接近以至于地球的曲率不是问题,您可以首先尝试使用自己的线性距离进行查询,看看它是如何执行的。但是,这确实需要全表扫描,并且如果点没有充分聚集,则可能不会产生准确的结果。那时,您需要继续进行边界框 + 大弧距计算。

于 2010-07-08T02:54:00.800 回答