IT:OpenLayers Simple Example
Inserisci una mappa OpenStreetMap nel tuo sito
Questo semplice esempio può aiutarti se vuoi inserire una mappa OpenStreetMap nel tuo sito. Un semplice frammento di codice della libreria javascript di OpenLayers ti consente di inserire una mappa OSM nella tua pagina web.
Nota: OpenStreetMap genera le tiles della mappa
Tenere presente che le tiles della mappa sono generate ed inviate dai servers di OpenStreetMap che supporta questo tipo di uso ma non offre nessuna garanzia. Ci potrebbero essere periodi di inattività, previsti o meno, e gli URLs delle tiles potrebbero cambiare.
Se è previsto un grosso carico di utenza sul sito dove verrà visualizzata la mappa OSM, è meglio concordare prima la cosa con lo staff OSM(Contact). In questo caso è meglio prendere in considerazione la possibilità di creare autonomamente le tiles creating your own tiles o settare la propria cache per contenere le tiles della mappa. Questo allo scopo di ridurre la dipendenza per il vostro sito e di alleggerire l' uso di banda per i server OSM.
Istruzioni
Copiare le linee di codice degli esempi che seguono in un nuovo file, salvarlo come file HTML e visualizzarlo in un browser.
Può essere molto utile usare a questo scopo con un editore di testo come Notepad++
Un semplice esempio
<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>
Questo codice può non funzionare correttamente con tutti i browser in quanto manca di alcuni parametri (altezza/larghezza) come mostrato nel prossimo esempio, ma in Firefox è ok. Il codice mostra come:
- inilizializzare un oggetto Map con un id DIV
- aggiungere un layer OpenStreetMap
- visualizzare le tiles con l' istruzione zoomToMaxExtent.
Un esempio più completo
Nel codice di seguito riportato viene definita la posizione iniziale della mappa ed il suo livello di zoom , parametri che possono essere cambiati modificando il codice corrispondente:.
// Posizione iniziale della mappa
var lat=44.355;
var lon=11.71;
var zoom=13;
Sono anche aggiunti alcuni controlli visualizzabili sulla mappa ( ScaleLine mappa, posizione del mouse in coordinate geografiche, permalink etc.).
Vediamo come le coordinate geografiche (latitudine, longitudine), ed espresse in gradi, devono essere trasformate nella proiezione chiamata "sferica Mercatore" , usata sia da OSM che da Google, Bing Maps, Yahoo:
var lonLat = new OpenLayers.LonLat( lon ,lat )
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
);
Viene inoltre dichiarata la dimensione della finestra che inquadra la mappa;
<div style="width:100%; height:95%" id="map"></div>
Il file html
Copiare il testo seguente in un nuovo file, salvarlo come html con un nome a piacere (prova.html ad esempio) ed aprirlo con un browser.
Il risultato è visualizzabile qua
<html>
<head>
<title>layer OSM </title>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
// Posizione iniziale della mappa
var lat=44.355;
var lon=11.71;
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>
</head>
<body onload="init();">
<span style="font-family: Arial; font-weight: bold;">Esempio di mappa OSM</span>
<div style="width:100%; height:95%" id="map"></div>
</body>
</html>
Layers OSM : Mapnik, Osmarender, Cyclemap
Il codice che segue mostra come alternare i tre layers principali di OSM (Mapnik, Osmarender, Cyclemap) con un menu di scelta.
Rispetto all' esempio precedente, viene caricato anche il file "OpenStreetMap.js" dal sito OSM:
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
Il codice:
var mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
var cyclemap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
definisce i tre layers,
map.addLayers([ mapnik, tilesathome, cyclemap ] );
li aggiunge alla mappa e
map.addControl(new OpenLayers.Control.LayerSwitcher());
aggiunge alla mappa il menu di scelta tra i tre layers disponibili.
Il file html
Copiare il testo seguente in un nuovo file, salvarlo come html con un nome a piacere (osm_multilayer.html ad esempio) ed aprirlo con un browser.
Il risultato è visualizzabile qua
<html>
<head>
<title>layer OSM </title>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script type="text/javascript">
// Posizione iniziale della mappa
var lat=44.355;
var lon=11.71;
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()
],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
var mapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
var cyclemap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayers([ mapnik, tilesathome, cyclemap ] );
map.addControl(new OpenLayers.Control.LayerSwitcher());
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>
</head>
<body onload="init();">
<span style="font-family: Arial; font-weight: bold;">OSM Mapnik, CycleMap</span>
<div style="width:100%; height:95%" id="map"></div>
</body>
</html>
OpenLayers.js da locale
Il codice degli esempi sopra riportati otteneva il file OpenLayers.js dal sito OpenLayers.
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
E' anche possibile scaricare il file OpenLayers.js dal sito OpenLayers :
http://www.openlayers.org/api/OpenLayers.js
e salvarlo nel proprio sito, aggiornando di conseguenza l' url dello script nella pagina HTML:
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
diventa quindi:
<script src="OpenLayers.js"></script>
se il file viene salvato nella stessa directory del file HTML.
Sarà inoltre necessario scaricare da OpenLayers il file archivio di OpenLayers, scompattarlo e copiare in locale le directory "img" e "theme" contenenti quanto necessario per visualizzare sulla mappa pulsanti, cursori etc.
Usare Proj4js per altre trasformazioni di coordinate
L' esempio precedente mostrava come usare le coordinate in WGS84 (latitudine e longitudine) per navigare nella proiezione usata da OSM (Sferica Mercatore).
Se le coordinate dei dati sono in una proiezione differente, sarà necessario usare Proj4js per eseguire la riproiezione:
aggiungere il file script proj4js.js da http://svn.osgeo.org/metacrs/proj4js/trunk/lib/proj4js-combined.js alla pagina (dopo le librerie OpenLayers!);
aggiungere la definizione di proiezione, ottenibile dal Proj4 project (è un record del file http://svn.osgeo.org/metacrs/proj/trunk/proj/nad/epsg);
Vedere http://svn.osgeo.org/metacrs/proj4js/trunk/lib/defs per degli esempi.
Esempio per EPSG:28992 (new RD) (Sistema Amersfoort / RijksDriehoekstelsel utilizzato in Olanda):
Proj4js.defs["EPSG:28992"] = "+title=Amersfoort / RD New +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs".
Ora si possono usare le coordinate EPSG:28992 ed il codice epsg nelle trasformazioni al posto di WGS84
come nell'esempio:
map.setCenter(
new OpenLayers.LonLat(155000,465000) // Center of the map
.transform(
new OpenLayers.Projection("EPSG:28992"), // transform from new RD
new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
),
15); // Zoom level
Develop this example?
Feel free to edit this page with improvements.
This example was originally created by Harry Wood (and anyone else who edits this page). It is intentionally more basic, with only one layer defined, and no support for URL params (permalink) etc. So adding these features is not necessarily an improvement. In fact, if you have ideas for making this even more simple, that would be good.
Vedi anche
- IT:OpenLayers
- IT:OpenLayers Marker Example - Aggiungere un semplice marker
- IT:Openlayers POI layer example - Aggiungere alcuni POI marker in overlay alla mappa.
- IT:Openlayers Track example - Visualizzare un file traccia .gpx in overlay sulla mappa
- IT:OpenLayers osm file example - Visualizzare un file .osm in overlay
- IT:OpenLayers Google Bing layers - Aggiungere Google Maps, Bing Maps e Yahoo Maps alla mappa.
- IT:OpenLayers Hillshade e Hiking Map - Aggiungere i layers hillshade e Lonvia alla mappa.
- IT:OpenLayers Foto - Visualizzare le proprie foto sulla mappa.
- IT:OpenLayers Local Tiles e Maperitive - Visualizzare sulla mappa le tiles generate con Maperitive.
- IT:OpenLayers Local Tiles Example - Visualizza le tiles di OpenStreetMap in locale
- Full documentation of classes used is at the OpenLayers site or in the more up to date developer docu
- For further help and inspiration on using OpenLayers, you may wish to see the OpenLayers Examples.
- Another example of embedding a slippy OSM map with a GPX track on your website, based on the text above.
- Embed an OSM map with your track in webpage in the way similar to Google Maps (just provide a GPX or KML file).