2011-05-12 7 views
0

경로 데이터베이스의 경로에서 거리를 저장하고 싶습니다. 거의 다 왔지만 마지막 거리 만 데이터베이스에 저장됩니다. 나 좀 도와 줄 수있어? 발신지 주소는 하나 뿐이며 목적지로 네 개의 주소를 사용하려고합니다. 어쨌든 고마워, 빌.Google지도 V3 - 데이터베이스에 저장

<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> 

답변

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); 
} 
관련 문제