Geocodificación con PHP y el API Google Maps (4)

Autor: Quentin Zervaas

Fuente original: http://www.phpriot.com/articles/google-maps-geocoding/4

Entendiendo la respuesta del geocodificador

Después de enviar la petición al geocodificador recibimos la respuesta en el formato especificado. Por ejemplo, si solicitamos la dirección de la Casa Blanca mediante el URL http://maps.google.com/maps/geo?q=1600+pennsylvania+ave+washington+dc&output=xml&key=123456, recibimos la siguiente respuesta XML:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
  <Response>
    <name>1600 pennsylvania ave washington dc</name>
    <Status>
      <code>200</code>
      <request>geocode</request>
    </Status>
    <Placemark id="p1">
      <address>1600 Pennsylvania Ave NW, Washington, DC 20006, USA</address>
      <AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
        <Country>
          <CountryNameCode>US</CountryNameCode>
          <AdministrativeArea><AdministrativeAreaName>DC</AdministrativeAreaName>
          <SubAdministrativeArea>
            <SubAdministrativeAreaName>District of Columbia</SubAdministrativeAreaName>
              <Locality>
                <LocalityName>Washington</LocalityName>
                <Thoroughfare>
                  <ThoroughfareName>1600 Pennsylvania Ave NW</ThoroughfareName>
                </Thoroughfare>
                <PostalCode>
                  <PostalCodeNumber>20006</PostalCodeNumber>
                </PostalCode>
              </Locality>
            </SubAdministrativeArea>
          </AdministrativeArea>
        </Country>
      </AddressDetails>
      <Point>
        <coordinates>-77.036655,38.898774,0</coordinates>
      </Point>
    </Placemark>
  </Response>
</kml>

 En la etiqueta <Response> hay tres elementos clave:

– name: Esta es la consulta de búsqueda que se envía al geocodificador

– Status: Incluye el código de respuesta de la petición. Sirve para determinar de una forma sencilla qué sucede realmente cuando se realiza la petición. Los códigos posibles son los siguientes:

– 200: Petición exitosa (devuelve al menos un Placemark).

– 400: Petición mala (el servidor no pudo entender la petición).

– 500: Error del servidor (ha ocurrido un error interno desconocido).

– 601: Petición perdida. El parámetro q no se ha especificado o se trata de una cadena vacía.

– 602: Dirección desconocida. La petición se lleva a cabo pero no se encuentra ninguna ubicación.

– 603: Dirección no disponible. La dirección no se puede obtener debido a razones legales o contractuales.

– 610: Se ha especificaco una clave API Google Maps inválida.

– 620: Se han realizado demasiadas consultas con la clave API especificada.

– Placemark: Suponiendo que el código de estado es 200, hay al menos un elemento <Placemark> en el archivo XML devuelto. Este elemento contiene toda la información del geocodificador correspondiente a la ubicación o dirección dadas.

Una vez tenemos una respuesta correcta, podemos recorrer los elementos <Placemark> y guardar los datos como corresponde. La primera pieza de información útil de cada <Placemark> es una dirección con formato. Esto es extremadamente útil porque los datos son mucho más consistentes y no tenemos que basarnos en los datos que envía el usuario.

Si echamos un vistazo al ejemplo de arriba, podemos ver que enviamos la cadena de petición 1600 pennsylvania ave washington dc y recibimos la dirección con formato 1600 Pennsylvania Ave NW, Washington, DC 20006, USA .

El siguiente elemento, <AddressDetails>, utiliza el lenguaje extensible de direcciones xAL. Este elemento tiene el atributo Accuracy, que sirve para especificar el nivel de precisión de la ubicación devuelta. Los valores posibles de Accuracy son:

– 0: Desconocido

– 1: País

– 2: Región

– 3: Subregión

– 4: Población

– 5: Código postal

– 6: Calle

– 7: Intersección

– 8: Dirección

En nuestro ejemplo, el nivel de precisión es 8, el máximo. Con el código que hemos desarrollado en este ejemplo puedes probar los diferentes niveles de precisión. Por ejemplo, introduciendo Australia en el término de consulta, se obtiene un nivel de precisión de 1.

Los demás elementos de <AddressDetails> dividen las partes de la dirección completa en sus correspondientes categorías, marcadas según la especifiación xAL.

Finalmente, cada <Placemark> contiene un elemento <Point>. Este elemento tiene una cadena con comas, en que el primer valor es la longitud, el segundo es la latitud y el tercero es la elevación (típicamente no se utiliza). Por lo tanto, en nuestro ejemplo la longitud es 77.036655 y la latitud es 38.898774. Este nivel de precisión corresponde a 11 centímetros (4 pulgadas).

Anuncios