わかりました、このトピックがすでに何度も議論されていることは知っていますが、私の問題を解決するための答えが見つかりません.
だから私は簡単な考えをしようとしています:私は次distance is : " + CalculateDistance(position);
のような文字列を作成しています:必要な結果は次のようなものdistance is 5kms (8min)
です.
CalculateDistance(position)
DistanceMatrix という Google マップ API を呼び出して 2 点間の距離を計算する関数です。API はここに文書化されており、指定されたサンプルは完全に機能します。私はそれを次のように適応させました:
function CalculateDistance(position)
{
var service = new google.maps.DistanceMatrixService();
var destination = new google.maps.LatLng(/* some lat/lng */);
service.getDistanceMatrix(
{
origins: [position],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status) {
if (status == google.maps.DistanceMatrixStatus.OK)
{
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
var results = response.rows[0].elements;
distanceMatrixResult = results[0].distance.text + " ( " + results[0].duration.text + " min)";
}
あ、ちなみにdistanceMatrixResult
はグローバル変数です。実際には、results[0].distance.text の内容を取得し (コンソールに出力するcallback()
と、値は問題ありません)、その値を "Distance is" と連結するだけです。誰かがよりスマートなソリューションを持っている場合は、それを歓迎します!
API 呼び出しは非同期であり、私の場合、distanceMatrixResult
結果の文字列は常に空です。しかし、その値をコンソールに記録すると、文字列が作成された後にdistanceMatrixResult
値が適切になりました。
私が書きたいのは次のとおりです。
• 呼び出しCalculateDistance
(コールバックを非同期で呼び出します)
•callback
が終了したら、文字列とdistanceMatrixResult
値を連結します。
などのDeferredをいくつか試しましたが、成功$.done()
し$.when().then()
ません...
誰かが私を助けることができますか?
ありがとうございました !