mercoledì 27 giugno 2012

Recuperare latitudine e longitudine da un indirizzo

Capita spesso di dover convertire la stringa dell'indirizzo dell'utente in latitudine e longitudine terrestri. Per fare ciò è possibile utilizzare le Google Geocoding API impacchettate e già pronte in questa classe da me realizzata.

<?php

/**
 * GooglePlaceRequest uses Google Geocoding API to retrieve information
 * about an address.
 *
 * @author Egidio Caprino
 * @see https://developers.google.com/maps/documentation/geocoding/
 */
class GooglePlaceRequest
{
    /**
     * HTTP request to Google Geocoding API address.
     *
     * @var Zend_Http_Client
     */
    protected $response = null;
 
    /**
     * Constructor method. Will execute the request for the given address.
     *
     * @param string $address
     * @throws Zend_Http_Client_Exception
     */
    function __construct($address)
    {
        $uri = 'https://maps.googleapis.com/maps/api/geocode/json';
     
        $client = new Zend_Http_Client($uri);
        $client->setParameterGet('address', urlencode($address));
        $client->setParameterGet('language', 'en');
        $client->setParameterGet('sensor', 'false');
     
        $response = $client->request(Zend_Http_Client::GET)->getBody();
        $response = Zend_Json_Decoder::decode($response);
     
        if (strcmp($response['status'], 'OK') !== 0) {
            throw new Zend_Http_Client_Exception('Invalid status: "' .
                $response['status'] . '".');
        }
     
        $this->response = $response;
    }
 
    /**
     * Return the formatted address in english language.
     *
     * @return string
     */
    public function getFormattedAddress()
    {
        return $this->response['results'][0]['formatted_address'];
    }
 
    /**
     * Return the latitude of the place.
     *
     * @return int
     */
    public function getLatitude()
    {
        return $this->response['results'][0]['geometry']['location']['lat'];
    }
 
    /**
     * Return the longitude of the place.
     *
     * @return int
     */
    public function getLongitude()
    {
        return $this->response['results'][0]['geometry']['location']['lng'];
    }
}

Nessun commento:

Posta un commento