我正在使用 Maps JavaScript API 文本搜索(新)
searchByText()
函数来获取网络应用程序中的地点列表。它应该根据 @types/google.maps类型返回
google.maps.places.Place[]
,根据上面链接的文档返回 and。但我得到了一个奇怪的对象,其中包含中间键 Eg、Fg、Hg、Ig、Jg、Kg、Lg、Mg、Ng、Og、Pg、Qg、Rg、Sg、Tg、Ug、Vg 以及实际响应 Place
Eg
键中的对象以及其他一些键中的一些重复的废话(尽管大多数是未定义的)。这是怎么回事?该应用程序是 Vue,这个结果是通过 vite 开发服务器运行它时获得的。尚未测试任何其他版本。
代码:
const loader = new Loader({
apiKey,
version: '3.58'
});
const places: google.maps.PlacesLibrary = await loader.importLibrary('places');
const request = {
includedType: 'locality',
textQuery: 'Bogota',
fields: ['location', 'formattedAddress', 'types', 'id']
}
const result = await places.Place.searchByText(request);
console.log(result);
给出(省略未定义的键):
{
"places": [
{
"id": "ChIJQycDzk1B1moR7LsQHWG_MKs",
"Eg": {
"id": "ChIJQycDzk1B1moR7LsQHWG_MKs",
"location": {...},
"formattedAddress": "...",
"types": [
"doctor",
"point_of_interest",
"health",
"establishment"
]
},
"Ng": {},
"Ug": [
"doctor",
"point_of_interest",
"health",
"establishment"
],
"Fg": {}
}
]
}
我认为你可以手动从响应中提取有意义的数据,例如:
const sanitizePlaces = (response: any) => {
return response.places.map((place: any) => ({
id: place.Eg?.id,
location: place.Eg?.location,
formattedAddress: place.Eg?.formattedAddress,
types: place.Eg?.types || []
}));
};
const sanitized = sanitizePlaces(result);
console.log(sanitized);
我认为你应该在像 vite dev 这样的开发服务器中运行一次,这可能会暴露生产中出现的问题。
const request = {
includedType: 'locality',
textQuery: 'Bogota',
fields: ['geometry.location', 'formatted_address', 'types', 'place_id']
};