web-dev-qa-db-ja.com

クエリ制限を超えるジオコーディングAPI

サーバー側でジオコーディングAPIを使用して、latlngで住所を変換しています。私はOVER_QUERY_LIMITステータスに直面しました:-サーバーは2500の制限を超えませんでした(この日のわずかなリクエスト)-多くのリクエストを同時に実行しませんでした(一度に1つのリクエストのみ)

そんなことがあるものか ?翌日、ジオコーディングはうまく機能していましたが、長期的にはアプリケーションが正しく機能することが心配です。

前もって感謝します。

18
user1283452

これが、過去にこの問題を処理した方法です。結果のステータスを確認し、制限エラーが発生した場合は、少し遅れて再試行します。

function Geocode(address) {
    geocoder.geocode({
        'address': address
    }, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            var result = results[0].geometry.location;
            var marker = new google.maps.Marker({
                position: result,
                map: map
            });
        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {    
            setTimeout(function() {
                Geocode(address);
            }, 200);
        } else {
            alert("Geocode was not successful for the following reason:" 
                  + status);
        }
    });
}

更新:おっと、サーバー側の部分に誤って表示されてしまいました。これはC#バージョンです。

public XElement GetGeocodingSearchResults(string address)
{
    var url = String.Format(
         "https://maps.google.com/maps/api/geocode/xml?address={0}&sensor=false",
          Uri.EscapeDataString(address)); 

    var results = XElement.Load(url); 

    // Check the status
    var status = results.Element("status").Value;

    if(status == "OVER_QUERY_LIMIT")
    {
        Thread.Sleep(200);
        GetGeocodingSearchResults(address);
    }else if(status != "OK" && status != "ZERO_RESULTS")
    {
        // Whoops, something else was wrong with the request...     
    }

    return results;
}
34
Bryan Weaver

私たちにもこの問題があり、解決策はグーグルのAPIを捨てることでした。ジオコーディングが必要な場合は、制限なしで同等に効果的な代替案が多数あります。私たちはmapquest APIを選びました。ジオコーディングコールに上限がないため、より高速で信頼性が高くなり、ジオコーディングリクエストを1つのコールにバッチ処理するAPIが本当に気に入っています。

必要な他の機能がある場合は、それらを考慮に入れる必要がありますが、単一の機能の場合、ブロックで最大のAPIを使用することは必ずしも最良の選択ではありません。

developer.mapquest.com

4
NSProgrammer

クライアント側でジオコーディングを行うこともできます。これが 記事 何かクライアントサイドと何かサーバーサイトをするアプローチを比較しています。

2
Mano Marks

アドレスが一致しないが見つかった場合も、Googleは同じ応答を返します。割り当て量を超えているとは限りません。いずれにせよ、あなたは例外をキャッチし、その周りに救済を実装する方が良いでしょう。

1
svilenv

ここでuser276648と同じ問題。 APIキーを追加し、httpをhttpsに変更することで解決しました。

1
jhondel

Google、Bing、MapQuest、Yahoo!マップ(このAPIはまだ存在していますか?)は非常に強力なツールです。彼らはあなたが提供する住所を解釈し、ジオコーディングのために適切にフォーマットされた住所にするために可能なすべてのことを行うのを後回しにする多くの馬力を持っています。ある程度は無料です。それらにはボリューム制限があり、かなり厳密な利用規約(TOS)があります。これは、サービスを商用利用し始める場合、特に別の製品に統合する場合に重要となる可能性があります。

それらはすべて、アドレス検証ではなく「アドレス近似」を行うことに注意してください。住所が存在する場合、住所が特定の道路のどこにあるかをおおよそ教えてくれます。彼らはあなたが探しているアドレスが存在することをあなたに言うことはできません。これを確認する1つの方法は、Googleマップで自分の住所を確認することです。ストリートビューにズームインすると、場所が正確に特定されている場合でも、「住所はおおよそです」と表示されます。彼らは比較して、どのアドレスが本物であるかを知るためのアドレスのマスターリストを持っていません。そのためには、何らかのアドレス検証が必要になります。

アドレス検証は、無料のマッピングサービスとほぼ同じ方法で特定のアドレスを標準化およびクリーンアップしますが、配信可能なアドレスのUSPSデータベースと比較して、アドレスが実際に存在するかどうかを確認します。確認された住所は、精度を高めてジオコーディングできます。

そこには多くの良い住所検証サービスがあります。完全な開示のために、私は1つの創設者-- SmartyStreets です。

0
Jonathan Oliver