Sei sulla pagina 1di 9

OPENSTREETMAP

IL SITO DELLA COMUNIT ITALIANA

La Mappa

FAQ

Mappe all'opera Venezia


Litorale del Cavallino

HOME LA MAPPA FAQ INFO GUIDA AL SITO CONTATTI IMPARA

Accedere ed utilizzare i dati di


OpenStreetMap: i rendering
22. ottobre 2012 Commenti disabilitati su Accedere ed utilizzare i dati di
OpenStreetMap: i rendering Categorie:Blog Tag:crowdsourcing, database,
dati, geografia, Informatica, maperitive, mapnik, Mondo Linux,
OpenStreetMap, postgresql, tilemill, xml

Questa volta introduciamo qualche aspetto tecnico dell'infrastruttura


di OSM, come recuperare i dati e come utilizzarli per generare da soli
una cartina.

Accedere ai dati

All'inizio abbiamo detto che OSM permette di usufruire dei dati che
noi utenti abbiamo contribuito a creare. Ma come si accede ai dati?
Senza entrare nei dettagli (per chi vuole sviluppare, possiamo
approfondire o c' sempre la wiki che un ottimo punto di partenza)
facciamo una breve panoramica su quello che sta dietro a tutto.
Quello che vediamo sul sito principale -il Rails Port- viene spesso
confuso col progetto in s, ma se vogliamo sottilizzare, si compone di
una parte di 'frontend' (ed solo uno dei molteplici frontend possibili,
ma ne parleremo pi in l), ed una parte di backend, che comprende il
database e le API.
Il database basato su PostgreSQL -open source!-, ma non possibile
interrogarlo direttamente: per fare questo ci sono due metodi, uno
usare le API, l'altro utilizzare degli estratti.

Anche qui, un utente 'tipico' probabilmente user il secondo metodo,


ma un programmatore vorr sapere almeno che:
-le uniche API che permettono l'accesso in scrittura sono composte da
chiamate RESTful e sono documentate;
-ci sono le xAPI (extended API) in sola lettura, che permettono
interrogazioni anche abbastanza complesse, di cui attualmente forse
la pi facile da usare l'Overpass API
-ci sono diverse implementazioni di interfacce alle API in diversi
linguaggi (Perl, Python e cos via).

In buona sostanza, quando si parla col database, lui ci risponde con un


file xml. Questo file xml anche la base di quelli che vengono chiamati
estratti: il database viene periodicamente salvato e ogni settimana
viene prodotto il planet (scaricabile qua, 23 GB compressi), un enorme
file xml contenente tutti i dati nella loro versione corrente, e
Geofabrik offre in download lo stesso suddiviso per per nazione
(l'associazione Gfoss.it offre l'estratto italiano anche suddiviso per
regioni).
Il formato xml utilizzato viene salvato con estensione .osm, ed
leggibile da tutti i programmi dedicati, tra cui JOSM di cui abbiamo
accennato la volta scorsa.
Un altro formato derivato quello che usa i protocol buffer, una
invenzione di Google che permette tempi di lettura molto accorciati e
minore spazio occupato: questi ultimi hanno estensione pbf e sono
meno compatibili perch sono stati introdotti relativamente di
recente.
A cascata, da questi due formati principali (.osm e .pbf) derivano tutti
gli altri usati dalle pi applicazioni pi disparate.

C' chi vuole per avere un database, come fa a copiarlo? Deve passare
nuovamente dai file messi a disposizione, dal planet o da uno dei suoi
derivati. Esistono numerosi tool che permettono la conversione di
formati (osmosis ad esempio) e numerosi tool che permettono di
popolare database con i dati OSM. Ovviamente il pi compatibile
PostgreSQL (l'import "banale" con strumenti come ImpoOSM e
osm2pgsql). Ne accenniamo parlando di Tilemill pi sotto.

Interludio: ortorettificazione, modelli del terreno

Prima di passare alla parte 'mani in pasta' di oggi, volevo citare


brevemente due argomenti utili per eventuali approfondimenti.

1. Ortorettificazione

L'altra volta ho citato le ortofoto del PCN. Come si distinguono dalle


immagini satellitari o aeree?
Le immagini prese dal mezzo (che sia aereo o satellite) devono venir
processate per eliminare le distorsioni prodotte dai rilievi: considerate
ad esempio un edificio e guardate una foto aerea normale, vi
accorgerete che si vede la facciata, mentre ci si sarebbe aspettato di
vedere solamente il tetto; idem vale per le montagne. Quando si parla
di distorsioni si intende proprio questo, e per garantire che le
misurazioni effettuate sulle foto siano corrette, esse devono venir
ortorettificate applicando una trasformazione geometrica: a questo
punto vedrete solo i tetti.

2. Modelli del terreno

La trasformazione geometrica del punto precedente viene di solito


effettuata tramite modelli digitali dell'elevazione (DEM) o del terreno
(DTM). Come dice il termine stesso, essi sono delle rappresentazioni
della topografia di un territorio, e l'applicazione pi evidente ad
esempio una cartina fisica.
L'unico modello del terreno "open" al momento lo SRTM (Shuttle
Radar Topography Mission) prodotto dalla NASA, che ha una
risoluzione a 30 metri (1 arcosecondo) sugli Stati Uniti e 90 metri (3
arcosecondi) sul resto del globo. Copre l'area 56 Sud - 60 Nord, con
alcune zone No data (nei deserti e sulle montagne). Questo quello
che passa il convento :)

Rendering su server
Se volete costruirvi un server per mostrare mappe, vi consiglio di
guardare in giro (ad esempio http://switch2osm.org/serving-tiles/),
perch qui introduco solo il concetto di tile -da cui poi viene anche il
nome tileserver-.

Come funzionano le mappe sul web?


Il workflow semplice, almeno nel caso di OSM: l'utente inquadra
un'area sullo schermo, la libreria integrata nel sito calcola le
coordinate e le converte nelle rispettive tile, quadratini di 256x256
pixel, richiedendole al server. Il server ovviamente non se le genera
tutte subito (specialmente per gli zoom grandi): se non ha una tile
pronta -o vecchia- la genera tramite il programma -in questo caso
Mapnik- e la serve all'utente. Quest'ultimo se le trova appiccicate una
all'altra e ha l'impressione di vedere una mappa completa.

Sul sito principale ci sono disponibili 18 livelli di zoom (lo zoom 1 una
tile che comprende tutto il globo, lo zoom 2 comprende il globo in 4
tile e cos via), tralascio tutta la matematica e altri concetti, e se
dovesse generare tutte le possibili tile occuperebbe circa 54 TeraByte
di spazio!

Rendering: Maperitive

Ho gi parlato di rendering, ma non ho detto che ! Come per la


grafica 3D, fare il rendering di un'area prendere i dati grezzi e
'convertirli' in una immagine. Esistono diversi programmi che
compiono quest'azione.

Il pi user-friendly, Maperitive pensato per Windows, non open-


source e scritto in C# (che cavolo ve lo presento a fare allora? :D), ma
possibile eseguirlo tramite Mono (bisogna installare il metapackage
mono-complete).
Probabilmente ne avete gi visto una applicazione, se seguite il
ciclismo: da due anni il Giro d'Italia produce le mappe delle
tappeusando i dati OSM e Maperitive. Un'altra applicazione sportiva la
vediamo nel circuito PSArally.
Scaricato l'archivio dal sito, lo scompattiamo e da terminale entriamo
nella cartella, eseguendo "sh Maperitive.sh". Si apre l'interfaccia del
programma ed in teoria appare un livello di mappe web (a me non si
apre perch da un errore).
L'interfaccia ha tre riquadri: nel principale appare la mappa come
dovrebbe apparire nel prodotto finale, in basso a destra abbiamo i
livelli, a sinistra il "command prompt".
Dal men ad esempio andiamo su File->Open Map sources ed apriamo
un file .osm (scaricato da un servizio tra quelli elencati nella prima
parte), vediamo che il programma ci riflette un po' ed appare la
mappa! Dal menu Map possiamo scaricare dalle API read only o
cambiare il ruleset (un elenco di regole che definiscono come deve
apparire la mappa); da Tools possiamo aggiungere per esempio
l'ombreggiatura o le curve di livello basate su SRTM.
Sul sito c' anche una estensiva documentazione che spiega anche
tutti i comandi che possono essere usati nel prompt.
Si pu scegliere se esportare una mappa 'raster' (ovvero una bitmap),
una mappa vettoriale (in SVG o nel formato di Illustrator, per ulteriori
tweak con programmi di grafica) o ancora come tiles da caricare su un
webserver (nel caso non voleste creare un sistema che generi al volo le
tiles, questa una soluzione che ha come difetto la necessit di
generare tutte le possibili tile per ogni livello che scegliamo. un
servizio che usa questo metodo Mapefurlane).

Rendering: Tilemill

Abbiamo accennato nel primo articolo a Mapbox, una delle societ che
fanno business su OSM: questa offre la possibilit di applicare il
proprio stile personalizzato ad una mappa web, generata come
spiegato due sezioni fa, ovviamente facendosi pagare in base al
traffico che uno ci si aspetta. Oltre ad aver ricevuto un finanziamento
per migliorare OSM, ha rilasciato TileMill, una applicazione open
source (https://github.com/mapbox/tilemill) costruita intorno a
Mapnik, che permette ad ognuno di personalizzare facilmente
l'aspetto di una mappa; il prodotto finale pu essere salvato in locale o
caricato sui server Mapbox, ricollegandosi al business dell'azienda.
Dal sito possibile scaricare il pacchetto di installazione per Windows,
Mac e Ubuntu (o derivate) -per inciso ci sono anche delle spiegazioni
pi chiare delle mie-.

Come sorgente di dati Tilemill non accetta gli estratti come nel caso
precedente, ma mostra tutta la sua potenzialit con i database.
L'aspetto della mappa comandato invece da un linguaggio simile al
CSS, Carto. Esistono stili gi preconfezionati che si trovano su Github,
come MapBoxStreets (che lo stile di default dell'offerta Mapbox, lo
potete vedere in questa pagina) e OSMBright; per questi ci sono delle
guide che permettono di installare progetti configurati tramite
semplici script Python.
Il passo preliminare la preparazione del database, posto che abbiate
installato postgresql (9.1, lo trovate nei repository) e osm2pgsql
(idem, nei repo):
-sudo passwd postgres (cambiamo la password di default)
-su - postgres (passiamo all'user che admin del database)
-createdb gis (creiamo un database che useremo per mettere i dati)
-psql -s gis (accediamo alla console)
#create user <username> password '<una password>';
#GRANT ALL PRIVILEGES ON DATABASE gis TO <username>;

Torniamo al nostro user usando di nuovo su ed eseguiamo:


-psql -d gis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql
-echo "ALTER TABLE geometry_columns OWNER TO <username>;
ALTER TABLE spatial_ref_sys OWNER TO <username>;" | psql -d gis
-psql -f /usr/share/osm2pgsql/900913.sql -d gis

Adesso il database configurato, e possiamo buttarci dentro i dati:


osm2pgsql -S /usr/share/osm2pgsql/default.style -d gis [estratto.osm]

UPDATE 5/12/12: Se avete ricevuto l'update di postgis alla versione


2.0, installate questo ppa e fate l'upgrade di
osm2pgsqlhttps://launchpad.net/~kakrueger/+archive/openstreetmap

Scegliendo ad esempio OSMBright, scarichiamo lo zip, lo


scompattiamo, copiamo configure.py.sample in configure.py,
cambiamo i dati all'interno per farlo corrispondere alla nostra
configurazione ed eseguiamo make.py (scaricher circa 400MB di dati
che comprendono le linee di costa).
In Tilemill avrete un progetto gi pronto e configurato che potrete
esportare facilmente come immagine.

Se volete partire da zero, create un nuovo progetto da Tilemill,


inserite due livelli contenenti gli shapefile delle linee di costa (Add
Layer, compilate la scheda File), e poi inserite livelli corrispondenti alle
query che prendono gli oggetti che volete rappresentare (Add Layer,
scheda Postgis, il campo Connection sar tipo 'dbname=gis
host=localhost port=5432 user=<username> password=<password>',
in table ci andr la tabella che volete interrogare (o una sottoquery se
volete prendere solo certi oggetti), ad esempio 'planet_osm_roads'
che contiene le strade; inserendo l'id o la classe, potrete scrivere del
css per dare uno stile a certe cose, ad esempio scegliendo 'strade' un
esempio di regola potrebbe essere
#strade[highway='primary']
{
line-color:#fff;
}

Ecco un esempio: ho installato un progetto OSM Bright, e volevo


evidenziare i Palazzi dei Rolli a Genova, patrimonio Unesco e mappati
tutti con il tag che rappresenta proprio i Patrimoni dell'Umanit
(historic=unesco_world_heritage).
Ho creato un nuovo Layer e inserito in id 'rolli', la connessione e in
'Table or subquery'
(SELECT
*
FROM
public.planet_osm_polygon
WHERE
planet_osm_polygon.historic='unesco_world_heritage'
) AS rolli

Sono passato ad aggiungere un nuovo file sulla destra, e ho inserito un


semplice
#rolli
{
polygon-fill:#7f0000;
}

Questo il risultato:
Rendering: gli altri

Ce ne sono molti altri, ho preferito esporre i due pi user friendly e


conosciuti.
Altri che possono essere citati:
-quelli che sfruttano HTML5: <a
href="http://kothic.org/js/">KothicJS</a>
-<a
href="http://wiki.openstreetmap.org/wiki/Mapweaver">Mapweaver</a>,
un set di script perl
-<a href="http://maposmatic.org/">MapOSMatic</a>, un servizio per
generare atlanti
-<a href="http://code.google.com/p/mapsforge/">Mapsforge</a>, in
realt una libreria per Android, su cui si basano diverse applicazioni,
che fa il rendering al volo.

Conclusione

Ho saltato tutte le parti tecniche a parte il secondo mini-tutorial,


poich questa serie di articoli vuole fornire una panoramica pi
generale per invogliarvi a cercare e fare da voi), ma se volete maggiori
informazioni o se avete domande, mi trovate nei commenti o su
Google+.

Riportando una discussione su Google+, esiste anche un editor


abbastanza completo per Android. Si chiama Vespucci,
http://code.google.com/p/osmeditor4android/ questo il sito, e lo
trovate anche su Google Play. E' ripreso lo sviluppo grazie al Google
Summer Of Code, e se avete un tablet potrebbe essere una alternativa
per inserire dati sul campo.

ARTICOLI RECENTI

OpenStreetMap e SVG (aka elaborare la mappa di OSM in Illustrator)


OpenStreetMap e SVG (aka elaborare la mappa di OSM in Illustrator)
Miglioriamo OpenStreetMap con StreetComplete
Miglioriamo OpenStreetMap con StreetComplete
Informazione geografica: un bene di cui prendersi cura
COMMENTI RECENTI

lucadelu su Contatta un mappatore


lucadelu su Contatta un mappatore
lucadelu su Contatta un mappatore
lucadelu su La Mappa
lucadelu su La Mappa

LINK:

Sito OpenStreetMap internazionale.

2017 OpenStreetMap Italia. CC-BY-SA.


Design by picomol.de. Powered by WordPress.

Potrebbero piacerti anche