»
S
I
D
E
B
A
R
«
Il mio regalo estivo ai progetti Wikimedia
ago 21st, 2008 by Fradeve

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
ago 19th, 2008 by sdonk

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!

Trasformare in massa tracce igc e nmea in tracce gpx
ago 18th, 2008 by sdonk

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!

OpenBlog + OpenStreetMap = Sdonk
ago 18th, 2008 by Fradeve

Fradeve OpenBlog si arricchisce di un editore: dopo l’esperienza dell’OpenStreetCamping 2008, ho deciso di unire le mie forze (e di chiunque voglia aggregarsi) con Alessandro (aka Sdonk) per pubblicare articoli su OpenStreetMap, per cercare di far crescere la Comunità di questo progetto collaborativo per la realizzazione di mappe libere, anche in Italia.

I miei auguri ad Alessandro e buona lettura a tutti ;)

PS: aggiungo il suo blog nel mio blogroll ;)

»  Substance: WordPress   »  Style: Ahren Ahimsa