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