0

1つの地理コードリクエストを介して複数の住所を送信する方法はありますか?

geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        addMarker(results[0].geometry.location); 
        var the_string = generate_string(elements, a, address);

        infowindow[a] = new google.maps.InfoWindow({
            content: the_string
        });     

        google.maps.event.addListener(markersArray[a], "click", function() {
            infowindow[a].open(map, markersArray[a]);
        });
    } else {
        alert("Geocode was not successful for the following reason: " + status);
    }
});       

ここで、addressにはアドレスの配列が含まれています。理由は、GoogleマップとここでGoogle Map JavascriptAPIv3を使用しているときにここでOVER_QUERY_LIMITに対処された「OVER_QUERY_LIMIT」に遭遇することです-OVER_QUERY_LIMITエラー

クライアントのサーバー側バージョンの使用を開始するか、javascript apiを続行して、ジオコーダー呼び出しを介してアドレスの配列を送信するのに役立つかどうか疑問に思っていましたか?

あなたの意見や経験では、フィールドに無限の量のアドレスを入力してから[マップにプロット]ボタンを押すことができるアプリケーションがある場合、API呼び出し、ジオコーディングなどの観点からこれをどのように行いますか?

編集:////////////////////////

私は今このコードを使用しています:

class geocoder{
    static private $url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=";

    static public function getLocation($address){
        $url = self::$url.urlencode($address);

        $resp_json = self::curl_file_get_contents($url);
        $resp = json_decode($resp_json, true);

        if($resp['status']='OK'){
            return $resp['results'][0]['geometry']['location'];
        }else{
            return false;
        }
    }

    static private function curl_file_get_contents($URL){
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }
}      

そしてそれをそのように呼ぶ:

$address = urlencode($field_set["value"]);
$loc = geocoder::getLocation($address);

配置されているすべてのアドレスのループ内(この場合は20回)。

ループが2つの異なる長さと緯度を正しく持っているかどうかに関係なく、マップ上に10個のマーカーのみを配置します。

最後の10latlngsに対してnullを返します:s

編集:///////////////////////////

私はこれを呼び出すループにスリープを設定しました:

$loc = geocoder::getLocation($address);

8番目のジオコーディングごとに、1秒間一時停止してから続行します。これにより、すべてのジオコーダーの場所を正しくレンダリングできるようになります...しかし、綿毛のように見えます。

何か案は?

4

2 に答える 2

1

ジオコードを使用してこれを行う最善の方法は、経度と緯度の値をサーバーに保存することです。これにより、スクリプトを実行するたびに大量のジオコード リクエストを送信する必要がなくなります。

于 2012-11-19T13:25:44.747 に答える
0

いいえ、住所はドキュメントに記載されている住所である必要があります

ジオコーダーは結果の配列を返しますが、住所の配列をジオコード/リバースジオコードに入力することはできません。論理的すぎず、人々はそれを使用して制限を悪用します。

query_limit についてはあまり心配する必要はありません。これは、javascript API であり、バックエンドがない限り、1 日あたりの IP 単位であるためです。したがって、この機能を使用するユーザーが複数いる場合、制限は個別に設定され、合計されません。

ローカル環境があるために制限を大幅に超えている場合は、毎日最大 10 万件のリクエストがあるビジネス サービスに Google マップを使用する必要があるかもしれません。

于 2012-11-19T13:28:06.067 に答える