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>
		 psp3000
  psp3000

