Google Maps API - 使用getLatLng方法的GClientGeocoder不一致?

时间:2009-01-03 01:24:35

标签: google-maps

我注意到我的地理编码器在下面显示的代码中不一致,因为在调用“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 个答案:

答案 0 :(得分:1)

我在我的ASP.NET应用程序中看到了这一点。我的问题是我在显示地址之前验证了地址和

  1. 我的部分地址不正确。

  2. 他们的地址验证系统只能在客户的每次通话中处理一定数量的请求。

  3. 最好在地理编码(IMO)之前擦除地址。

    尝试验证您的地址,并尝试限制您发送的地址数量,以便测试并查看每个请求是否连续。

    希望有所帮助。

答案 1 :(得分: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
      }
    }
  );
}  

答案 2 :(得分:1)

我不确定addPreCount()的作用。但我认为很明显,超时应该是索引乘以实际超时常量。

因此假设定义的超时常量为225.传递给地理编码器包装器的超时时间为:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);

答案 3 :(得分:0)

我实际上发现这不是导致这种不一致的“验证地址”代码,而是 - 只是地图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);
    }