nomeposto;mese;anno;longitudine;latitudine;altitudine
Ad esempio un file di input valido è:
Salisbury - Cattedrale;8;2003;-1.799225000000000;51.064673000000000;0
Stonehenge;8;2003;-1.827691000000000;51.179363000000000;0
Francoforte;4;2005;8.661885000000000;50.104502000000000;0
Nice;8;2005;7.151939000000000;43.650530000000000;0
Nimes;8;2005;4.360864000000000;43.834590000000000;0
Monaco - Marienplatz;8;2006;11.575700000000000;48.137240000000000;0
Il carattere separatore degli elementi è ";". Nel kml finale, i campi mese ed anno verranno fusi in un elemento description del file kml generato. Lo script in php non deve fare altro che processare il csv riga per riga e generare gli elementi relativi del file kml. La struttura kml che andremo a generare è molto semplice. Ogni punto (Placemark) è formato da un nome, una descrizione e le coordinate. Il kml conterrà un placemark per ogni riga del file csv.
Ecco il codice:
?PHP
// prende in input un file csv e restituisce un kml
//Crea il documento
$dom = new DOMDocument('1.0', 'UTF-8');
//Crea la radice KML e la inserisce nel documento
$node = $dom->createElementNS('http://earth.google.com/kml/2.1', 'kml');
$parNode = $dom->appendChild($node);
//Crea il documento KML e lo inserisce
$dnode = $dom->createElement('Document');
$docNode = $parNode->appendChild($dnode);
//Scorre il file csv riga per riga e per ognuna crea un Placemark
//con nome, anno+mese, lati,long
$file_handle = fopen("input.csv", "r");
while (!feof($file_handle) ) {
//processa riga per riga
$line_of_text = fgetcsv($file_handle, 1024,";");
$nome = $line_of_text[0];
$anno = $line_of_text[1];
$mese = $line_of_text[2];
$long = $line_of_text[3];
$lati = $line_of_text[4];
//Crea un Placemark e lo inserisce nel documento
$node = $dom->createElement('Placemark');
$placeNode = $docNode->appendChild($node);
//Crea nome, descrizione e ci mette i valori presi dal csv
$nameNode = $dom->createElement('name',$nome);
$placeNode->appendChild($nameNode);
$descNode = $dom->createElement('description', $mese."/".$anno);
$placeNode->appendChild($descNode);
//Crea un elemento Punto
$pointNode = $dom->createElement('Point');
$placeNode->appendChild($pointNode);
//Crea un elemento coordinate e ci mette dentro i valori
$coorStr = $long . ',' . $lati;
$coorNode = $dom->createElement('coordinates', $coorStr);
$pointNode->appendChild($coorNode);
}
$kmlOutput = $dom->saveXML();
header('Content-type: application/vnd.google-earth.kml+xml');
echo $kmlOutput;
fclose($file_handle);
?>
Salviamo il codice php dentro il file genera_kml.php, e chiamiamo il file csv input.csv. Salviamo entrambi dentro la stessa directory (miadirectory ad esempio) su un webserver che abbia abilitato il supporto per il php5. Ora puntando alla pagina http://www.miowebserver.com/miadirectory/genera_kml.php, il browser ci invierà un file contente il kml generato. Sarà sufficiente dargli come estensione .kml (invece di .php) e salvarlo su disco.
Adesso aprendolo con Google Earth vedremo comparire i punti del file csv sulla mappa.