Javascript 为什么Google Place搜索只返回此地址的一个结果?

Javascript 为什么Google Place搜索只返回此地址的一个结果?,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我正在尝试使用谷歌API对地址进行地理编码。这里的地理编码意味着给定一个地址,计算出纬度和经度。通过我的系统发送的地址往往有打字错误和缺少的组件。谷歌建议对像我这样模棱两可的地址使用 该服务对于在自动化系统中进行不明确的地址查询特别有用,字符串的非地址组件可以匹配业务和地址。不明确地址查询的示例包括地址不完整、地址格式错误或包含非地址组件(如业务名称)的请求 我在页面上添加了脚本,如下所示: <script type="text/javascript" src=&quo

我正在尝试使用谷歌API对地址进行地理编码。这里的地理编码意味着给定一个地址,计算出纬度和经度。通过我的系统发送的地址往往有打字错误和缺少的组件。谷歌建议对像我这样模棱两可的地址使用

该服务对于在自动化系统中进行不明确的地址查询特别有用,字符串的非地址组件可以匹配业务和地址。不明确地址查询的示例包括地址不完整、地址格式错误或包含非地址组件(如业务名称)的请求

我在页面上添加了脚本,如下所示:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"></script>
问题是,德克萨斯州泰勒市有两个不同的百老汇(100 N百老汇和100 S百老汇),但API只返回100 N百老汇。我需要的结果,包括两个结果,以便用户可以选择正确的一个。我如何做到这一点


我还尝试使用
findPlaceFromQuery()
nearbySearch()
。前者也只返回一个结果,而后者没有放置地址的位置(我认为后者更适合在给定区域查找所有类型的内容,如餐厅)。

自动完成返回两个选项,您可以让用户选择正确的一个

另外,搜索“德克萨斯州百老汇泰勒100号”只返回“北百老汇100号”,而搜索“德克萨斯州百老汇泰勒100号”则返回两个结果。这似乎是API或API使用的数据中的一个bug

代码片段(带有百老汇100街、德克萨斯州泰勒市和自动完成的位置搜索):

“严格使用”;
//此示例需要Places库。包括图书馆=地方
//第一次加载API时的参数。例如:
// 
函数initMap(){
const map=new google.maps.map(document.getElementById(“map”){
中心:{
lat:-33.8688,
液化天然气:151.2195
},
缩放:13
});
const card=document.getElementById(“pac卡”);
常量输入=document.getElementById(“pac输入”);
map.controls[google.maps.ControlPosition.TOP\u RIGHT].push(卡片);
常量请求={
查询:“德克萨斯州百老汇泰勒大街100号”,
字段:[“名称”、“几何体”]
};
let service=new google.maps.places.PlacesService(地图);
service.findPlaceFromQuery(请求,(结果,状态)=>{
if(status==google.maps.places.PlacesServiceStatus.OK){
console.log(“results.length=“+results.length”);
让bounds=new google.maps.LatLngBounds();
for(设i=0;i”+place.formatted\u地址);
google.maps.event.addListener(标记,“单击”,()=>{
infowindow.setContent(place.name);
信息窗口。打开(地图、标记);
});
返回标记;
}
const autocomplete=new google.maps.places.autocomplete(输入);//将地图的边界(视口)属性绑定到autocomplete对象,
//因此,自动完成请求使用
//请求中的边界选项。
autocomplete.bindTo(“bounds”,map);//设置用户选择位置时返回的数据字段。
设置字段([“地址组件”、“几何体”、“图标”、“名称]);
const infowindow=new google.maps.infowindow();
const infowindowContent=document.getElementById(“infowindowContent”);
setContent(infowindowContent);
const marker=new google.maps.marker({
地图,
主播点:新google.maps.Point(0,-29)
});
autocomplete.addListener(“place\u changed”,()=>{
infowindow.close();
marker.setVisible(假);
const place=autocomplete.getPlace();
如果(!place.geometry){
//用户输入了未建议的地点的名称,然后
//按Enter键,或Place Details请求失败。
window.alert(“没有可供输入的详细信息:“+place.name+””);
返回;
}//如果该地点有几何图形,则将其显示在地图上。
标记器.设置位置(位置.几何.位置);
marker.setVisible(true);
让地址=”;
if(位置、地址和组件){
地址=[
(地址为[0]&&
place.address\u组件[0]。短\u名称)||
"",
(地点、地址和组件[1]&&
place.address\u components[1]。缩写\u name)||
"",
(地点、地址和组件[2]&&
place.address\u components[2]。缩写(名称)||
""
].加入(“”);
}
infowindowContent.children[“place icon”].src=place.icon;
infowindowContent.children[“地名”].textContent=place.name;
infowindowContent.children[“placeaddress”]。textContent=地址;
信息窗口。打开(地图、标记);
});//在单选按钮上设置侦听器以更改位置上的筛选器类型
//自动完成。
}
/*始终明确设置贴图高度以定义div的大小
*包含映射的元素*/
#地图{
身高:100%;
}
/*可选:使示例页面填充窗口*/
html,
身体{
身高:100%;
保证金:0;
填充:0;
}
#描述{
字体系列:Roboto;
字体大小:15px;
字体大小:300;
}
#infowindowcontent.title{
字体大小:粗体;
}
#信息窗口内容{
显示:无;
}
#地图#信息窗口内容{
显示:内联;
}
.pac卡{
利润率:10px 10px 0;
边界半径:2px 0 0 2px;
框大小:边框-
var mapElem = document.getElementById('map');
var service = new google.maps.places.PlacesService(mapElem);
var bounds = { 
    north: 50, 
    south: 20, 
    east: -60, 
    west: -130 
};
var searchOptions = { 
    bounds: bounds, 
    query: '100 Broadway, Tyler, TX' 
};
service.textSearch(searchOptions, (results, status) => { 
    console.log(results, status); 
});