1

我正在寻找查询以获取两点之间的路线。

我有这个链接,让我们说:

example.com/any? lat1 = 31.0000 & lng1 = 31.0000 & lat2 = 31.0000 & lng2 = 31.0000

所以在函数内部,我想编写一个查询到表示例的查询,

id | lat1    | lng1    | lat2    | lng2     | time | distance_between_inKm
1  | 31.0000 | 31.0000 | 31.0000 | 31.0000   | 30   | 20

所以现在我想去链接并获得最近的|| 最近的*路线或行

我从链接 lat1 & lng1 和 lat2 & lng2 得到这些,所以我想得到两者最接近的。

所以我想要的是我有一个表格,其中包含折线的静态数据和 2 点的信息,所以我想像 Google Matrix api 一样使用它们,但是从我的服务器,让我们说:

更新

我尝试了这个查询,但它忽略了 AND:

    SELECT id,distance_between,time_between,start_latitude, start_longitude,end_latitude,end_longitude, SQRT(
        POW(69.1 * (start_latitude - 31.908482676577364), 2) +
        POW(69.1 * (35.1666776731924 - start_longitude) * COS(start_latitude / 57.3), 2)) 

AND
        SQRT(
        POW(69.1 * (end_latitude - 31.966051), 2) +
        POW(69.1 * (35.894587 - end_longitude) * COS(end_latitude / 57.3), 2))
        AS distance
    FROM matrix_api USE INDEX (start_latitude,start_longitude,end_latitude,end_longitude,distance_between,time_between) HAVING distance < 0.2 ORDER BY distance LIMIT 1;

所以我想要这样的东西给输入 1 和 2 并给我有 2 的行

同时关闭起始纬度和结束纬度

更新

我也试过这个,仍然没有运气:

    SELECT id,distance_between,time_between,start_latitude, start_longitude,end_latitude,end_longitude, 
SQRT(
    POW(69.1 * (start_latitude - 32.016659), 2) +
    POW(69.1 * (35.727839 - start_longitude) * COS(start_latitude / 57.3), 2) AND

POW(69.1 * (end_latitude - 31.966051), 2) +
    POW(69.1 * (35.894587 - end_longitude) * COS(end_latitude / 57.3), 2)

) 

    AS distance
FROM matrix_api USE INDEX (start_latitude,start_longitude,end_latitude,end_longitude,distance_between,time_between) HAVING distance < 0.2 ORDER BY distance LIMIT 1;

样本输入:

lat1=0.0000 lng1=0.0000
lat2=0.0000 lng2=0.0000

输出:

The row that I already have in table Distance between: 0.0 And time between: 0.0

所以在表里面我们有 lat1 和 lng1 lat2 lng2 和之间的距离。我想在最接近 lat2 lng2 的同一时间得到最接近 lat1 lng1 的行。但是这里 2 保存在同一行中,所以我希望它像我需要或找到的行内的 Google API Matrix 最接近的距离。

4

1 回答 1

0

您的查询中的一个小变化:

SELECT id,distance_between,time_between
,start_latitude, start_longitude,end_latitude,end_longitude
FROM
( 
 SELECT id,distance_between,time_between
 ,start_latitude, start_longitude,end_latitude,end_longitude,
 SQRT(
 POW(69.1 * (start_latitude - 31.908482676577364), 2) +
 POW(69.1 * (35.1666776731924 - start_longitude) * COS(start_latitude / 57.3), 2)
 ) as startlatlngDistance
 ,SQRT(
 POW(69.1 * (end_latitude - 31.966051), 2) +
 POW(69.1 * (35.894587 - end_longitude) * COS(end_latitude / 57.3), 2))
 AS endlatlngDistance
 FROM matrix_api 
 USE INDEX (start_latitude,start_longitude,end_latitude
 ,end_longitude,distance_between,time_between) 
) as A
WHERE startlatlngDistance < 0.2 AND endlatlngDistance < 0.2 
ORDER BY startlatlngDistance LIMIT 1;
于 2020-05-21T09:21:47.153 回答