[英]Parse addresses through Google Places API
我有一個巨大的(50k)數據庫,地址如下
12340 Via Moura, San Diego, CA, United States
17029 Avenida Cordillera, San Diego, CA, United States
3324 Sandleheath, Sarasota, FL 34235, USA
它們是使用Google Places Autocomplete js api自動完成的,然后存儲在數據庫中。 現在,我需要獲取這些地址的不同部分,包括state
, city
, zip
等。 是否可以使用某些Google API? 有任何想法嗎?
我找到了解決方案。 需要對Google Places API進行兩次API調用。 第一次調用通過完整地址獲取PLACE_ID,第二個通過PLACE_ID獲取有關地址的所有數據。
$params = [
'key' => env('GOOGLE_API_KEY'),
'query' => 'FULL_ADDRESS',
'types' => 'address'
];
$guzzle_client = new Client();
$res = $guzzle_client->request('GET', 'https://maps.googleapis.com/maps/api/place/textsearch/json?parameters',
[
'query' => $params
]
);
$prediction = json_decode($res->getBody(), true);
if ($prediction['status'] == 'OK') {
$paramsID = [
'key' => env('GOOGLE_API_KEY'),
'placeid' => $prediction['results'][0]['place_id'],
];
$guzzle_clientID = new Client();
$resID = $guzzle_clientID->request('GET', 'https://maps.googleapis.com/maps/api/place/details/json',
[
'query' => $paramsID
]
);
$predictionID = json_decode($resID->getBody(), true);
$address_components = $predictionID['result']['address_components'];
$address = [];
foreach ($address_components as $component) {
switch ($component['types'][0]) {
case 'street_number':
$address['street_number'] = $component['short_name'];
break;
case 'route':
$address['street_name'] = $component['short_name'];
break;
case 'locality':
$address['city'] = $component['short_name'];
break;
case 'administrative_area_level_1':
$address['state'] = $component['short_name'];
break;
case 'postal_code':
$address['zip'] = $component['short_name'];
break;
}
}
$addresses[]= $address;
} else {
dd('Not found place');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.