我有一个使用谷歌地图自动填充库的地址搜索框:
var autocompleter = new google.maps.places.Autocomplete(item);
奇怪的是,地址只返回名称属性:
Object {name: "138 Manukau Road, Pukekohe, New Zealand"}
但其他地址提供的数据更多,例如:
Object {address_components: Array[7], adr_address: "<span class="street-address">430 Queen St</span>, …n>, <span class="country-name">New Zealand</span>", formatted_address: "430 Queen St, Auckland, Auckland 1010, New Zealand", geometry: Object, icon: "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"…}address_components: Array[7]adr_address: "<span class="street-address">430 Queen St</span>, <span class="extended-address">Auckland</span>, <span class="locality">Auckland</span> <span class="postal-code">1010</span>, <span class="country-name">New Zealand</span>"formatted_address: "430 Queen St, Auckland, Auckland 1010, New Zealand"geometry: Objecthtml_attributions: Array[0]icon: "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"id: "00fce9b1c43ac960068949cbf32eecb587b0b020"name: "430 Queen St"place_id: "ChIJQfHW8OVHDW0RyHgQRLy8fKc"reference: "CqQBlgAAAIDnkWNQ4cmU624FV6l_bAxmI27czZoytmzrrEWVaXgR5LcZuFqt1cL3WIMzoWhmZNhftRzhLUVwpFjqmw3qwKIqugj02HrvU5x6PtUvepPNPV-08pin_PvRU-__mMMH3N2vILIOLM_AnYFMqNG5MArF4ChZXJxZj6vk7PI3ORJe1W6QjIXoPgesL379E4WUCjrZ0fjv3KgqzB-G4f-8A5MSEN5S47-QZqkY5sl37cIQFWQaFLg4InSVLpYGg8n1gGO958TcA4UK"scope: "GOOGLE"types: Array[1]url: "https://maps.google.com/maps/place?q=430+Queen+St,+Auckland,+Auckland+1010,+New+Zealand&ftid=0x6d0d47e5f0d6f141:0xa77cbcbc441078c8"vicinity: "Auckland"__proto__: Object
我在2012年找到了一个由某人提出的similar issue,看起来没有参加。
答案 0 :(得分:3)
这个问题对我来说是间歇性地发生的,而且通常是突然发生的。
事实证明,如果您只使用名称属性从自动填充中获得结果,则可以使用google.maps.places.AutocompleteService完成作业。
例如,如果您只返回一个名称(在el中发送输入元素),则调用此方法
function getPlace(result, el, callback) {
var autocompleteService = new google.maps.places.AutocompleteService();
if (result.name.length > 0) {
var d = { input: result.name, offset: result.name.length };
autocompleteService.getPlacePredictions(d, function (list, status) {
if (list == null || list.length == 0) callback(null);
var placesService = new google.maps.places.PlacesService(el);
var ref = { 'reference': list[0].reference }
placesService.getDetails(ref, function (detailsResult, placesServiceStatus) {
if (placesServiceStatus == google.maps.GeocoderStatus.OK) {
callback(detailsResult);
}
else {
callback(null);
}
});
});
}
}
答案 1 :(得分:2)
令人惊讶的是,同一地址现在返回正确的数据,谷歌必须正在观察这些错误并尽快修复它们。
答案 2 :(得分:1)
也许谷歌服务无法对您的地址进行地理编码,只返回找到的地址名称。原因可能是该服务没有为您提供这些地址的附加数据。
您不能向用户显示这些不完整的地址,也不能尝试通过6
等其他服务对该地址进行地理编码
http://wiki.openstreetmap.org/wiki/Nominatim
答案 3 :(得分:1)
来自Google Maps Autocomplete Reference:
如果有详细信息,则返回用户选择的地点的详细信息 成功检索。 否则返回存根Place对象,with name属性设置为输入字段的当前值。
所以答案是getPlace方法只是针对特定的地方失败了。不知道如何解决这个问题,但让我们更接近答案。
编辑:固定它!
对于我的应用,我正在为谷歌地图(几何和地点)加载多个库。切换库加载的顺序修复了问题,我不知道为什么。
变化:
maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=geometry,places
到
maps.googleapis.com/maps/api/js?v=3&key=[KEY]&libraries=places,geometry