Table of Contents

OpenStreetMap con OpenLayers

Le mappe di OpenStreetMap (ma anche quelle di Google Maps e di Virtual Earth) utilizzano una proiezione 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 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: 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/.