martedì 26 maggio 2009

Conversione csv2kml in php

In questo post illustro brevemente come effettuare la conversione dal formato csv in kml usando php. Il csv in ingresso rispetta il seguente formato

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.

martedì 19 maggio 2009

Tagliare file avi con mencoder

La sintassi da usare è la seguente:

mencoder input.avi -ovc copy -oac copy -ss hh:mm:ss -endpos hh:mm:ss -o output.avi

con:
input.avi, nome del file da tagliare
-ovc copy, tipo di codec da usare in output. L'opzione copy evita che si faccia il re-encoding
-oac copy, come sopra ma per l'audio
-ss, specifica il punto iniziale del taglio in ore, minuti, secondi
-endpos, specifica il punto finale del taglio, inteso come ore, minuti e secondi in valore assoluto a partire dal punto iniziale
-o output.avi, il nome del file di output

Esempio:

mencoder input.avi -ovc copy -oac copy -ss 00:10:55 -endpos 00:01:15 -o output.avi

Totò e la camicia

Un tema molto attuale di questi giorni...

mercoledì 6 maggio 2009

QR Barcode Generator

The QR barcode generator has moved here

lunedì 4 maggio 2009

Dual Maps



Dual Maps: Google Maps, Street View and Virtual Earth in an embeddable control

giovedì 23 aprile 2009

L'importanza di avere un backup del sistema

A cosa serve avere un backup del sistema?

Il backup diventa molto importante nei casi in cui:
  • si verifica una rottura del disco fisso del pc
  • insorgono problemi di instabilità dovuti a virus e simili
  • il sistema col tempo è diventato troppo lento (succede spesso con windows) a causa delle miriade di software inutili installati
In queste situazioni, si vorrebbe riavere la disponibilità del sistema nel più breve tempo possibile.
La soluzione classica prevede la reinstallazione del sistema operativo e dei software comunemente utilizzati, operazione che richiede in ogni caso un certo tempo ed una certa difficoltà per i meno esperti. Senza contare le eventuali personalizzazioni che si erano apportate al sistema originario.

Una soluzione alternativa consiste nell'utilizzare un software apposito, che permetta di creare un'immagine del proprio disco (o delle proprie partizioni) che possa essere usata per ripristinare il sistema. Questo sistema viene comunemente usato dai produttori di notebook. Molto spesso assieme alla macchina viene fornito un CD di ripristino, che in qualunque momento riporta il portatile come era al momento dell'acquisto.

In questo modo l'installazione classica va fatta soltanto la prima volta. Una volta che si è configurato il sistema con i software e le personalizzazioni volute, si procede a creare l'immagine del disco.
Da adesso in poi, in caso di problemi, si potrà fare il ripristino a partire dall'immagine, in modo da riavere il pc operativo in pochi minuti. Naturalmente l'immagine sovrascrive tutto il vecchio contenuto dell'hard disk, per cui tutti i dati attuali andranno persi. Alla fine dell'operazione si riavrà il pc appena installato, già perfettamente funzionante, con tutti i software installati.

I vantaggi di questo approccio sono:
  • velocità di ripristino dell'ambiente di lavoro (sistema operativo + software applicativi)
  • non bisogna addentrarsi nei dettagli dell'installazione (ad esempio partizionamento dei dischi, componenti aggiuntivi, installazione di driver)
  • e' indipendente dal sistema operativo che si utilizza, funziona Windows, per Linux e per Mac (mai testato su questo)
Questa metodologia può essere utilizzata in maniera ottimale anche per effettuare installazioni identiche su HW identici. Si installa la prima macchina, e poi si installano le altre a partire dalle immagini. I vantaggi in termini di tempo sono indiscutibili.

Esistono molti prodotti che effettuano questo tipo di lavoro, sia commerciali che gratuiti. Tra quelli gratuiti segnalo Clonezilla, davvero ottimo.
In questo articolo, spiego un utilizzo pratico.