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

Autor: Quentin Zervaas

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

Acceder a los datos del geocodificador con SimpleXML

Ahora que sabemos cómo recuperar la respuesta del geocodificador, y qué significa realmente el XML que devuelve, vamos a analizar sintácticamente este XML para poder utilizar los datos. Para ello, vamos a utilizar SimpleXML, que, como su nombre indica, hace que el manejo de XML en PHP sea muy sencillo. SimpleXML está disponible de forma nativa desde PHP 5.

Para leer los valores de un archivo XML sólo necesitamos crear una instancia de la clase SimpleXMLElement, pasando como constructor el XML que queremos analizar sintácticamente. Esto se ilustra en el siguiente ejemplo:

 

$str = '<kml><Response> .... </Response></kml>'; // Archivo XML de ejemplo

$xml = new SimpleXMLElement($str);

Una vez tenemos el objeto SimpleXMLElement, podemos acceder a cualquier elemento del archivo XML del mismo modo que accedemos a las propiedades de los objetos PHP. Por ejemplo, para acceder al código de estado de la petición, escribimos:

 

$xml = new SimpleXMLElement($geocoderResponse);

echo $xml->Response->Status->code;

De hecho, el tipo de $xml->Response->Status->code es otra instancia de SimpleXMLElement; por lo tanto, debemos convertir este valor al tipo que necesitamos realmente (una cadena o un entero, por ejemplo). El siguiente ejemplo lee el código de estado de la petición y se asegura de que ésta se completa correctamente. (Recordemos que un código de respuesta 200 significa que la petición es correcta).


$xml = new SimpleXMLElment($geocoderResponse);

$status = (int) $xml->Response->Status->code;

if ($status == 200) {

// La petición al geocodificador se ha completado correctamente

}

Ahora ya sabemos leer los valores de las etiquetas XML. Sin embargo, algunos datos se guardan en atributos, como por ejemplo el atributo Accuracy de los elementos Placemark. Para acceder a un atributo con SimpleXML, su elemento padre se trata como una matriz. El siguiente ejemplo itera sobre los elementos Placemark de la respuesta y accede a sus valores Accuracy; también imprime la dirección:


$xml = new SimpleXMLElement($geocoderResponse);

foreach ($xml->Response->Placemark as $placemark){

$accuracy = (int) $placemark->AddressDetails['Accuracy'];

if ($accuracy == 8) {

// Nivel de precisión de la dirección

}

echo $placemark->address."\n";

}

Llegados a este punto, hemos cubierto los conocimientos básicos necesarios para hacer una consulta al geocodificador: entender la respuesta y leer los valores específicos del archivo XML con SimpleXML. Ahora implementaremos un geocodificador funcional con PHP 5 que combina todo lo que explica este artículo.