基于谷歌地理编码器中未知地址的建议

时间:2010-04-09 12:26:57

标签: javascript google-maps geocoding

使用Googles地理编码器服务在地图上显示城市时;填写不存在的城市会导致错误。

有没有办法根据填写的城市显示一些建议?

var geocoder = new GClientGeocoder();
function showAddress(address, zoom) {

          geocoder.getLatLng(
           address,
           function(point) {
            if (!point) {
                  //no point found....
              //Suggest some points :)
            } else {
                map.setCenter(point, zoom);

            }
          }
         );
        }
showAddress('Someplace, Nederland', 14);

3 个答案:

答案 0 :(得分:1)

建议在结果的“地标”属性中返回。我正在使用v3,这有效,请尝试使用address =“Washington Blvd”

来调用它
if (geocoder) {
                geocoder.getLocations(
                address,
                function (results) {
                    if (!results) {
                        alert(address + " no suggestions");
                    } else {
                        $('#output').html('');
                        if (results.Placemark) {
                            for (var i = 0; i < results.Placemark.length; i++) {
                                $('#output').append(i + ': ' + results.Placemark[i].address + '<br/>');
                            }
                        }
                    }
                });
            }

答案 1 :(得分:0)

如果找到匹配,则会将匹配作为地址返回,这些是建议。它不应该返回错误,如果找不到匹配则应该返回一个空列表。你可以发布代码吗?

答案 2 :(得分:0)

如果您只是对城市进行地理编码,则可能需要考虑开始构建自己的城市到坐标缓存。

这是您可能需要考虑的一种方法:

  • 提示用户输入城市名称。
  • 首先向服务器发出AJAX请求,以检查缓存中是否存在该城市名称。
  • 如果是,请继续执行JavaScript逻辑,就好像您从Google Geocoder获取坐标一样。
  • 如果您的缓存中没有城市名称,请向Google Geocoder发送请求,就像您目前所做的那样。
  • 如果Google Geocoder返回肯定结果,请向您的服务器发出另一个AJAX请求,以便将此城市及其坐标存储在缓存中。你永远不会再问谷歌这个城市的坐标。然后在JavaScript应用程序中正常进行。
  • 如果Google Geocoder返回“未知地址”,则告诉用户未找到此城市名称,并建议您使用更常见的城市名称重试。记下尝试的原始城市名称。使用Google Geocoder测试第二次尝试,如果成功,则将城市名称的同义词(第一个尝试,第二个成功,如果尚未存在)保存到缓存中。

通过这种方法,您还可以通过这种方式对缓存进行播种,以解析您已经知道Google无法进行地理编码的城市名称。