Javascript 谷歌自动完成服务没有';t返回某些城市的结果

Javascript 谷歌自动完成服务没有';t返回某些城市的结果,javascript,angular,google-maps,google-maps-api-3,google-api,Javascript,Angular,Google Maps,Google Maps Api 3,Google Api,我正在开发Angular 6应用程序 我发现GoogleAutoComplete没有为有效输入返回正确的值 当我为某些城市调用API时,它返回零结果,或者忽略调用告诉我指定输入的函数 这些是城市: 尼什、尼斯科、格尔利茨 即使它适用于其他地方 这是我的密码: const firstResult = $('.pac-container .pac-item:first').text(); //returns 'NiskoPolska' console.log(fir

我正在开发Angular 6应用程序

我发现GoogleAutoComplete没有为有效输入返回正确的值

当我为某些城市调用API时,它返回零结果,或者忽略调用告诉我指定输入的函数

这些是城市:

尼什、尼斯科、格尔利茨

即使它适用于其他地方

这是我的密码:

        const firstResult = $('.pac-container .pac-item:first').text(); //returns 'NiskoPolska' 
        console.log(firstResult);
        const autoCompleteService = new google.maps.places.AutocompleteService();
        const placesService = new google.maps.places.PlacesService(self.searchPlacesRef.nativeElement);

        autoCompleteService.getPlacePredictions({ input: firstResult }, function (results, status) {
          if (status == google.maps.places.PlacesServiceStatus.OK) {
            placesService.getDetails({ placeId: results[0].place_id }, function (result, stat) {
              if (stat == google.maps.places.PlacesServiceStatus.OK) {
               console.log(result);
              }
            });
          }
        });

有人能告诉我为什么它在某些城市不起作用吗

我可以看到您正在使用Google Maps JavaScript API中的位置自动完成服务。您只使用
input
参数,这意味着您正在全局搜索,并且没有应用任何类型筛选器。当您全局搜索时,只会返回与您的文本匹配的最突出的功能。例如,如果您搜索我的示例中所示的“Niš”,您将得到以下预测

如果您打算只搜索城市,则可以在自动完成请求中添加类型过滤器,如中所示。在这种情况下,您将获得以下全局预测

正如您这次所看到的,Niš是第二个预测,但您的代码只依赖于此列表中的第一个结果。在我看来,这不是正确的假设。Nisku可能在全球层面上更为突出,所以你不应该期望Nis作为第一个元素出现

如果您在自动完成请求中提供了区域偏差,则可以稍微改进结果列表。例如,如果您对欧洲城市感兴趣,请通过添加位置和半径参数,将“偏差结果”设置为“欧洲”。我是在家里做的。这次Niš是第一个可以正确使用代码的预测

这是我的最后一个代码片段,它将nish作为第一个预测

函数initService(){
var displaySuggestions=功能(预测、状态){
if(status!=google.maps.places.PlacesServiceStatus.OK){
警报(状态);
返回;
}
预测。forEach(函数(预测){
var li=document.createElement('li');
变量图标\u url=”https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"; 
var icon=document.createElement(“IMG”);
icon.src=icon\u url;
icon.width=24;
图标高度=24;
li.appendChild(图标);
appendChild(document.createTextNode(prediction.description));
document.getElementById('results').appendChild(li);
});
};
var service=new google.maps.places.AutocompleteService();
service.getPlacePredictions({
输入:'Niš',
类型:['(城市)],
地点:新google.maps.LatLng(49.18004,13.554544),
半径:1000000
},建议);
}
#地图{
身高:100%;
}
html,正文{
身高:100%;
保证金:0;
填充:0;
}
#右面板{
字体系列:“Roboto”,“sans-serif”;
线高:30px;
左侧填充:10px;
}
#右面板选择,#右面板输入{
字体大小:15px;
}
#右面板选择{
宽度:100%;
}
#右面板i{
字体大小:12px;
}

“Niš”的查询建议:


    我之所以发表评论,也是因为我对此很好奇。我一直认为这是因为我有一个免费的密钥,或者谷歌地图api为了优化目的选择了削减不太知名的城市。所以你说它返回
    ZERO_结果
    ,你说它在搜索
    nisko
    时返回
    NiskoPolska
    。因此,您的问题不清楚您搜索的内容和返回的内容。@MrUpsidown我的意思是这个jquery返回它
    const firstResult=$('.pac container.pac item:first').text()。对不起,我编辑了这个问题,使它看起来更清楚。似乎是在德国。你能解释一下这个地址中的尼什和尼斯科是什么吗?@xomena尼什是塞尔维亚最大的城市之一,尼斯科是波兰的一个小城市。这是三个不同的城市,我发现它们缺乏结果。反响很好。但是,我无法将其应用于我的业务逻辑。用户应该能够使用街道名称甚至他最喜欢的咖啡店来搜索位置。在这种情况下,唯一可靠的方法是提供位置偏差(如果可能的话)。我添加了地理位置偏差,这确实有所帮助。现在它开始工作了。非常感谢