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?
Download

Tutorial sobre OpenLayers e SIMILE Exhibit