【问题标题】:Distance from point A to B using Google Maps, PHP and MySQL使用谷歌地图、PHP 和 MySQL 从 A 点到 B 点的距离
【发布时间】:2012-12-12 01:11:06
【问题描述】:

谁能帮忙。我只需要一个简单的脚本。我有一个表格发布到另一个页面。两个表单域是:

fromaddress 和 toaddress

我唯一需要的是一个脚本,它可以显示以公里为单位的距离以及使用谷歌地图所需的时间。我找到了几十个脚本,但我无法让它工作。地图已经存在,这段代码看起来很完美。

<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?key=AIzaSyDdDwV6_l5n2bS3gM6NBCla3RFLtIFc_HE&sensor=false"></script><script type="text/javascript">
    var directionDisplay;
    var directionsService = new google.maps.DirectionsService();
    var map;

    function initialize() {
        directionsDisplay = new google.maps.DirectionsRenderer();
        var myOptions = {
            zoom: 8,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
        }
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        directionsDisplay.setMap(map);

        var start = "<? echo $_POST[fromaddress]; ?>";
        var end = "<? echo $_POST[toaddress]; ?>";
        var request = {
            origin:start, 
            destination:end,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        };
        directionsService.route(request, function(response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
            }
        });

    }

    $(document).ready(function(){
        initialize();
    });        
</script>

但是我如何显示距离和时间。最好的选择是把它放在一个 php 值中,比如:

$distance = some-code;
$time = some-code-too;

非常感谢您的帮助。

【问题讨论】:

    标签: php google-maps-api-3 distance


    【解决方案1】:

    您需要为此使用不同的 API。首先,不要使用 JS 而是使用 PHP,这里的代码 sn-p 应该适合你;)

    $from = "Więckowskiego 72, Łódź";
    $to = "Gazowa 1, Łódź";
    
    $from = urlencode($from);
    $to = urlencode($to);
    
    $data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false");
    $data = json_decode($data);
    
    $time = 0;
    $distance = 0;
    
    foreach($data->rows[0]->elements as $road) {
        $time += $road->duration->value;
        $distance += $road->distance->value;
    }
    
    echo "To: ".$data->destination_addresses[0];
    echo "<br/>";
    echo "From: ".$data->origin_addresses[0];
    echo "<br/>";
    echo "Time: ".$time." seconds";
    echo "<br/>";
    echo "Distance: ".$distance." meters";
    

    输出:

    To: Gazowa 1, 91-076 Łódź, Poland
    From: Więckowskiego 72, Łódź, Poland
    Time: 206 seconds
    Distance: 1488 meters
    

    【讨论】:

      【解决方案2】:

      您可以通过将所有航段相加来计算完整的路线持续时间和距离:

        function computeTotals(result) {
        var totalDist = 0;
        var totalTime = 0;
        var myroute = result.routes[0];
        for (i = 0; i < myroute.legs.length; i++) {
          totalDist += myroute.legs[i].distance.value;
          totalTime += myroute.legs[i].duration.value;
        }
        totalDist = totalDist / 1000.
        document.getElementById("total").innerHTML = "total distance="+totalDist.toFixed(2) + " km ("+(totalDist*0.621371).toFixed(2)+" miles), time="+totalTime+" seconds";
        }
      

      这样称呼它:

          directionsService.route(request, function(response, status) {
              if (status == google.maps.DirectionsStatus.OK) {
                  directionsDisplay.setDirections(response);
                  computeTotals(response);
              }
          });
      

      working example

      【讨论】:

        猜你喜欢
        • 2016-09-22
        • 2020-12-12
        • 1970-01-01
        • 1970-01-01
        • 2016-04-12
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多