Google Maps V3 - 保存到数据库

时间:2011-05-12 06:14:50

标签: javascript database maps

我想在访问数据库中存储路径的距离,我几乎就在那里,但只有最后一个距离被提交到数据库。你能帮助我吗? 只有一个地址作为原点,我正在尝试将四个地址作为目的地。无论如何,谢谢,比尔。

<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps JavaScript API</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">    </script>   
</head>

<body>

<script type="text/javascript">

var directionsService = new google.maps.DirectionsService();
var origem;
var destino;
var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Z:\\Projetos\\GoogleMaps\\GoogleMaps.mdb;"

//Database Connection
var cn = new ActiveXObject("ADODB.Connection");
cn.Open(strConn);

//Recordset
var rsOrigem = new ActiveXObject("ADODB.Recordset");
var sqlOrigem = "select * from tblOrigem";
rsOrigem.Open(sqlOrigem, cn);

var rsDestino = new ActiveXObject("ADODB.Recordset");
var sqlDestino = "select * from tblDestino";
rsDestino.Open(sqlDestino, cn);

rsOrigem.Movefirst();
rsDestino.Movefirst();

while(!rsDestino.eof) {
origem = rsOrigem.fields("Endereco").value;
destino = rsDestino.fields("Endereco").value;

var myOptions = {
 zoom:7,
 mapTypeId: google.maps.MapTypeId.ROADMAP
}

var request = {
   origin: origem, 
   destination: destino,
   travelMode: google.maps.DirectionsTravelMode.DRIVING
};

directionsService.route(request, function(response, status) {
  if (status == google.maps.DirectionsStatus.OK) {

     var rsGravar = new ActiveXObject("ADODB.Recordset");
     rsGravar.Open("Select * From tblDestino Where Endereco = '" + destino + "'", cn, 1, 3);

     rsGravar.Edit;
     rsGravar.fields("Distancia").value = response.routes[0].legs[0].distance.value;
     rsGravar.Update;
  }
});

rsDestino.MoveNext();
}

rsOrigem.Close();
rsDestino.Close();
rsGravar.Close();
cn.Close();

</script> 
</body> 
</html>

1 个答案:

答案 0 :(得分:0)

我怀疑您在using loops and closures时遇到JavaScript中的常见问题。根据您的描述,实际上只使用循环中的最后一个值。 directionsService.route使用回调,很可能变量destino始终引用循环中的最后一个值。

尝试使用闭包来封装代码以调用directionsService.route,如下所示:

while(!rsDestino.eof) {
    origem = rsOrigem.fields("Endereco").value;
    destino = rsDestino.fields("Endereco").value;

    (function(origin, dest){
        //use variable 'origin' and 'dest' in the code
        var myOptions= ...
        var request = ...
        directionsService.route ....
    })(origem, destino);
}