我有一个巨大的(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
...这些地址等。
可以用一些谷歌的API来做吗?
有任何想法吗?
我找到了解决方案。
需要对 google place 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');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)