====== OpenStreetMap con OpenLayers ====== Le mappe di **[[http://www.openstreetmap.org|OpenStreetMap]]** (ma anche quelle di **[[http://maps.google.com/|Google Maps]]** e di **[[http://www.microsoft.com/VIRTUALEARTH/|Virtual Earth]]**) utilizzano una proiezione **[[http://crschmidt.net/~crschmidt/spherical_mercator.html|Spherical Mercator]]**. Tale proiezione ha codice **EPSG:900913**, che purtroppo non è compresa tra le proiezioni di PROJ. Su un host GNU/Linux è necessario aggiungere una riga al file **''/usr/share/proj/epsg''**: # Spherical Mercator <900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs Vedere la FAQ a proposito di **[[http://proj.maptools.org/faq.html#sphere_as_wgs84|PROJ.4 e Virtual Earth]]**. ===== Il codice JavaScript ===== OpenLayers supporta attualmente le mappe OpenStreetMap tramite l'oggetto **''OpenLayers.Layer.OSM()''** sebbene nella documentazione ufficiale (versione 2.10) questo non sia ancora documentato. Esiste la possibilità di caricare una piccola libreria JavaScript che estende l'oggetto **''OpenLayers.Layer.OSM()''** e permette di avere le sotto-classi **''Mapnik''**, **''Osmarender''** e **''CycleMap''**. Il codice JavaScript è disponibile al seguente indirizzo: [[http://www.openstreetmap.org/openlayers/OpenStreetMap.js]]. Alcuni esempi basici si trovano qui: **[[http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example|OpenLayers Simple Example]]**. Ecco ad esempio un estratto di codice JavaScript: // Define the map object. map = new OpenLayers.Map('map', { maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34), controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.KeyboardDefaults(), new OpenLayers.Control.Scale() ], scales: [500000, 200000, 100000, 50000, 25000, 10000, 5000], units: 'm', projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326") }); // Add OpenStreetMap Mapnik layer. var layerMapnik = new OpenLayers.Layer.OSM("OpenStreetMap"); layerMapnik.transitionEffect = "resize"; layerMapnik.isBaseLayer = true; map.addLayer(layerMapnik); ===== Mostrare un mark sulla mappa OSM ===== Fare zoom e pan quanto basta per mettere il punto desiderato al centro della mappa, quindi cliccare su **Permalink** in basso a destra. A questo punto basta modificare l'URL, sostituendo ''lat'' e ''lon'' rispettivamente con **''mlat''** e **''mlon''**. Un esempio: [[http://www.openstreetmap.org/?mlat=43.8200&mlon=11.13311&zoom=16&layers=0B00FTF]] Questo trucco funziona sul sito di OpenStreetMap, purtroppo non funziona su altri simili che usano sempre OpenLayers, ad esempio http://www.informationfreeway.org/.