Javascript 基于谷歌未知地址的建议';地球编码器

Javascript 基于谷歌未知地址的建议';地球编码器,javascript,google-maps,geocoding,Javascript,Google Maps,Geocoding,使用谷歌地理编码服务在地图上显示城市时;填写不存在的城市会导致错误 有没有办法根据填写的城市显示一些建议 var geocoder = new GClientGeocoder(); function showAddress(address, zoom) { geocoder.getLatLng( address, function(point) { if (!point) {

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

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

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);

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

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

如果你只是地理编码城市,你可能想考虑开始建立自己的城市来协调缓存。 这是您可能需要考虑的一种方法:

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

使用这种方法,你也可以缓存你的缓存,以解决你已经知道谷歌不能地理编码的城市名称。

< P>如果你只是地理编码城市,你可能会考虑开始建立自己的城市来协调Cache。 这是您可能需要考虑的一种方法:

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

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

建议将在结果的Placemarks属性中返回。我使用的是v3,这很有效,试着用address=“Washington Blvd”来称呼它

if(地理编码器){
geocoder.getLocations(
地址:,
职能(结果){
如果(!结果){
警报(地址+无建议);
}否则{
$('#output').html('');
if(results.Placemark){
对于(var i=0;i);
}
}
}
});
}

建议将在结果的Placemarks属性中返回。我使用的是v3,这很有效,试着用address=“Washington Blvd”来称呼它

if(地理编码器){
geocoder.getLocations(
地址:,
职能(结果){
如果(!结果){
警报(地址+无建议);
}否则{
$('#output').html('');
if(results.Placemark){
对于(var i=0;i);
}
}
}
});
}

一个好的、合理的方法。我要实施这个。但我怎么才能推荐其他城市呢?就像我在Endhoven上搜索一样,这是找不到的,它应该建议Eindhoven或Meerhoven等等。@richardverbruggen:用户第一次搜索
Endhoven
,系统会要求他输入一个更普通的名字。用户输入
Eindhoven
,谷歌就会找到它。您应该在缓存中同时存储指向同一lat/long的
Endhoven
Eindhoven
。然后,当用户下次搜索
Endhoven
,你的缓存会立即返回结果,甚至不会点击谷歌。最终,缓存将包含每个城市的许多同义词。如果您的应用程序将本地化(即仅在荷兰),这将是最有效的。。。。。。它是w
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/>');
                            }
                        }
                    }
                });
            }