OpenStreetMap +OpenLayers
realizziamo le nostre mappe dinamiche, interattive, libere!
Carmine De Rosa
24 ottobre 2014 - Università di Salerno
Agenda
Cos'è OpenStreetMap?
●
Le differenze con Google Map Maker
●
●
●
●
●
Come funziona?
●
Acquisizione dei dati e creazione delle mappe
●
Fonti governative e rilievi sul territorio
Il database di OSM
●
Dati degli utenti
Rendering e presentazione delle mappe
●
Formato dei dati
●
WKT (Well-Known Text)
OpenLayers
●
Come funziona
●
Vector e Tiled layers
●
XYZ source
Esempio pratico di integrazione
OpenStreetMap
OpenStreetMap » Cos'è?
« OpenStreetMap è una mappa liberamente modificabile dell'intero pianeta. È fatta
da persone come te. OpenStreetMap permette a chiunque sulla Terra di visualizzare,
modificare ed utilizzare dati geografici con un approccio collaborativo. »
Fonte: sito ufficiale del progetto
OpenStreetMap » Cos'è?
OpenStreetMap (OSM) è un progetto collaborativo finalizzato a creare mappe a
contenuto libero del mondo. Il progetto punta ad una raccolta mondiale di dati
geografici, con scopo principale la creazione di mappe e cartografie.
La caratteristica fondamentale dei dati geografici presenti in OSM è che possiedono
una licenza libera, la Open Database License. È cioè possibile utilizzarli liberamente
per qualsiasi scopo con il solo vincolo di citare la fonte e usare la stessa licenza per
eventuali lavori derivati dai dati di OSM. Tutti possono contribuire arricchendo o
correggendo i dati.
OpenStreetMap != GoogleMaps
OpenStreetMap
GoogleMaps
Visualizzazione dei contenuti
SI
SI
Aggiunta di punti di interesse (marker)
SI
limitata
Aggiunta di livelli personalizzati
SI
NO
Modifica dei contenuti
SI
NO
Possibilità di scaricare i dati
SI
NO
Accesso ai dati geolocalizzati
SI
limitata
OpenStreetMap » Come funziona?
Le mappe sono create usando come riferimento i dati registrati da dispositivi GPS
portatili, fotografie aeree ed altre fonti libere. Sia le immagini renderizzate che i dati
vettoriali, oltre che lo stesso database di geodati sono diffusi sotto licenza Open
Database License.
OpenStreetMap » Acquisizione dei dati
Di base, i dati per la realizzazione delle mappe sono ricavati da schizzi realizzati da
volontari che intraprendono sistematici rilievi sul territorio muniti di unità GPS
portatili capaci di registrare il percorso, insieme a smartphone, computer portatili o
registratori vocali. Le informazioni raccolte vengono introdotte via computer nel
database, in formato vettoriale.
OpenStreetMap » Acquisizione dei dati
Alcune agenzie di governo hanno fornito i propri dati ufficiali con licenze appropriate
per l'importazione in OpenStreetMap. Varie altre autorità locali hanno donato i
propri dati fotografici per mezzo di licenze compatibili attraverso OpenAerialMap.
“ In Italia, l'ISTAT, mette a disposizione le coordinate dei centri abitati e i confini di Regioni, Provincie e Comuni. Nel
2010 il Ministero dell'Ambiente e della Tutela del Territorio e del Mare ha autorizzato l'uso delle fotografie aeree
ortorettificate, disponibili sul Portale Cartografico Nazionale, per ricalcarle e ricavarne dati vettoriali da inserire in
OpenStreetMap”
OpenStreetMap » Il database
Il database di OpenStreetMap è pubblicato secondo la licenza Open Database
License. La cartografia contenuta nelle tavole e la documentazione sono invece rese
disponibili sotto licenza Creative Commons Attribuzione - Condividi allo stesso modo
2.0 (CC-BY-SA).
Tutti i dati inseriti dagli utenti devono essere caricati secondo una licenza compatibile con la CC-BY-SA. In questo
modo possono essere inclusi anche dati nel pubblico dominio o sotto altre licenze compatibili. Tutti i contributori
devono essere registrati al progetto ed accettare di sottoporre i propri dati con la licenza Creative Commons BY-SA
2.0 o specificare che la licenza con cui i loro dati sono forniti è compatibile con questa.
OpenStreetMap » Rendering e presentazione delle mappe
II dati di OpenStreetMap sono disponibili in un numero sempre crescente di siti ed in
differenti formati. Le mappe generate con i dati sono presenti su internet per varie
categorie di utenti, mappe generali, ciclisti, pedoni, sciatori, ecc …
Queste mappe sono utilizzabili tramite diversi dispositivi, dai PC ai dispositivi portatili
come smartphones o dispositivi GPS, mediante l'utilizzo di software specifici, oppure
sul web utilizzando librerie come OpenLayers.
OpenStreetMap » Formato dei dati
OpenStreetMap usa una struttura dati topologica.
●
I nodes (in italiano "nodi") sono punti con posizione geografica.
●
Le ways (in italiano "vie") sono liste di nodes, rappresentanti una polilinea o poligono.
●
Le relations (in italiano "relazioni") sono gruppi di nodes, ways ed altre relations alle quali
possono essere assegnate precise proprietà.
●
I tag (in italiano "etichette") possono essere applicati a nodes, ways o relations e consistono
in coppie nome=valore.
L'ontologia delle caratteristiche della mappa (il significato dei tag) è organizzata su un wiki:
http://wiki.openstreetmap.org/wiki/Map_features
OpenStreetMap » WKT
Il Well-known text (WKT) è un linguaggio creato per rappresentare:
●
oggetti di geometria vettoriale su una mappa,
●
un Sistema di Coordinate di Riferimento (una proiezione),
●
una trasformazione tra sistemi di coordinate.
OpenStreetMap » WKT
Gli oggetti geometrici che possono essere rappresentati da WKT sono Punti, Linee,
Poligoni e Poliedri. Sono altresì possibili le multi-geometrie, che rappresentano due o
più geometrie (della stessa dimensione) in un solo oggetto come collezione di
geometrie.
Le coordinate per le geometrie WKT possono essere 2D (x,y), 3D (x,y,z), 3D (x,y,m)
dove il valore m è parte di un sistema di riferimento lineare, 4D con un valore m
(x,y,z,m).
OpenStreetMap » WKT
ALCUNI ESEMPI:
POINT(6 10)
LINESTRING(3 4,10 50,20 25)
POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2))
MULTIPOINT(3.5 5.6,4.8 10.5)
MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))
MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)))
GEOMETRYCOLLECTION(POINT(4 6),LINESTRING((4 6,7 10)))
POINT ZM (1 1 5 60)
POINT M (1 1 80)
OpenLayers
OpenLayers
OpenLayers è una libreria JavaScript di tipo Open Source con licenza derivata dalla
licenza BSD per visualizzare mappe interattive nei browser web.
OpenLayers » Come funziona
OpenLayers offre una API ai programmatori per poter accedere a diverse fonti
d'informazioni cartografiche in Internet come: Web Map Service, mappe di tipo
commerciale (Google Maps, Bing, Yahoo), Web Feature Service, diversi formati
vettoriali, mappe del progetto OpenStreetMap, ecc...
Consente inoltre di personalizzare le proprie mappe ed aggiungere nuovi livelli e
funzionalità...
OpenLayers » Come funziona
… i livelli di base possono essere sia vettoriali che raster, e possono provenire sia da
fonti remote che locali*.
Le sorgenti XYZ sono composte da numerose tiles di dimensione fissa (250x250 px)
che vengono affiancate a formare la nostra mappa, queste tiles sono divise in gruppi
che definiscono il livello di zoom, e sono identificate da una coppia di “coordinate”
XY.
Passiamo alla pratica!
Esempio di base
<html><body>
<div id="demoMap"></div>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script>
map = new OpenLayers.Map("demoMap");
map.addLayer(new OpenLayers.Layer.OSM());
map.zoomToMaxExtent();
</script>
</body></html>
<title>layer
OSM </title>
<script
src="http://www.openlayers.org/api/OpenLayers.js"></script>
Esempio 2
<script type="text/javascript">
var lat=40.77460;
var lon=14.78950;
var zoom=13;
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.Permalink('permalink'),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.Attribution()
],
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
var mapnik = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");
map.addLayer(mapnik);
var lonLat = new OpenLayers.LonLat( lon ,lat )
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
);
map.setCenter (lonLat, zoom);
}
</script>
Altri esempi ...