2

我正在尝试开发一个站点,该站点根据一组预定义的坐标在 Google 地图上模拟移动的公共汽车。我正在研究 PHP、HTML 和 Javascript(Google Maps Api)。保存坐标的数据库位于本地主机上。我的问题与向数据库中所有坐标移动的公共汽车的实际模拟有关。

解释一下:数据库如下所示:

 id    latt       lon
 1.   53.4877   -2.27519
 2.   53.4859   -2.27489

等有14个条目。

连接数据库的 PHP 脚本:

<?php
$host = "localhost";
$user = "hidden";
$pass = "";

$databaseName = "database";
$tableName = "locations";


$con = mysql_connect($host, $user, $pass);
$dbs = mysql_select_db($databaseName, $con);

$result = mysql_query("SELECT * FROM $tableName");

$data = array();

while ($row = mysql_fetch_row($result)) {
    $data[] = $row;
}  

echo json_encode($data);
?>

javascript函数:

    function moveBus(map, marker) 
        {

            $.ajax({                                      
                url: 'api2.php',                           
                data: "",                        

                dataType: 'json',                
                async: false,     
                success: function(data)          
                {

                    for (var i in data)
                    {
                        var row = data[i];             
                        var latt = row[1];           
                        var lon = row[2]; 

                        moveMarker(map, marker, latt, lon);
                    }
                } 
            })    
        }; 

moveMarker 函数:

        function moveMarker( map, marker, latt, lon) {

        setTimeout( function(){ marker.setPosition( new google.maps.LatLng( latt ,       lon  ) ); }, 3500 );
        };

正如您所理解的那样,我现在只是在循环完成后在最后一组坐标上发送总线标记,而不是显示到达那里的整个路线。我尝试了很多不同的方法来实现这一点,但都没有成功。

有任何想法吗?

先感谢您。

4

1 回答 1

1

您的 setTimeouts 同时完成 3500 毫秒。您应该根据它们的顺序增加点的超时时间......类似于 position_on_route *350​​0。

 for (var i in data)
                {
                    var row = data[i];             
                    var latt = row[1];           
                    var lon = row[2]; 
                    timeout=i*3500;
                    moveMarker(map, marker, latt, lon, timeout);
                }




 function moveMarker( map, marker, latt, lon, timeout) {

    setTimeout( function(){ marker.setPosition( new google.maps.LatLng( latt ,       lon  ) ); }, timeout );
    };
于 2013-08-12T19:35:23.410 回答