0

我需要使用 Google Maps (v3) 检查输入到搜索字段中的地址是否确实存在并将其打印在屏幕上。只需检查是否为该地址找到了纬度/经度对,就很容易做到这一点。但是,我有一个问题。

当用户输入一个广泛的搜索,例如像第一街这样的常见街道名称时,我需要打印出所有找到的结果,以便用户可以选择一个。此时我不需要在地图上显示结果,只需在页面上显示它们的列表即可。我在网上找到了一些应该这样做的代码,我对其进行了修改,但它不起作用。我收到“未定义 GClientGeocoder()”错误,但我怀疑即使我通过代码也会出现问题,所以我想知道是否有更多经验的人可以为我指明正确的方向。

这是代码,我将搜索词“第一街”硬编码到函数中以进行测试。

function showAddress() {
    var geo;
    geo = new GClientGeocoder();
    var search = 'First Street';
    // ====== Perform the Geocoding ======        
    geo.getLocations(search, function (result)
      {
        //map.clearOverlays(); 
        if (result.Status.code == G_GEO_SUCCESS) {
          // ===== If there was more than one result, "ask did you mean" on them all =====
          if (result.Placemark.length > 1) { 
            document.getElementById("message").innerHTML = "Did you mean:";
            // Loop through the results
            for (var i=0; i<result.Placemark.length; i++) {
              document.getElementById("message").innerHTML += "<br>"+(i+1)+": "+result.Placemark[i].address;
            }
          }
          // ===== If there was a single marker =====
          else {
            document.getElementById("message").innerHTML = "Result found:"+result.Placemark[0].address;
          }
        }
        // ====== Decode the error status ======
        else {
          alert('No results found');
        }
      }
    );
  }

“消息”只是一个普通的<div>. 该函数是从 body 标签调用的:

<body onLoad='showAddress()'>
4

1 回答 1

1

此代码是为过时的 V2-API 创建的,我猜您正在加载 V3-API 脚本。

当我使用 V2-API 运行它时,它运行良好。

V2 和 V3 在任何方面都不兼容。

翻译成 V3 的代码:

    function showAddress() {
      var geo = new google.maps.Geocoder();

      var address = 'First Street';
      geo.geocode({"address": address},
                      function(result,status)
                      {
                        var out='no results found';
                        if (status == google.maps.GeocoderStatus.OK) 
                        {
                          if(result.length==1)
                          {
                            out = "Result found:"+result[0].formatted_address;
                          }
                          else
                          {
                            out = "Did you mean:";
                            for(var i=0;i<result.length;++i)
                            {
                              out+="<br>"+(i+1)+": "+result[i].formatted_address;
                            }
                          }

                        }

                        document.getElementById("message").innerHTML = out;
                      }
                    );
  }

http://jsfiddle.net/doktormolle/xUHAR/

于 2012-01-29T11:44:14.367 回答