如何使自动填充显示仅显示特定国家/地区或邮政编码的结果?
这是我到目前为止所做的事情
var input = document.getElementById('searchTextField');
var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo('bounds', map);
答案 0 :(得分:2)
您有多种类型的过滤器:
如果您更喜欢视口偏移,则应指定一个位置(您想要检索其位置信息的纬度/经度)和一个半径(返回Place结果的距离(以米为单位))。 如果您更喜欢区域偏差,则必须提供区域(国家/地区代码,请参阅http://en.wikipedia.org/wiki/CcTLD)。
使用区域偏差的示例: maps.googleapis.com/maps/api/place/autocomplete/json?input=Vict&types=geocode®ion=CA&language=fr&sensor=true&key=AIzaSyAiFpFd85eMtfbvmVNEYuNds5TEF9FjIPI
您可以在官方google maps api文档中阅读更多内容:http://code.google.com/apis/maps/documentation/places/autocomplete.html
答案 1 :(得分:2)
您可以截取JSONP功能返回的google.maps.places.Autocomplete结果,并根据需要使用它们。
基本上,您在head元素上重新定义了appendChild方法,然后监视Google自动完成代码插入到JSONP的DOM中的javascript元素。随着javascript元素的添加,您可以覆盖Google定义的JSONP回调,以便访问原始自动填充数据,然后您可以按国家/地区进行限制并显示。
这是一个黑客,这里(我使用jQuery,但这不是必要的工作):
//The head element, where the Google Autocomplete code will insert a tag
//for a javascript file.
var head = $('head')[0];
//The name of the method the Autocomplete code uses to insert the tag.
var method = 'appendChild';
//The method we will be overriding.
var originalMethod = head[method];
head[method] = function () {
if (arguments[0] && arguments[0].src && arguments[0].src.match(/GetPredictions/)) { //Check that the element is a javascript tag being inserted by Google.
var callbackMatchObject = (/callback=([^&]+)&|$/).exec(arguments[0].src); //Regex to extract the name of the callback method that the JSONP will call.
var searchTermMatchObject = (/\?1s([^&]+)&/).exec(arguments[0].src); //Regex to extract the search term that was entered by the user.
var searchTerm = unescape(searchTermMatchObject[1]);
if (callbackMatchObject && searchTermMatchObject) {
var names = callbackMatchObject[1].split('.'); //The JSONP callback method is in the form "abc.def" and each time has a different random name.
var originalCallback = names[0] && names[1] && window[names[0]] && window[names[0]][names[1]]; //Store the original callback method.
if (originalCallback) {
var newCallback = function () { //Define your own JSONP callback
if (arguments[0] && arguments[0][3]) {
var data = arguments[0][4]; //Your autocomplete results
//SUCCESS! - Limit results here and do something with them, such as displaying them in an autocomplete dropdown.
}
}
//Add copy all the attributes of the old callback function to the new callback function. This prevents the autocomplete functionality from throwing an error.
for (name in originalCallback) {
newCallback[name] = originalCallback[name];
}
window[names[0]][names[1]] = newCallback; //Override the JSONP callback
}
}
//Insert the element into the dom, regardless of whether it was being inserted by Google.
return originalMethod.apply(this, arguments);
};