Google Distance Matrix需要返回该值

时间:2015-08-15 06:12:55

标签: javascript jquery google-maps google-maps-api-3

我使用谷歌距离矩阵api从以下方式获得两个地理点的最短距离:

public class BarCodeScanner extends Activity  {


private EditText contentTxt;
private EditText contentTxt2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_bar_code_scanner);


    contentTxt = (EditText) findViewById(R.id.scan_content);
    contentTxt2 = (EditText) findViewById(R.id.scan_content2);


}

public void openScanner1 (View view) {
    IntentIntegrator scanIntegrator = new IntentIntegrator (this);
    scanIntegrator.initiateScan();
    startActivityForResult(scanIntegrator, 1);
}

public void openScanner2 (View view) {
    IntentIntegrator scanIntegrator = new IntentIntegrator(this);
    scanIntegrator.initiateScan();
    startActivityForResult(scanIntegrator, 2);
}



public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (requestCode == 1&& resultCode == RESULT_OK) {
        String scanContent = scanningResult.getContents();
        contentTxt.setText(scanContent);
    }

    else if (requestCode == 2&& resultCode == RESULT_OK){
        String scanContent = scanningResult.getContents();
        contentTxt2.setText(scanContent);
    }

    else{
        Toast toast = Toast.makeText(getApplicationContext(),
                "No scan data received!", Toast.LENGTH_SHORT);
        toast.show();
    }

}

在这段代码中,我已成功获得最短距离。但是我需要在调用方法 calculateDistances()时返回值,而不是提醒值。我怎么能用回调方法!。

2 个答案:

答案 0 :(得分:2)

距离矩阵服务是异步,因此,您需要传递callback方法以在请求完成时执行,以处理结果。但您可以考虑将异步API转换为 promises

以下示例演示了如何使用jQuery将Distance Matrix服务API转换为promises:

var origin1 = new google.maps.LatLng(9.6667, 80.0000);
var destinationA = new google.maps.LatLng(9.6689, 80.0059);



function calculateDistances(origins,destinations) {
            var service = new google.maps.DistanceMatrixService();
            var d = $.Deferred();
            service.getDistanceMatrix(
                {
                    origins: origins,
                    destinations: destinations,
                    travelMode: google.maps.TravelMode.DRIVING,
                    unitSystem: google.maps.UnitSystem.METRIC,
                    avoidHighways: false,
                    avoidTolls: false
                }, 
                function(response, status){
                  if (status != google.maps.DistanceMatrixStatus.OK) {
                     d.reject(status);
                  } else {
                     d.resolve(response);
                  }
                });
            return d.promise();
}

        


        calculateDistances([origin1],[destinationA])
           .done(function(response){

                var origins = response.originAddresses;

                for (var i = 0; i < origins.length; i++) {
                    var results = response.rows[i].elements;
                    for (var j = 0; j < results.length; j++) {
                        //console.log(results[j].distance.text);
                        document.getElementById('result').innerHTML += results[j].distance.text;
                    }
                }

           })
           .fail(function(status){
              document.getElementById('result').innerHTML = 'An error occured. Status: ' + status;
           });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?signed_in=true"></script>
<div id='result'/>

答案 1 :(得分:1)

我将数组作为全局变量,包含元素数量和全局变量。然后,在回调中,我将增加元素的数量,并将当前数组元素设置为距离。

希望这能回答你的问题。祝你好运!