Ho preparato un piccolo poster in fomato A5 da utilizzare ai mapping party per coinvolgere i non-ancora-mappatori.
Monthly Archives: August 2008
Micro Mapping Party Non-del-tutto Estemporaneo a Gavirate
Quest’anno il sito del Linux Day (http://www.linuxday.it) presenta
un’interessante novità: la mappa delle manifestazioni locali offre
come prima scelta i dati di openstreetmap, lasciando alternative
più famose per i soli casi in cui l’area richiesta non sia presente
nel nostro db.
Per evitare di costringere gli interessati al linux day della provincia
di varese all’uso di dati rilasciati sotto licenza proprietaria, ci
è sembrato opportuno provvedere per tempo alla copertura della
probabile area della manifestazione, organizzando un piccolo
mapping party di fine agosto.
Raggiunto senza particolari problemi il punto di ritrovo, abbiamo scoperto
di essere in sei, di cui quattro già dotati di strumenti gps e
due alla loro prima esperienza di mapping; seguendo le indicazioni
dei mappatori nativi abbiamo suddiviso in territorio in aree e
deciso i gruppi che avrebbero dovuto coprirle.
Il primo gruppo si è recato a mappare la zona più importante,
quella dove si terrà il linux day; si è preferito usare l’auto dato
che sembrava che l’area fosse composta prevalentemente da strade lunghe
e sufficientemente larghe. Un secondo gruppo, comprendente uno dei
nativi, si è dedicato ad iniziare la copertura delle stradine del centro,
mentre il terzo gruppo ha percorso l’area intermedia tra i primi due;
entrambi a piedi.
L’ora dedicata alla mappatura delle strade si è svolta senza particolari
intoppi, tranne che per il primo gruppo, che ha scoperto numerose
vie laterali non segnalate sulle mappe proprietarie e abbastanza
strette da costringere a numerose retromarcie. Il gruppo del centro
Gavirate, invece, si e` lasciato prendere da tanto entusiasmo da
arrivare al punto d’incontro con più di mezz’ora di ritardo, dopo
aver coperto ben più del previsto.
Mentre attendevamo l’ultimo gruppo, siamo stati raggiunti da Simone
Cortesi e Cristiano Giovando, con i quali abbiamo potuto fare una
proficua chiaccherata sulle persone attive nelle zone e sulla
promozione del progetto.
Ritrovati tutti i gruppi, ci siamo recati verso una connessione
ad internet per poter disegnare le strade ed inviare i dati sul
server e lì ci siamo accorti del “disastro”: TangoGPS usato dai
mappatori in auto non aveva salvato le tracce, probabilmente
per un problema di permessi, per cui la zona per cui avevamo
organizzato il mapping party era andata persa.
Non ci siamo persi d’animo: mentre una parte di noi inseriva le
strade esistenti, gli altri hanno cercato nelle profondità del
filesystem possibili resti delle traccie, senza purtroppo
ottenere risultati. Esaurite tutte le altre possibilità, ci siamo
arresi alla necessità di ripercorrere le strade in questione,
ripromettendoci di farlo prima del rendering di mercoledì.
Abbiamo quindi completato il mapping party con una descrizione
degli strumenti usati, nella speranza di convertire qualcuno
dei nuovi partecipanti alla mappatura attiva ed infine, mentre
il sole tramontava, ci siamo lasciati per tornare alle nostre case.
Nonostante l’inconveniente, il bilancio della giornata è comunque
positivo, sia in termini di superficie mappata che in termini
di promozione del progetto, dato che si è formato un nuovo
minigruppo intenzionato a mappare strade e sentieri della zona
nord del lago. Unica nota negativa in confronto all’esperienza
Olgiatese, l’assenza di una gelateria accanto al punto di
ritrovo: da considerare per i ritrovi futuri.
Update del lunedì: il minigruppo storico di mappatori varesotti
si e` armato di gps ed è tornato a Gavirate per completare il lavoro
del sabato: le strade perse sono state recuperate ed inserite,
e si è anche provata una gelateria.
Il mio regalo estivo ai progetti Wikimedia
Sconcertato da tanta calura, mi son dato all’upload massiccio su Wikimedia Commons: ho rilasciato sotto licenza incrociata GNU e Creative Commons l’intera collezione delle illustrazioni (per lo più grafici scientifici) che ho realizzato per la mia dispensa di Petrografia, con la collaborazione di un amico. Tutte le foto sono state categorizzate in Category:Petrology diagrams.
Ovviamente tutte le illustrazioni sono state realizzate con software libero, in questo caso Inkscape su Ubuntu Hardy. Se qualcuno si stesse chiedendo l’utilità del gesto, è presto detto: i grafici e le illustrazioni in svg possono essere modificate con programmi di grafica vettoriale, tradotte in più lingue (Wikipedia esiste ormai in 200 lingue
) e riutilizzate in più progetti culturali - da Wikipedia a Wikiversity, a Wikibooks e così via.
Morale: se avete anche voi illustrazioni, fotografie, schemi, grafici ecc ecc, fate un bell’upload su Wikimedia Commons e rilasciateli con licenza copyleft, farete un bel favore alla cultura.
Inserire mappe di OpenStreetMap nel proprio sito/blog
Qual è la più grande soddisfazione per un mapper se non quella di mostrare i risultati del proprio lavoro sul sito o sul blog personale?
Spulciando il wiki di OpenStreetMap mi sono imbattutto nella pagina OpenLayers Simple Example, in cui è descritta la procedura più semplice per inserire una slippy map standard in una pagina web attraverso uno script in java.
Essendo pythonista convinto di Java non capisco molto, ma il codice mi è sembrato molto intuitivo, vediamo insieme il codice della pagina html:
<html>
<head>
<title>Slippy map di Terlizzi</title>
<!-- bring in the OpenLayers javascript library
(here we bring it from the remote site, but you could
easily serve up this javascript yourself) -->
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<!-- bring in the OpenStreetMap OpenLayers layers.
Using this hosted file will make sure we are kept up
to date with any necessary changes -->
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script type="text/javascript">
// Start position for the map (hardcoded here for simplicity,
// but maybe you want to get from URL params)
var lat=41.12925
var lon=16.5449
var zoom=15
var map; //complex object of type OpenLayers.Map
//Initialise the 'map' object
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
// Define the map layer
// Note that we use a predefined layer that will be
// kept up to date with URL changes
// Here we define just one layer, but providing a choice
// of several layers is also quite simple
// Other defined layers are OpenLayers.Layer.OSM.Mapnik, OpenLayers.Layer.OSM.Maplint and OpenLayers.Layer.OSM.CycleMap
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.setCenter (lonLat, zoom);
}
</script>
</head>
<!-- body.onload is called once the page is loaded (call the 'init' function) -->
<body onload="init();">
<!-- define a DIV into which the map will appear. Make it take up the whole window -->
<div style="width:100%; height:100%" id="map"></div>
</body>
</html>
Questa è una pagina html completa che integra una slippy map delle stesse dimensioni della pagina html, nel caso vogliate personalizzare il titolo della pagina (quello che compare nella finestra del browser) dovete modificare ciò che è compreso nel tag <title></title>:
<title>Modificare questo testo</title>
Il passo successivo consiste nel modificare le coordinate di origine della mappa e lo zoom di default, dal sito, cliccando su “permalink” in basso a destra dopo aver cercato la città o la regione di interesse e lo zoom gradito e copiando il nuovo indirizzo che nel frattempo sarà comparso nella barra del browser.
Le coordinate e lo zoom vanno inserite in questo punto del file html:
<script type="text/javascript"> var lat=41.12925 var lon=16.5449 var zoom=15
Se intendiamo utilizzare un solo tipo di layer (vedi punto successivo) possiamo lasciare invariata la porzione di script che inizializza gli oggetti della mappa, in caso contrario dobbiamo aggiungere il LayerSwitcher alla mappa per permettere agli utenti di cambiare layer al volo, modificando il codice che inizializza i controlli da così:
new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.Attribution()],
a così:
new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Attribution()],
In questo script è implementato solo il layer di Osmarender (il software di rendering open source nato in casa OpenStreetMap e utilizzato dal progetto di rendering distribuito tiles@home):
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
Volendo ottenere una mappa più interattiva è possibile aggiungere anche gli altri due layers standard usati da OpenStreetMap nelle mappe del sito:
- Mapnik layer (lo standard di rendering di OpenStreetMap)
- CycleMap (la mappa con le isoipse utili ai ciclisti)
Per aggiungere gli altri due layer è necessario modificare il codice precedente in questo modo:
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
Infine dobbiamo decidere soltanto le dimensioni di visualizzazione della mappa in modo da adattarla al contesto del nostro sito o blog, per fare ciò basta modificare le dimensioni proporzionali della mappa rispetto al <div> in cui è contenuta, in questo caso, essendo su di un file html a parte, ho deciso di lasciare le dimensioni della mappa grandi quanto la pagina html.
<div style="width:100%; height:100%" id="map"></div>
Clicca qui per vedere il risultato finale adattato alla mia città e se sei pigro ti basta fare clic con il destro e scegliere salva con nome per per scaricare il file già modificato, ma ricordati di cambiare almeno le coordinate della mappa!
Inserire mappe di OpenStreetMap nel proprio sito/blog
Qual'è la più grande soddisfazione per un mapper se non quella di mostrare i risultati del proprio lavoro sul sito o sul blog personale? Spulciando il wiki di OpenStreetMap mi sono imbattuto nella pagina OpenLayers Simple Example, in cui è descritta la procedura più semplice per inserire una slippy map standard in una pagina web attraverso uno script in Java. Essendo pythonista convinto, di Java non capisco molto, ma il codice mi è sembrato molto intuitivo, vediamo insieme il codice della pagina html:
<html>
<head>
<title>Slippy map di Terlizzi</title>
<!-- bring in the OpenLayers javascript library
(here we bring it from the remote site, but you could
easily serve up this javascript yourself) -->
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<!-- bring in the OpenStreetMap OpenLayers layers.
Using this hosted file will make sure we are kept up
to date with any necessary changes -->
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script type="text/javascript">
// Start position for the map (hardcoded here for simplicity,
// but maybe you want to get from URL params)
var lat=41.12925
var lon=16.5449
var zoom=15
var map; //complex object of type OpenLayers.Map
//Initialise the 'map' object
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
// Define the map layer
// Note that we use a predefined layer that will be
// kept up to date with URL changes
// Here we define just one layer, but providing a choice
// of several layers is also quite simple
// Other defined layers are OpenLayers.Layer.OSM.Mapnik, OpenLayers.Layer.OSM.Maplint and OpenLayers.Layer.OSM.CycleMap
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.setCenter (lonLat, zoom);
}
</script>
</head>
<!-- body.onload is called once the page is loaded (call the 'init' function) -->
<body onload="init();">
<!-- define a DIV into which the map will appear. Make it take up the whole window -->
<div style="width:100%; height:100%" id="map"></div>
</body>
</html>
Questa è una pagina html completa che integra una slippy map delle stesse dimensioni della pagina html, nel caso vogliate personalizzare il titolo della pagina (quello che compare nella finestra del browser) dovete modificare ciò che e compreso nel tag
<title>Modificare questo testo</title>
Il passo successivo consiste nel modificare le coordinate di origine della mappa e lo zoom di default, dal [sito][3], cliccando su "permalink" in basso a destra dopo aver cercato la città o la regione di interesse e lo zoom gradito e copiando il nuovo indirizzo che nel frattempo sarà comparso nella barra del browser. Le coordinate e lo zoom vanno inserite in questo punto del file html:
<script type="text/javascript">
var lat=41.12925
var lon=16.5449
var zoom=15
Se intendiamo utilizzare un solo tipo di layer (vedi punto successivo) possiamo lasciare invariata la porzione di script che inizializza gli oggetti della mappa, in caso contrario dobbiamo aggiungere il LayerSwitcher alla mappa per permettere agli utenti di cambiare layer al volo, modificando il codice che inizializza i controlli da così:
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Attribution()],
a così:
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
In questo script è implementato solo il layer di Osmarender (il software di rendering open source nato in casa OpenStreetMap e utilizzato dal progetto di rendering distribuito tiles@home):
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
Volendo ottenere una mappa più interattiva è possibile aggiungere anche gli altri due layer standard usati da OpenStreetMap nelle mappe del sito:
- Mapnik layer (lo standard di rendering di OpenStreetMap)
- CycleMap (la mappa con le isoipse utili ai ciclisti)
Per aggiungere gli altri due layer è necessario modificare il codice precedente in questo modo:
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
Infine dobbiamo decidere soltanto le dimensioni di visualizzazione della mappa in modo da adattarla al contesto del nostro sito o blog, per fare ciò basta modificare le dimensioni proporzionali della mappa rispetto al <div> in cui è contenuta, in questo caso, essendo su di un file html a parte, ho deciso di lasciare le dimensioni della mappa grandi quanto la pagina html.
<div style="width:100%; height:100%" id="map"></div>
Trasformare in massa tracce igc e nmea in tracce gpx
Durante l’openstreecamping2008 abbiamo avuto la necessità di trasformare, con gpsbable, le decine di tracce igc, il formato di tracking che utilizza il cellulare di Fradeve, raccolte durante i giri in bici in formato gpx che è il formato utilizzato da josm.
Dopo qualche giorno ci siamo resi conto che era noioso ridigitare ogni volta il comando dal terminale (ovviamente non tutto, ma modificando semplicemente il nome del file nel comando precedente) e potevamo perdere tempo prezioso in questo modo? Ovviamente no!
Mentre Fradeve leggeva la biografia di Torvalds (ve la consiglio) e il caldo era insopportabile, ho scritto un piccolo script in python per convertire in massa file igc e nmea in file gpx.
Credo sia possibile farlo anche in bash, ma non conoscendo il bash ho preferito usare il python e in particolare il modulo os, contenuto nella libreria standard, che permette al programma di interfacciarsi con il sistema operativo.
Clic qui per scaricare lo script
Qualche commento al codice:
if formato in ListaFormati :
ListaFile = CercaFile(os.listdir('.') , formato)
else :
print "Formato inesistente o non ancora implementato, esco dal programma."
exit()
Controlla il formato passato come argomento al programma e, se corretto (i formati accettati sono igc e nmea), restituisce una lista, attraverso la funzione os.listdir(cartella), con tutti i file contenuti nella cartella passata come argomento.
def CercaFile(lista, flag):
for i in lista:
if flag in i:
gpx.append(i)
return gpx
La funzione CercaFile restituisce una nuova lista contenente soltanto i file con l’estensione interessata (igc o nmea), eliminando tutti gli altri file inutili.
if ListaFile != []:
c = 0
for i in ListaFile:
stringa = "gpsbabel -i " + formato + " -f '" + i + "' -o gpx -F '" + i[0:-3] + "'gpx"
os.system(stringa)
c = c + 1
print "Ho trasformato " +str(c)+ " file in gpx ed ho cancellato i file " + formato + ""
else:
print "Non ci sono file da convertire, ciao!"
Controlla che ci siano file da convertire, in caso positivo passa al sistema, attraverso il la funzione os.system, il comando gpsbabel necessario alla conversione dei file. La stringa che può sembrare complicata serve a trasformare i file mantenendo il nome originale.
Per eseguire lo script basta copiare i file da trasformare nella stessa cartella dove è presente lo script e poi da terminale digitare:
$: python trasforma.py formato
dove formato deve essere sostituito con igc o con nmea a seconda del formato di partenza dei file.
Semplice, veloce ed efficace a patto di aver gpsbabel installato, ovviamente!
Trasformare in massa tracce igc e nmea in tracce gpx
Questo è un post scritto da Sdonk, ospitato qui sul mio blog 
Durante l'openstreecamping2008 abbiamo avuto la necessità di trasformare, con gpsbabel, le decine di tracce igc, il formato di tracking che utilizza il cellulare di Fradeve, raccolte durante i giri in bici in formato GPX che e il formato utilizzato da JOSM. Dopo qualche giorno ci siamo resi conto che era noioso ridigitare ogni volta il comando dal terminale (ovviamente non tutto, ma modificando semplicemente il nome del file nel comando precedente) e potevamo perdere tempo prezioso in questo modo?
Ovviamente no! Mentre Fradeve leggeva la biografia di Torvalds (ve la consiglio) e il caldo era insopportabile, ho scritto un piccolo script in python per convertire in massa file igc e nmea in file GPX. Credo sia possibile farlo anche in Bash, ma non conoscendo il Bash ho preferito usare il python e in particolare il modulo os, contenuto nella libreria standard, che permette al programma di interfacciarsi con il sistema operativo. Clic qui per scaricare lo script
Qualche commento al codice:
[[!format Errore: /etc/highlight/filetypes.conf: No such file or directory]]
Controlla il formato passato come argomento al programma e, se corretto (i formati accettati sono igc e nmea), restituisce una lista, attraverso la funzione os.listdir(cartella), con tutti i file contenuti nella cartella passata come argomento.
[[!format Errore: /etc/highlight/filetypes.conf: No such file or directory]]
La funzione CercaFile restituisce una nuova lista contenente soltanto i file con l'estensione interessata (igc o nmea), eliminando tutti gli altri file inutili.
[[!format Errore: /etc/highlight/filetypes.conf: No such file or directory]]
Controlla che ci siano file da convertire, in caso positivo passa al sistema, attraverso il la funzione os.system, il comando gpsbabel necessario alla conversione dei file. La stringa che può sembrare complicata serve a trasformare i file mantenendo il nome originale. Per eseguire lo script basta copiare i file da trasformare nella stessa cartella dove è presente lo script e poi da terminale digitare:
$: python trasforma.py formato
dove formato deve essere sostituito con igc o con nmea a seconda del formato
di partenza dei file.
Semplice, veloce ed efficace a patto di aver gpsbabel installato, ovviamente!


