mysql中的道路距离计算

时间:2017-09-26 13:23:53

标签: mysql

我试图从原点(海德拉巴坐标-17.3850,78.4867)获取车站的道路距离。用下面的查询得到距离,但它是空中距离。我需要路边距离。

我的sql:

SELECT latitude, longitude,Station_Name, Station_Key,
(6371 * 2 * ASIN(SQRT(
            POWER(SIN((17.3850 - ABS(latitude)) * PI()/180 / 2),
            2) + COS(17.3850 * PI()/180 ) * COS(ABS(latitude) *
            PI()/180) * POWER(SIN((78.4867 - longitude) *
            PI()/180 / 2), 2) ))) AS distnce
FROM abrs_stations

所以任何人都可以告诉我如何实现这一目标。提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用您拥有的数据,您可以计算出空中距离。如果您只需要知道海德拉巴的道路距离(而不是确切路径),那么您可以找到数据库中每个位置的道路距离(例如使用谷歌地图)并将其存储在您的数据库中。如果您想动态确定道路距离,那么您必须寻找一个API(可能是Google Maps API),它可以为您提供两个坐标之间的道路距离。

无论哪种方式, NO 你都不能完全用SQL做到这一点。

答案 1 :(得分:0)

您可以使用Google API查找两个lat long之间的距离

https://maps.googleapis.com/maps/api/distancematrix/json?origins=" . $from_latitude . "," . $from_longitude . "&destinations=" . $destination_latitude . "," . $destination_longitude . "&mode=driving&language=pl-PL

使用此网址,您可以获得远距离的响应。

    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" . $from_latitude . "," . $from_longitude . "&destinations=" . $destination_latitude . "," . $destination_longitude . "&mode=driving&language=pl-PL";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);

    $response_a = json_decode($response, true);

  $distance=  $dist = $response_a['rows'][0]['elements'][0]['distance']['text'];

此处$distance是两个纬度之间的距离google API