GoogleのマップAPIを使用して2つのアドレスをジオコードする。返された結果を延期し、文字列アドレスの座標を取得したら$.when().then()
メソッドを使用してロジックを実行します。問題は、たとえエラーがあっても、APIは常に解決された結果を返すことです。たとえば、要求のタイムアウトの代わりにインターネット接続がない場合、私はERROR
と結果をnull
として取得します。無効なアドレスを入力すると、ステータスがZERO_RESULTS
になり、結果は空の配列[]
になります。適切な座標結果を得ることだけに興味があるので、他のすべての応答をジオコーディングエラーとして処理したいと思います。これは、わからない方法です。また、同じ問題のために、入力フィールドがジオコーディングの前に空であるかどうかを確認する必要があることがわかります。Googleマップapiでアドレスをゲーミングし、結果を遅らせる
私はちょうど非同期フローに精通し、いくつかのガイダンスが必要です。 jquery 1.9.2とGoogleマップAPIv3を使用しています。 (私はすべての条件をハードコードすることができますが、私はコーディングスキルを向上させ、より汎用的なものを作りたいと思っています)。
私のコードもここに示します。
function geocode(addString) {
var deferred = $.Deferred();
var geocoder = new google.maps.Geocoder();
var request = {
address: addString
};
geocoder.geocode(request, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
deferred.resolve(results[0].geometry.location);
}
else {
// no idea what to do here
}
});
return deferred;
}
function Options() {
var origin = $("#origin-field").val();
var destination = $("#destination-field").val();
if (origin != "" && destination != ""){
var originCoords = geocode(origin);
var destinationCoords = geocode(destination);
$.when(originCoords, destinationCoords)
.then(function(originCoordinates, destinationCoordinates) {
console.log(originCoordinates.lat() + ',' + originCoordinates.lng());
console.log(destinationCoordinates.lat() + ',' + destinationCoordinates.lng());
}, function() {
toastMessage("Geo-coding error");
});
}
else {
toastMessage("Origin and/or Destination missing");
}
}
可能性のあるステータスコードの一覧は、ドキュメントで確認できます。https://developers.google.com/maps/documentation/javascript/reference#GeocoderStatus – xomena