Google Maps V3 - Сохранить в базе данных - PullRequest
0 голосов
/ 12 мая 2011

Я хочу сохранить расстояние от маршрута в базе данных доступа, я почти на месте, но только последнее расстояние зафиксировано в базе данных.Вы можете мне помочь?Там только один адрес в качестве источника, и я пытаюсь с четырьмя адресами в качестве пункта назначения.В любом случае, спасибо, Билл.

<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 голосов
/ 12 мая 2011

Я сомневаюсь, что вы столкнулись с общей проблемой в 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...