In this example the Seminario II sutdents were asked to design a web page that display a Google map with earthquake information from the US Geological Survey USGS.

Camilo Vera solution can be found here (gracias Camilo).

Camilo’s php script is as follows:

<?php
//header("Content-type= application/json");
$xml =simplexml_load_file("http://earthquakes.usgs.gov/earthquakes/catalogs/1day-M2.5.xml");
$i=0;
//se recorren todos los nodos "entry"
foreach($xml->entry as $node){
    //se recuperan los datos que tiene un namespace especificado por la siguiente url
    $geo = $node->children("http://www.georss.org/georss");
    $json[$i][0]=$geo->point;
    $json[$i][1]=$node->title;
    $i++;
}
print(json_encode($json));
?>

The javascript is as follows:

function initialize() {
    myLatlng = new google.maps.LatLng(-33.04299, -71.586657);
    var myOptions = {
      zoom: 3,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
    }
    //se crea una instancia de un mapa de google
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var request = crear_XmlHttpRequest();
    request.open("GET", "Conector.php", true);
    request.onreadystatechange = function() {
        if(request.readyState == 4 && request.status == 200){
            var yw_json = request.responseText;
                      //dirty JSON evaluation
            var yw = eval('(' + yw_json + ')');
            var i;
            //se recorren el arreglo que contiene la informacion de las coordenadas y el nombre
            //del lugar donde ocurrio el terremoto
            for(i in yw){
                //la tercera dimension del arreglo es inutil, pero lamentablemente json_encode de php lo crea
                //se separan los dos puntos que determinan la coordenada
                coordenadas = yw[i][0][0].split(" ");
                //se guarda el nombre del lugar donde ocurrio el evento
                lugar = yw[i][1][0];
                //se crea el marcador en el mapa
                myLatlng = new google.maps.LatLng(coordenadas[0], coordenadas[1]);
                new google.maps.Marker({
                    position: myLatlng,
                    map: map,
                    title:lugar
                });
            }
        }
    }
    request.send(null);
  }

//Se define una funcion que retorne el objeto XMLHttpRequest dado que en la
//version 3 de la api de google se quito la clase GXmlHttp

function crear_XmlHttpRequest(){
    var httpRequest;
    if (window.XMLHttpRequest){
        //El explorador implementa la interfaz de forma nativa
	httpRequest = new XMLHttpRequest();
    }
    else if (window.ActiveXObject){
        //El explorador permite crear objetos ActiveX
	try {
            httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
	} catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!httpRequest){
        alert("No ha sido posible crear una instancia de XMLHttpRequest");
    }
    return httpRequest;
}

The Html file is:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript" src="ajax_map.js"></script>
        <title></title>
    </head>
    <body onload="initialize()">
        <div id="map_canvas" style="width:100%; height:100%"></div>
        </body>
</html>

Alejandro Homes solution can be found here (gracias Alejandro). In this example the students used a php script as middle man to by pass the cross-domain restriction in web browsers.

The php script goes as follows:

<?php  

//First send the corresponding headers  

header("Content-type= application/json");  

 

//get the XML data from the URL  

$xml = simplexml_load_file("http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml");  



$count=0;

//traverse the SimpleXML object and store in a associative array  

foreach( $xml->entry as $entry ) 

{ 

	$aeo = $entry->children("http://www.georss.org/georss");

	$arr[$count] = array ('nombre'=>$entry->title,'fecha'=>$entry->updated,'geo_point'=>$aeo->point,'geo_elev'=>$aeo->elev);

	$count++;

}

  

//JSON enconde and print  

print(json_encode($arr));



?>

The html page is as follows:

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
	<title>Google Maps JavaScript API Example</title>
	<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAw0DAzQTTbMAlKOPlgYZyaxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxT4oLUvcIuwHQ71styNxZCnK2iqoQ"
		type="text/javascript"></script>
	<script type="text/javascript">

	function reFresh() {
		location.reload(true)
	}


	function initialize() {
		if (GBrowserIsCompatible()) {

			function setMarker( punto, texto){

				var marker = new GMarker(punto, {draggable: false});

				GEvent.addListener(marker, "click", function(){
					// create the Google version of XMLHttpRequest object
					marker.openInfoWindowHtml(texto);
				});

				map.addOverlay(marker);
			}
			
			var map = new GMap2(document.getElementById("map_canvas"));
		
			var center = new GLatLng(-15,0);
		
			map.setCenter(center, 1);

			var request = GXmlHttp.create();
			request.open("GET", "usgs.php", true);
			request.onreadystatechange = function() 
			{
				if(request.readyState == 4 && request.status == 200){
			
					var eq_json = request.responseText;
					var eq = eval('(' + eq_json + ')');
					
					var i;
					for(i in eq)
					{
						
						var lat_lng = eq[i].geo_point[0].split(" ");
						var titulo = eq[i].nombre[0].split(",");
						var magnitud = titulo[0].split(" ");
		
						var xhtml = "lugar = " + titulo[1] + ", " + titulo[2] + "<br />";
						xhtml += "magnitud = " + magnitud[1] + "° Richter<br />";
						xhtml += "fecha = " + eq[i].fecha[0] + "<br />";
						xhtml += "elevación = " + eq[i].geo_elev[0]/1000 + " [Km]<br />";
						xhtml += "posición = " + eq[i].geo_point[0] + "<br />";
						
						var point = new GLatLng(lat_lng[0],lat_lng[1]);
						setMarker(point, xhtml);
					}
					//end for
				
				}
			}
			
			request.send(null);

		}
	window.setInterval("reFresh()",60000); //recarga la pag cada 1 minuto
	}​
	</script>
</head>
<body onload="initialize()" onunload="GUnload()">
	<div id="map_canvas" style="width: 700px; height:550px"></div>
</body>
</html>