Tutorial sobre visualização de dados geo-referenciados com OpenLayers e SIMILE Widgets DEI-IST 2009/2010 Organização do Tutorial Introdução do OpenLayers Visualização de dados georeferenciados Apresentação da framework Mapas simples, uso de várias camadas e posicionamento. Visualização de de dados representados em GML Visualização de dados representados em KML Visualização de dados com o SIMILE Exhibit Visualização de informação com referências geo-temporais Aplicações com mapas, timelines e pesquisa por facetas Parte 1 INTRODUÇÃO AO OPENLAYERS Introdução ao OpenLayers 2005 Mapas dinâmicos em aplicações Web com Google Maps, Yahoo! Maps, ... Várias APIs proprietárias. 2006 Lançamento do OpenLayers (MetaCarta, código aberto, licença BSD) Uma framework “client-side” para aplicações Web-GIS Suporta formatos abertos e proprietários Facilita desenvolvimento de aplicações Web com mapas dinâmicos Framework muito utilizada no desenvolvimento de mashups http://gallery.openlayers.org/ Framework cliente para Web-GIS http://mapserver.org/ http://geoserver.org/ Apresentação de um mapa <html> <head> <title>OpenLayers Example</title> <script src=”http://openlayers.org/api/OpenLayers.js” /> <script type="text/javascript”> function init() { } </script> </head> <body onload=init()> <div style="width: 800px; height: 475px;" id="map"> Hello My Map </div> </body> </html> Apresentação de um mapa var map = new OpenLayers.Map('map'); var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers:'basic'} ); map.addLayer(wms); map.zoomToMaxExtent(); Sistema de coordenadas usado por omissão: EPSG: 4326 (WGS84) Alterações no mapa inicial remover map.zoomToMaxExtent(); e adicionar: var lon = 9.06; var lat = 45.80; var zoom = 10; map.setCenter( new OpenLayers.LonLat(lon, lat), zoom ); Adição de novos controlos sobre o mapa: map.addControl( new OpenLayers.Control.LayerSwitcher() ); map.addControl( new OpenLayers.Control.MousePosition() ); Adição de novas camadas var CTR = new OpenLayers.Layer.WMS( 'CTR WMS', 'http://www.cartografia.regione.lombardia.it/’ + 'arcgis93/services/wms/ctr_wms/MapServer/WMSServer', {layers:'0', projection: 'EPSG:4326'} ); map.addLayer(CTR); Adicionar uma “overlay layer”: var CT10 = new OpenLayers.Layer.WMS( 'CT10 WMS','http://www.cartografia.regione.lombardia.it’ ‘/ArcGIS93/services/wms/ct10_wms /MapServer/WMSServer', {layers:'5', projection:'EPSG:4326', transparent:'true'} ); map.addLayer(CT10); http://www.cartografia.regione.lombardia.it/geoportale Receitas rápidas http://trac.openlayers.org/wiki/UserRecipes Apresentação de mapas de serviços comerciais Interrogações sobre serviços WMS ou WFS Adição de nova informação sobre o mapa Overlays de informação em GML ou KML http://openlayers.org/dev/examples/vector-formats.html Parte 2 VISUALIZAÇÃO DE DOCUMENTOS GML E KML COM O OPENLAYERS Geometrias GML sobre um mapa <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="http://openlayers.org/dev/OpenLayers.js"></script> <script type="text/javascript"> var lon = 5; var lat = 40; var zoom = 5; var map, layer; function init(){ map = new OpenLayers.Map('map'); layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} ); map.addLayer(layer); map.zoomToExtent(new OpenLayers.Bounds(-3.9221,44.3353,4.8669,49.5538)); map.addLayer(new OpenLayers.Layer.GML("GML", "http://openlayers.org/dev/examples/gml/polygon.xml")); } </script> </head> <body onload="init()"> <h1 id="title">GML Layer Example</h1><div id="tags"></div> <p id="shortdesc">Loads GML vector data on a basemap.</p> <div id="map" class="smallmap"></div><div id="docs"></div> </body> </html> Geometrias GML sobre um mapa Documento KML sobre um mapa <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="http://openlayers.org/dev/OpenLayers.js"></script> <script type="text/javascript"> var lon = 5; var lat = 40; var zoom = 5; var map, layer; function init(){ map = new OpenLayers.Map('map'); layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} ); map.addLayer(layer); map.addLayer(new OpenLayers.Layer.GML("KML", "http://openlayers.org/dev/examples/kml/lines.kml", { format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true, maxDepth: 2 } })); map.zoomToExtent(new OpenLayers.Bounds(-112.3066,36.0177,-112.032,36.180)); } </script> </head> <body onload="init()"> <h1 id="title">KML Layer Example</h1><div id="tags"></div> <p id="shortdesc">Displaying a KML file over basemap.</p> <div id="map" class="smallmap"></div><div id="docs"></div> </body> </html> Documento KML sobre um mapa Mapas de cloropletas (cores) function init(){ var lon = 5; var lat = 15; var zoom = 2; var options = { numZoomLevels: 6, controls: [] }; map = new OpenLayers.Map('olmap', options); var vectors = new OpenLayers.Layer.GML( "KML", "http://thematicmapping.org/data/kml/internet_users_2005_choropleth_lowres.kml", { isBaseLayer: true, format: OpenLayers.Format.KML, formatOptions: { extractStyles: true, extractAttributes: true }}); map.addLayer(vectors); map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.addControl(new OpenLayers.Control.MouseDefaults()); map.addControl(new OpenLayers.Control.PanZoomBar()); } http://thematicmapping.org/playground/openlayers_choropleth_kml.php Mais ideias Thematic mapping with KML http://blog.thematicmapping.org/ Map tiles com o GDAL2Tiles Mapas de símbolos proporcionais http://blog.thematicmapping.org/2008/03/generating-map-tiles-with-gdal2tiles.html http://thematicmapping.org/playground/openlayers_maptiles.php http://thematicmapping.org/playground/openlayers_propsymbols_geojson.php http://blog.thematicmapping.org/2008/04/proportional-symbol-mapping-with.html Integração com o Google Charts http://thematicmapping.org/playground/openlayers_piecharts_geojson_google_chart.php http://blog.thematicmapping.org/2008/04/openlayers-and-google-chart-mashup.html Parte 3 SIMILE EXHIBIT Publishing Framework for DataRich Interactive Web Pages O SIMILE Exhibit facilita criação de páginas Web com: Mapas e informação georreferenciada Timelines Pesquisa e navegação com base em facetas Usa API do Google Maps para apresentação de informação georreferenciada sobre mapas Interessante para a construção de mashups. http://www.simile-widgets.org/exhibit/ SIMILE EXHIBIT Exemplo “U.S. Presidents” Timeline Mapa com pins Pesquisa texto Facetas Religião Repúblicano/Democrata ... Mais exemplos na página Web do SIMILE Exhibit Mapas e SIMILE Exhibit { items: [ { }, { }, { }, { } ] } label: address: subject: "MIT", type: "School", "77 Massachusetts Avenue, Cambridge, MA 02139", "Computer Science" label: address: subject: "Harvard Medical School", type: "25 Shattuck St., Boston, MA 02115", "Medical" label: address: subject: "Stanford", type: "Stanford, CA 94305", "Computer Science" label: address: subject: "CMU", type: "School", "5000 Forbes Avenue, Pittsburgh, PA 15213", "Computer Science" "School", "School", Mapas e SIMILE Exhibit <html> <head> <title>Schools</title> <link href="schools.js" type="application/json" rel="exhibit/data" /> <script src="http://static.simile.mit.edu/exhibit/api-2.0/exhibit-api.js" type="text/javascript"></script> <script src="http://static.simile.mit.edu/exhibit/extensions-2.0/map/map-extension.js?gmapkey=" type="text/javascript"></script> </head> <body> <button onclick="getLatLng();">Get Lat/Lng</button><br/> <textarea id="results" rows="20" style="width: 100%;"></textarea> <script type="text/javascript"> function getLatLng() { var database = exhibit.getDatabase(); Exhibit.MapView.lookupLatLng( database.getSubjects("School", "type"), ".address", "addressLatLng", document.getElementById("results"), database, 4 ); } </script> </body> </html> Mapas e SIMILE Exhibit { items: [ { }, { }, { }, { label: address: subject: "MIT", type: "School", "77 Massachusetts Avenue, Cambridge, MA 02139", "Computer Science" label: address: subject: "Harvard Medical School", type: "25 Shattuck St., Boston, MA 02115", "Medical" label: address: subject: "Stanford", type: "Stanford, CA 94305", "Computer Science" label: address: subject: "CMU", type: "School", "5000 Forbes Avenue, Pittsburgh, PA 15213", "Computer Science" }, { id: { id: { id: { id: ] } "School", "School", 'MIT', addressLatLng: '42.359,-71.093553' }, 'Harvard Medical School', addressLatLng: '42.335743,-71.105138' }, 'Stanford', addressLatLng: '37.423573,-122.161867' }, 'CMU', addressLatLng: '40.444583,-79.942868' } Mapas e SIMILE Exhibit <html> <head> <title>Schools</title> <link href="schools.js" type="application/json" rel="exhibit/data" /> <script src="http://static.simile.mit.edu/exhibit/api-2.0/exhibit-api.js" type="text/javascript"></script> <script src="http://static.simile.mit.edu/exhibit/extensions-2.0/map/map-extension.js?gmapkey=" type="text/javascript"></script> </head> <body> <div ex:role="view" ex:viewClass="Map" ex:latlng=".addressLatLng" ex:colorKey=".subject"> </div> </body> </html> Documentação sobre as opções para ex:viewClass=“Map” http://simile.mit.edu/wiki/Exhibit/2.0/Map_View Questões?