在我使用的 Node.js 微服务中:
"@google/maps": "^0.5.5"
googleMapsClient.geocode({address: '160 Market St, Paterson, NJ 07505'})
.asPromise()
.then((response) => {
console.log("result: " + JSON.stringify(response.json));
})
.catch((err) => {
console.log("error: " + err);
});
作为回应,我得到:"location_type":"ROOFTOP"
和 "types":["street_address"]
这意味着地址有效
如果我尝试验证相同的地址但状态无效,例如“否”,它仍然返回 "location_type":"ROOFTOP"
和 "types":["street_address"]
。假设因为 google API 对其进行了格式化,因此可以在响应中看到:
"formatted_address":"160 Market St, Paterson, NJ 07505, USA"
有时 google API 会返回 "location_type":"ROOFTOP"
和 "types":["premise"]
当然,我可以按 location_type
和 types
过滤结果,但如果可以在 @types/googlemaps AutoComplete
中找到地址,我确实希望将其视为有效。这是我在 UI(Angular)中使用的:
"@types/googlemaps": "3.30.16"
const autocomplete = new google.maps.places.Autocomplete(e.target, {
types: ['address']
});
var place = google.maps.places.PlaceResult = autocomplete.getPlace();
即使它只是在 AutoComplete
中定义为 types: ['address']
,也可以在 "@google/maps"
中找到 "types":["street_address"]
或 "types":["premise"]
。那么如何让 Node.js 只返回可以在 AutoComplete 中找到的地址呢?
自 Places API @google/maps
库也支持,可以这样完成:
//1. query predictions
googleMapsClient.placesQueryAutoComplete(
{
input: "160 Market St, Paterson, NJ 07505"
},
function(err, response) {
if (!err) {
if (response.json.predictions.length === 0) {
console.log("Place not found");
} else {
var prediction = response.json.predictions[0]; //select first prediction
//2. query place by prediction
googleMapsClient.place(
{
placeid: prediction.place_id
},
function(err, response) {
if (!err) {
console.log(response.json.result); //prinat place
}
}
);
}
}
}
);
说明:
- 首先使用
placesQueryAutoComplete
函数,该函数返回基于查询的查询预测数组
place
函数通过提供从先前响应中提取的 placeId
参数来返回地点详细信息
我是一名优秀的程序员,十分优秀!