1

getCoordinate() と getDistance() の 2 つの関数があります。どちらも Google API に非同期リクエストを行う必要があり、結果は json ファイルです。

取得距離:

function getDistance(origin,destination,mode)
{
var url="http://maps.googleapis.com/maps/api/distancematrix/json?";

var origin="origins="+origin;
var destination="&destinations="+destination;
var mode="&mode="+mode;
var language="&language=fr-FR"
var sensor="&sensor=false";

var def = new jQuery.Deferred(); 
var city;
$.getJSON(url+origin+destination+mode+language+sensor,function(json)
{
    if (json.status=="OK")
    {
    var distance=json.rows[0].elements[0].distance.value;
    }
    def.resolve(distance);
});
return def.promise();
}

これは getCoordinates です。

function getCoordinate(address)
{

var url="http://maps.googleapis.com/maps/api/geocode/json?address=";
var sensor="&sensor=false";
var def = new jQuery.Deferred(); 
var city;
$.getJSON(url+address+sensor,function(json)
{
    var lat=json.results[0].geometry.location.lat;
    var lng=json.results[0].geometry.location.lng;
    var dist=google.maps.geometry.spherical.computeDistanceBetween(myCenter,new google.maps.LatLng(lat,lng));
    console.log('address:'+dist/1000+'km');                                                    
    var coord=[lat,lng];
    def.resolve(coord);

});
return def.promise();
}

getDistance() 内で getCoordinate() メソッドの結果を使用する必要がありますが、非同期モードのため、Google から結果が返される前に getDistance 命令が実行されます。

   for (i=0;i<addresses.length;i++)
{
$.when(getCoordinate(addresses[i])).then(function (coord) {
var myLatitude=coord[0];
var myLongitude=coord[1];
addressList[j++]=[coord[0],coord[1]];
    $.when(getDistance(lat+","+lng,myLatitude+","+myLongitude,"driving")).then(function(distance)
    {
    var test=i;
    var distTab=[];
    switch(i){
        case 0:
        //do Something
        break;

        default:
        //do something
        break;
          }
        }
    });

});
}       console.log("the dist:"+distance);
    console.log("coordinate:"+myLatitude+","+myLongitude);
    console.log("Center:"+lat+","+lng);
4

2 に答える 2