我注意到我的地理编码器在下面显示的代码中不一致,因为在“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. 他们的地址验证系统只能在客户的每次通话中处理一定数量的请求。

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

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

    希望有所帮助。

尝试这样的尝试,像这样我一次跑得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