Google Maps API-getLatLngメソッドを使用したGClientGeocoderの矛盾?

StackOverflow https://stackoverflow.com/questions/408444

  •  03-07-2019
  •  | 
  •  

質問

「getLatLng」の前;メソッドは10個の有効な場所を示していますが、このコード行の後、実際に表示されるポイントの数は、検索するたびに異なります(同じ検索条件-fyi)ランダムに5と10の間..非常に奇妙です

これに似た問題はありますか?もしそうなら、それらをどのように解決しましたか?

geocoder = new GClientGeocoder();
geocoder.getLatLng(address, function(point) {
if (point) {
        var icon = new GIcon();
        var marker = new GMarker(point, { icon: icon });
        GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
        map.addOverlay(marker);
役に立ちましたか?

解決 4

実際には、「住所の確認」ではないことがわかりました。この不整合を引き起こしているコードが、代わりに-マップAPIが大量のジオコーダ呼び出しを必要としていないという事実だけで、各リクエスト間に単純な225msのタイムアウトを追加し、これがトリックを行いました

function preGeoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus) {
        addPreCount();

        //don't change this timeout as it was the lowest timeout that still worked w/ the api
        var timeout = parseInt(precount) * 225;

        window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
    }

他のヒント

ASP.NETアプリでこれを見ました。私の問題は、アドレスを表示する前に検証していたことでした

  1. 住所の一部が間違っていました。

  2. アドレス検証システムは、クライアントによるすべての呼び出しで特定の量のリクエストのみを処理できます。

ジオコーディング(IMO)の前に住所をスクラブすることをお勧めします。

アドレスを確認し、テストするためだけに送信するアドレスの量を制限してみてください。リクエストごとに連続しているかどうかを確認してください。

役立つこと。

このように試してみてください。このように、1回の実行で34ポイントを超えます:

function addAddress(address,runde) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        //alert(address + " not found");
        if (runde<5) { // rekursiv, try adress 5 times to get
            window.setTimeout(function() {addAddress(address,runde+1);}, 1000); // wait 1 second bevor next try
            }
      } else {
        var marker_add = new GMarker(point);
        //alert(marker.getLatLng());
        leftClick(0, marker_add.getLatLng()); // function, add marker to map
      }
    }
  );
}  

addPreCount()の動作がわかりません。しかし、タイムアウトは、インデックスに実際のタイムアウト定数を乗じたようなものでなければならないことは明らかだと思います。

したがって、定義されたタイムアウト定数が225であると仮定すると、ジオコーダーラッパーに渡されるタイムアウトは次のようになります。

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top