User:Ilrobi

From OpenStreetMap

Jump to: navigation, search

Contents

Moretti Roberto

Zona: Principalemente a Milano (zona nord). Ma ogni posto del pianeta Terra va bene.

Editing di Milano
Editing di Milano
Tracce della zona nord di Milano riprese con gps al 050308
Tracce della zona nord di Milano riprese con gps al 050308
Tracce della zona nord di Milano riprese con gps al 040508
Tracce della zona nord di Milano riprese con gps al 040508

Attrezzatura

Per non rischiare di perdere le tracce...
Per non rischiare di perdere le tracce...

Hardware GPS: Garmin Geko 201 / Packard Bell Compasseo 500 / iblue 747 / Garmin GPSMAP 60 B/N

Sistemi operativi: ubuntu / windows XP

Atlanti Geografici: World Wind / Google Earth

Software gestione GPS: GPS TrackMaker (Windows) ; GPSBabel (Windows / Linux);

Georeferenziare foto: Gpicsync (Windows / Linux)

Software GIS: Quantum GIS (Windows / Linux)

Software creazione mappe: JOSM (Java)

script gpvoice

Crea un file in formato di gpx con i link ai file audio presi in abbinamento ad una traccia gps.

#!/usr/bin/perl

################################################################
#                           gpvoice                            #
################################################################
#                                                              #
# Programma per georeferenziare file wav attraverso il track.  #
#                                                              #
# Crea un file in formato gpx con waypoint abbinati a file     # 
# vocali presi durante una sessione di tracciatura.            # 
#                                                              #
# La posizione del file wav è data dalla controllando l'ora    # 
# in cui è stato registrato il file wav con il timestamp del   #
# tracklog.                                                    #
#                                                              #
# COSA SERVE:                                                  #
# Un gps che salva i tracciati del percorso.                   #
# Un registratore digitale che salva le tracce audio in file   #
# con la data e l'ora in cui è stata fatta la registrazione.   #
# Un computer con gpsbabel e JOSM. :)))                        #
#                                                              #
# Uso:                                                         #
#     SUL CAMPO:                                               #
#      - Registra con un GPS il tracklog.                      #
#      - Con un registratore digitale registrare le notizie di #
#        interesse.                                            #
#     SUL COMPUTER:                                            #
#      - Crea una nuova cartella.                              #
#      - Scarica nella cartella creata il tracciato del        #
#        percorso con gpsbabel.                                #
#      - Scarica nella cartella creata i file audio wav.       #
#      - Copia nella cartella creata lo script perl            #
#        "gpvoiceXX.plx".                                      #
#      - Dare i permessi di esecuzione al file gpvoiceXX.plx   #
#        (chmod +x gpvoiceXX.plx).                             #
#      - Eseguire: ./gpvoiceXX.plx                             #
#      - Digita il nome del file gpx.                          #
#      - Alla fine dell'esecuzione ci sarà un nuovo file nella #
#        cartella con il nome gpv.nomedeltuofile.gpx con i     #
#        waypoint e il relativo file vocale associato.         #
#      - In JOSM aprite il file gpx appena creato ed il file   #
#        con il tracciato. I file wav devono essere nella      #
#        stessa nella del file gpv creato.                     #
#                                                              #
# I file wav devono rimanere nella stessa cartella del file    #
# gpv.nomedeltuofile.gpx                                       #
#                                                              #
################################################################
# Creato da Moretti Roberto. ilrobi@gmail.com                  #
# Versione alfa 01/04/08 - gpvoice01.plx                       #
# Agevola la creazione di mappe per www.openstreetmap.org      #
# Licenza OPEN SOURCE (nello spirito di openstreetmap)         #
# Ogni commento è benvenuto... non siate troppo severi :)      #
################################################################

#use strict;
use Time::Local;
use POSIX;

# Conteggio per vedere quanti wav prende.
$conteggio = 0 ;

# Chiede il nome del file gpx da aprire.
print "Nome del file da aprire : ";
$file = <STDIN>;
open (IN, "< $file") || die "impossibile aprire $file.\n\n";

# Crea il file in cui metterà i link dei file wav.
open (OUT, "> gpv.$file") || die "Impossibile creare gpv.$file\n\n";
print OUT "<gpx>\n";

# Legge il file gpx.
while ( my @linea = <IN> )
{

# Apre la directory e legge i file wav.
$dirtoget="./";
opendir(IMD, $dirtoget) || die("Cannot open directory");
@thefiles= readdir(IMD);
closedir(IMD);

# Legge i file .wav.
foreach $f (@thefiles)
{
  # Se è un file wav.
  if ($f =~ m/.wav/im)
  { 
   print"\n\n++++++++++++++++++++++++\n";
   print $f."\n";
   # Prendo la data del file wav.
   $data_mod = (stat($f))[9];
   print "Ora del file wav: ".$data_mod."\n";
   $readable_time = localtime($data_mod); 
   print "Ora del file wav leggibile: ".$readable_time."\n";
   print"++++++++++++++++++++++++\n";
        # Leva tutti gli a capo del file gpx.
        chomp @linea;                
		foreach $line (@linea)
        {
            #print "INIZIO: ".$line."\n";
            # Se il tag è trkpt faccio il confronto.
            if ($line =~ m/^<trkpt/m)
            {
            # Trimmo la riga.
            $line =~ s/^\s+//;
            $line =~ s/\s+$//;
			# Memorizzo latitudine e longitudine.
			$pos_lat=index($line, "lat=");
			$pos_lon=index($line, "lon=");
			$str_lat=substr($line, $pos_lat+5, 12);
			$str_lon=substr($line, $pos_lon+5, 12);
			# Levo i doppi apici.
			$str_lat=~ s/\"//;
			$str_lon=~ s/\"//;
			#print "linea: ".$line."\n";
			#print "lat: ".$str_lat."\n";		
			#print "lon: ".$str_lon."\n";
			}
			# Se è time.
			elsif ($line =~ m/^<time>/m)
			{
            # Posizione di T per splittare la data.
            $str_post=index($line, "T");
            #print "posizione di T: ".$str_post."\n";
            # Prendo la data.
            $data_data=substr($line, 0, $str_post);
            $data_data =~ s/<time>//;
            #print "data_data: ".$data_data."\n";
            $data_giorno=substr($data_data, 8, 2);
            $data_mese=substr($data_data, 5, 2);
            $data_anno=substr($data_data, 0, 4);
            #print "data_giorno: ".$data_giorno."\n";
            #print "data_mese: ".$data_mese."\n";
            #print "data_anno: ".$data_anno."\n";
            # Modifico per trovare il timestamp.
            $data_anno = $data_anno - 1900;
            $data_mese = $data_mese - 1 ;
            # Prendo l'ora.
            $data_ora=substr($line, $str_post);
            # Trimmo.
            $data_ora =~ s/<\/time>//;
            #print "data_ora: ".$data_ora."\n";
            # Splitto l'ora in ore minuti e secondi.
            $ora_1=substr($data_ora, 1, 2);
            $min_1=substr($data_ora, 4, 2);
            $sec_1=substr($data_ora, 7, 2);
			# Metto a posto l'ora.
			$ora_1=$ora_1+1;
            #print "ora_1: ".$ora_1."\n";
            #print "min_1: ".$min_1."\n";
            #print "sec_1: ".$sec_1."\n";

            # Trasformo la data e l'ora del gpx in timestamp.
            $timestamp_gpx = mktime( $sec_1, $min_1, $ora_1, $data_giorno, $data_mese, $data_anno );

			# Controlli per eventuali debug.
            #print "Data gpx: ".$timestamp_gpx."\n";
			#print "Data wav: ".$data_mod."\n";
            #$readable_time1 = localtime($timestamp_gpx);
            #print "readable gpx:".$readable_time1."\n";
            #print "readable wav:".$readable_time."\n";

			# Creo un timestamp minimo e massimo con la data del file wav.
			###########################################################################################
			## Cerco la corrispondenza delle date con una differenza massima di più o meno 4 secondi ##
			###########################################################################################
			# + O - 1 secondo.
			$controllo_min = $data_mod - 1;
			$controllo_max = $data_mod + 1;
			
			# + O - 2 secondi.
			$controllo_min_2 = $data_mod - 2;
			$controllo_max_2 = $data_mod + 2;
		
			# + O - 3 secondi.
			$controllo_min_3 = $data_mod - 3;
			$controllo_max_3 = $data_mod + 3;
			
			# + O - 4 secondi.
			$controllo_min_4 = $data_mod - 4;
			$controllo_max_4 = $data_mod + 4;
			
			# Cerco la corrispondenza tra il timestamp del file wav e un
			# timestamp di un punto del file gpx.
			# Stesso tempo.
			if($timestamp_gpx == $data_mod)
			{
			$conteggio++;
			print "====================================================\n";			
			print "CORRISPONDENZA TROVATA PER: ".$f." - n. ".$conteggio."\n";
			print "min: ".$controllo_min."\n";
			print "max: ".$controllo_max."\n";
			print "valore GPX: ".$timestamp_gpx."\n";
			#print "valore wav: ".$data_mod."\n";
			print "con lat: ".$str_lat." e lon: ".$str_lon."\n";
			$ins_1="<wpt lat=\"".$str_lat."\" lon=\"".$str_lon."\">\n";
			$ins_2="<name>voice".$conteggio."</name>\n";
			$ins_3="<link>".$f."</link>\n";
			$ins_4="</wpt>\n";
			$ins=$ins_1.$ins_2.$ins_3.$ins_4;
			
			# Scrivo nel file che ho creato.
			print OUT $ins;
			
			# Visualizzo quello che ho creato.
			#print $ins_1; 
			#print $ins_2;
			#print $ins_3;
			#print $ins_4;
			print "====================================================\n";
			# Esce dal ciclo dopo la prima occorrenza trovata.
			last;
			}
			# Differenza a + o - 1 secondo.
			elsif ($timestamp_gpx >= $controllo_min && $timestamp_gpx <= $controllo_max)
			{
			$conteggio++;
			print "====================================================\n";			
			print "CORRISPONDENZA TROVATA A 1 SECONDO PER: ".$f." - n. ".$conteggio."\n";
			print "min: ".$controllo_min."\n";
			print "max: ".$controllo_max."\n";
			print "valore GPX: ".$timestamp_gpx."\n";
			#print "valore wav: ".$data_mod."\n";
			print "con lat: ".$str_lat." e lon: ".$str_lon."\n";
			$ins_1="<wpt lat=\"".$str_lat."\" lon=\"".$str_lon."\">\n";
			$ins_2="<name>voice".$conteggio."</name>\n";
			$ins_3="<link>".$f."</link>\n";
			$ins_4="</wpt>\n";
			$ins=$ins_1.$ins_2.$ins_3.$ins_4;
			
			# Scrivo nel file che ho creato.
			print OUT $ins;
			
			# Visualizzo quello che ho creato.
			#print $ins_1; 
			#print $ins_2;
			#print $ins_3;
			#print $ins_4;
			print "====================================================\n";
			# Esce dal ciclo dopo la prima occorrenza trovata.
			last;
			}
			# Differenza a + o - 2 secondi.
			elsif ($timestamp_gpx >= $controllo_min_2 && $timestamp_gpx <= $controllo_max_2)
			{
			$conteggio++;
			print "====================================================\n";			
			print "CORRISPONDENZA TROVATA A 2 SECONDI PER: ".$f." - n. ".$conteggio."\n";
			print "min: ".$controllo_min_2."\n";
			print "max: ".$controllo_max_2."\n";
			print "valore GPX: ".$timestamp_gpx."\n";
			#print "valore wav: ".$data_mod."\n";
			print "con lat: ".$str_lat." e lon: ".$str_lon."\n";
			$ins_1="<wpt lat=\"".$str_lat."\" lon=\"".$str_lon."\">\n";
			$ins_2="<name>voice".$conteggio."</name>\n";
			$ins_3="<link>".$f."</link>\n";
			$ins_4="</wpt>\n";
			$ins=$ins_1.$ins_2.$ins_3.$ins_4;
			
			# Scrivo nel file che ho creato.
			print OUT $ins;
			
			# Visualizzo quello che ho creato.
			#print $ins_1; 
			#print $ins_2;
			#print $ins_3;
			#print $ins_4;
			print "====================================================\n";
			# Esce dal ciclo dopo la prima occorrenza trovata.
			last;
			}
			# Differenza a + o - 3 secondi.
			elsif ($timestamp_gpx >= $controllo_min_3 && $timestamp_gpx <= $controllo_max_3)
			{
			$conteggio++;
			print "====================================================\n";			
			print "CORRISPONDENZA TROVATA A 3 SECONDI PER: ".$f." - n. ".$conteggio."\n";
			print "min: ".$controllo_min_3."\n";
			print "max: ".$controllo_max_3."\n";
			print "valore GPX: ".$timestamp_gpx."\n";
			#print "valore wav: ".$data_mod."\n";
			print "con lat: ".$str_lat." e lon: ".$str_lon."\n";
			$ins_1="<wpt lat=\"".$str_lat."\" lon=\"".$str_lon."\">\n";
			$ins_2="<name>voice".$conteggio."</name>\n";
			$ins_3="<link>".$f."</link>\n";
			$ins_4="</wpt>\n";
			$ins=$ins_1.$ins_2.$ins_3.$ins_4;
			
			# Scrivo nel file che ho creato.
			print OUT $ins;
			
			# Visualizzo quello che ho creato.
			#print $ins_1; 
			#print $ins_2;
			#print $ins_3;
			#print $ins_4;
			print "====================================================\n";
			# Esce dal ciclo dopo la prima occorrenza trovata.
			last;
			}
			# Differenza a + o - 4 secondi.
			elsif ($timestamp_gpx >= $controllo_min_4 && $timestamp_gpx <= $controllo_max_4)
			{
			$conteggio++;
			print "====================================================\n";			
			print "CORRISPONDENZA TROVATA A 4 SECONDI PER: ".$f." - n. ".$conteggio."\n";
			print "min: ".$controllo_min_4."\n";
			print "max: ".$controllo_max_4."\n";
			print "valore GPX: ".$timestamp_gpx."\n";
			#print "valore wav: ".$data_mod."\n";
			print "con lat: ".$str_lat." e lon: ".$str_lon."\n";
			$ins_1="<wpt lat=\"".$str_lat."\" lon=\"".$str_lon."\">\n";
			$ins_2="<name>voice".$conteggio."</name>\n";
			$ins_3="<link>".$f."</link>\n";
			$ins_4="</wpt>\n";
			$ins=$ins_1.$ins_2.$ins_3.$ins_4;
			
			# Scrivo nel file che ho creato.
			print OUT $ins;
			
			# Visualizzo quello che ho creato.
			#print $ins_1; 
			#print $ins_2;
			#print $ins_3;
			#print $ins_4;
			print "====================================================\n";
			# Esce dal ciclo dopo la prima occorrenza trovata.
			last;
			}
			}
		}
		}
  }
}
# Stampo nel file la chiusura del formato gpx.
print OUT "\n</gpx>";

# Chiudo i due file.
close(IN);
close(OUT);

Eventi a cui ho partecipato

Jan 6 Pavia warm-up informal mapping party
Feb 21-22 Perugia Mapping Party
Mar 2 Milano Micro Mapping Party
Apr 6 Mapping Party a Milano
Apr 19-20 Ferrara Mapping Party.
Mag 11 Milano Micro Mapping Party
May 27 Milano micro-mapping party di sera. - June 3 Milano incontro per il disegno della mappa.
June 15 Verona Mapping Party

Personal tools
recent changes