Вот мой текущий код о том, как я получаю различные компоненты.
function getGeocodeFull($address)
{
if (empty($address)) return false;
$_geocode = false;
if (($_geocode = $this->getCache($address)) === false) // check if address is has a cache
{
if (($results = $this->geoGetCoordsFull($address)) !== false)
{
// sloooooooooopppy.. yes these can all be combined, i know.
if (!isset($results->results[0]->geometry->location->lat)) return false;
if (!isset($results->results[0]->geometry->location->lat)) return false;
if (!isset($results->results[0]->formatted_address)) return false;
if (!isset($results->results[0]->address_components)) return false;
$_geocode['lat'] = $results->results[0]->geometry->location->lat;
$_geocode['lon'] = $results->results[0]->geometry->location->lng;
$_geocode['address'] = $results->results[0]->formatted_address;
foreach ($results->results[0]->address_components as $component)
{
if (isset($component->types))
{
foreach ($component->types as $type)
{
switch ($type)
{
case 'route':
$_geocode['street'] = $component->long_name;
break;
case 'locality':
$_geocode['city'] = $component->long_name;
break;
case 'administrative_area_level_2':
$_geocode['county'] = $component->long_name;
break;
case 'administrative_area_level_3':
$_geocode['area'] = $component->long_name;
break;
case 'postal_code':
$_geocode['zip'] = $component->short_name;
break;
}
}
}
}
$this->putCacheFull($address, $_geocode['lat'], $_geocode['lon'], $_geocode['address'], $_geocode['street'], $_geocode['city'], $_geocode['county'], $_geocode['area'], $_geocode['zip']);
}
}
return $_geocode;
}
geoGetCoordsFull () просто использует file_get_contents на странице геокода API карты Google, затем декодирует результаты и возвращает их.
Я не слишком большой поклонник того, на что это похоже. Кажется, что это может быть очень противоречивым. Есть ли другие ЛУЧШИЕ решения для получения всех данных от Google или любого другого сервиса?
Я бы предпочел другой сервис, который не ограничивает запросы (или незаконно использовать несколько сервисов геокодирования, таких как bing / yahoo / etc) ?? (извините за то, что выкинули другой вопрос)
В любом случае, большая помощь будет очень признательна!