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 ...