google-maps-api-3 - página - habilitar la google maps javascript api en la sección de api de la google api console
Dirección de codificación geográfica: obtener el distrito de una determinada dirección(API de Google) (2)
Tengo una base de datos con direcciones exactas (calle, no, ciudad, región / área, país). Sin embargo, me preguntaba si había una forma de usar Google API para obtener el distrito de una ciudad (por ejemplo, "Manhattan") si estamos en Nueva York.
Toda la otra información que ya tengo en la base de datos, así que solo necesitaría el distrito si hay uno (por supuesto, esto será solo en ciudades más grandes) ...
ACTUALIZAR:
Encontré esta función en http://www.techques.com/question/1-3151450/Google-geolocation-API---Use-longitude-and-latitude-to-get-address y traté de cambiar formatted_address
a sublocality ( incluso otros como short_name, etc.) pero no devuelve nada ... ¡cualquier ayuda sería muy apreciada! ¡¡Gracias!!
function reverse_geocode($lat, $lon) {
$url = "http://maps.google.com/maps/api/geocode/json?latlng=$lat,$lon&sensor=false";
$data = json_decode(file_get_contents($url));
if (!isset($data->results[0]->formatted_address)){
return "unknown Place";
}
return $data->results[0]->formatted_address;
}
Encontrará esta información dentro de una solicitud de geocodificación, cuando exista un resultado con los types
establecidos en
[ "sublocality", "political" ]
Ejemplo: 317 Madison Ave, Nueva York
Modificación de la función anterior para facilitar el acceso a los componentes de respuesta:
/**
* @param $a mixed latitude or address
* @param $b mixed optional longitude when $a is latitude
* @return object geocoding-data
**/
function geocode($a, $b=null) {
$params=array(''sensor''=>''false'');
if(is_null($b))
{
$params[''address'']=$a;
}
else
{
$params[''latlng'']=implode('','',array($a,$b));
}
$url = ''http://maps.google.com/maps/api/geocode/json?''.http_build_query($params,'''',''&'');
$result=@file_get_contents($url);
$response=new StdClass;
$response->street_address = null;
$response->route = null;
$response->country = null;
$response->administrative_area_level_1 = null;
$response->administrative_area_level_2 = null;
$response->administrative_area_level_3 = null;
$response->locality = null;
$response->sublocality = null;
$response->neighborhood = null;
$response->postal_code = null;
$response->formatted_address = null;
$response->latitude = null;
$response->longitude = null;
$response->status = ''ERROR'';
if($result)
{
$json=json_decode($result);
$response->status=$json->status;
if($response->status==''OK'')
{
$response->formatted_address=$json->results[0]->formatted_address;
$response->latitude=$json->results[0]->geometry->location->lat;
$response->longitude=$json->results[0]->geometry->location->lng;
foreach($json->results[0]->address_components as $value)
{
if(array_key_exists($value->types[0],$response))
{
$response->{$value->types[0]}=$value->long_name;
}
}
}
}
return $response;
}
//sample usage
echo ''<hr/>''.geocode(''317 Madison Ave,New York City'')->sublocality;
//Manhattan
echo ''<hr/>''.geocode(''foobar'')->status;
//ZERO_RESULTS
echo ''<hr/>''.geocode(''40.689758, -74.04513800000001'')->formatted_address;
//1 Liberty Is, Brooklyn, NY 11231, USA
Puede acceder a la sublocalidad de esta manera:
function reverse_geocode($lat, $lon) {
$url = "http://maps.google.com/maps/api/geocode/json?latlng=$lat,$lon&sensor=false";
$data = json_decode(file_get_contents($url));
if (!isset($data->results[0]->address_components)){
return "unknown Place";
}
if ($data->results[0]->address_components[2]->types[0]=="sublocality") {
$return_array[''type'']="sublocality";
$return_array[''sublocality_long_name'']=$data->results[0]->address_components[2]->long_name;
$return_array[''sublocality_short_name'']=$data->results[0]->address_components[2]->short_name;
return $return_array;
}
}