因此,我有一个保存“路线”的数据库(即起点和终点,采用纬度/经度格式“ StartLat”,“ StartLng”和“ EndLat”,即“ EndLng”)。目前,人们可以按起点或终点搜索这些路线(例如“查找和起点在距LatLng位置5英里以内的路线”)。他们可以通过起点或终点来查找它们(例如“在此标记范围内找到起点”,或“在此标记范围内找到终点”)。

我目前有一个基于Haversine公式的SQL查找,这对我来说很好。

我想要做的是将两个查询合并到一个SQL字符串中,以便“查找起点在“ Place A”的'x'英里以内,终点在'x'内的所有路线英里的“地方B”。

我觉得最优雅的方法是在现有的SQL字符串上创建联接,但是我一生都无法解决如何做到这一点!

我当前的SQL字符串如下所示:

SELECT ID, RouteCode, (3959 * acos(cos(radians('51.5073346')) * cos(radians( EndLat )) * cos(radians( EndLng ) - radians('-0.1276831')) + sin(radians('51.5073346')) * sin(radians( EndLat )))) AS distance FROM markers HAVING distance < 15


(因此,在上面的示例中,用户将搜索终点在距坐标51.5073346,-0.1276831 15英里以内的所有路线。如果他们想查找起点在其坐标15英里以内的路线LatLng,然后将EndLat和EndLng替换为StartLat和StartLng)。

是否有人对SQL命令有足够的了解,能够帮助我确定所需的SQL字符串?

最佳答案

您不需要join;您只需要在查询中添加第二个条件:

SELECT ID,
       RouteCode,
       (
           3959 * acos(cos(radians('51.5073346')) * cos(radians( EndLat )) *
           cos(radians( EndLng ) - radians('-0.1276831')) +
           sin(radians('51.5073346')) *
           sin(radians( EndLat )))
       ) AS end_distance,
       (
           [similar calculation for start here]
       ) AS start_distance
    FROM markers
    HAVING start_distance < 15 and end_distance < 15


从概念上讲,join用于添加另一个表中的数据。您只想在同一张表中强加另一个要求。

关于php - 查找路线起点和终点附近的标记(LatLng),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14356508/

10-12 18:44