Tengo una base de datos enorme (50k) con direcciones como
12340 Via Moura, San Diego, CA, United States 17029 Avenida Cordillera, San Diego, CA, United States 3324 Sandleheath, Sarasota, FL 34235, USA Se autocompletaron con google Places Autocomplete js api y luego se almacenaron en db. Ahora necesito obtener partes distintas state , la city , zip , etc. de estas direcciones. ¿Se puede hacer con algo de google de API? ¿Algunas ideas?
Encontré una solución. Necesita hacer dos llamadas API a la API de Google Places. La primera llamada para obtener PLACE_ID por dirección completa, la segunda para obtener todos los datos sobre la dirección por 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'); }