Php 查找路线起点和终点周围的标记(LatLng)

Php 查找路线起点和终点周围的标记(LatLng),php,mysql,sql,geolocation,haversine,Php,Mysql,Sql,Geolocation,Haversine,因此,我有一个数据库,其中保存了路线,即起点和终点,采用纬度/经度格式“STARTAT”、“STARTNG”和“EndLat”,即我的“EndLng”。目前,人们可以通过起点或终点搜索这些路线,例如,查找起点在我的停车位5英里以内的路线。。他们可以按起点或终点查找,例如,在该标记范围内查找起点,或在该标记范围内查找终点 我目前有一个基于哈弗森公式的SQL查询,这对我来说非常有效 我希望能够在一个SQL字符串中将两个查询连接在一起,以便能够找到起点在距离位置a的“x”英里范围内,终点在距离位置B的

因此,我有一个数据库,其中保存了路线,即起点和终点,采用纬度/经度格式“STARTAT”、“STARTNG”和“EndLat”,即我的“EndLng”。目前,人们可以通过起点或终点搜索这些路线,例如,查找起点在我的停车位5英里以内的路线。。他们可以按起点或终点查找,例如,在该标记范围内查找起点,或在该标记范围内查找终点

我目前有一个基于哈弗森公式的SQL查询,这对我来说非常有效

我希望能够在一个SQL字符串中将两个查询连接在一起,以便能够找到起点在距离位置a的“x”英里范围内,终点在距离位置B的“x”英里范围内的所有路线

我有一种感觉,做这件事最优雅的方式是在我现有的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英里以内的路线,那么EndLat和EndLng将被Startat和Starting取代

是否有人对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 end_distance,
       (
           [similar calculation for start here]
       ) AS start_distance
    FROM markers 
    HAVING start_distance < 15 and end_distance < 15
从概念上讲,联接用于添加来自另一个表的数据。您只需要在同一个表中施加另一个要求。

您不需要联接;您只需向查询中添加第二个条件:

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

从概念上讲,联接用于添加来自另一个表的数据。您只需要在同一个表中施加另一个要求。

太简单了!谢谢你,@dan1111-我想我可能是想得太多了。简单最有效,就是这么简单!谢谢你,@dan1111-我想我可能是想得太多了。简单最有效。