到目前为止,我已经做了一些阅读,我正处于十字路口。
我的情况是这样的:
- 带有 lat/lng 值列表的表格(我们可以将它们视为“城市”),半径为
- 包含运动值列表的表格,包括 lat/lng
我的要求是我返回移动列表并包括最近的城市(如果它在半径内)。到目前为止,我已经使用 PHP 中的半正弦公式为我返回的每条记录执行此操作,但它并不是特别有效。
我发现的两个选项是:
1/在 MySQL 中创建一个存储过程来执行 Haversine 的那一侧(类似于:Proximity Search)
2/使用“边界框”方法来定位城市而不是圆形. 这不是一个大问题,并且可以简化 sql。
但是,在某些情况下,如果 lat 和 lng 为负数,则确定点是否位于左上角和右下角之间的典型逻辑将不起作用。在 PHP 中,为了解决这个问题,我会做一个快速的“如果”,我会检查左上角的 lat/lng 是否大于右下角,并根据结果使用 AND/OR。