IT:OpenLayers Foto
Visualizzare le proprie foto sulla mappa
Questo esempio mostra come visualizzare sulla mappa le proprie foto in un modo simile a Panoramio, con la differenza che le foto risiedono sul nostro sito o in locale sul nostro computer.
L' esempio impiega Geosetter per costruire il file .kml contenente le coordinate dei markers da visualizzare sulla mappa nelle posizioni delle foto. Altro esempio: comune di Storo
Il file HTML
Il codice del file HTML è simile agli esempi precedenti, con il layer dove verranno visualizzate i markers delle foto definito da;
var foto = new OpenLayers.Layer.GML("KML", "foto.klm",
{
format: OpenLayers.Format.KML, projection: map.displayProjection,
formatOptions: {
extractStyles: true,
extractAttributes: true,
maxDepth: 2
}
});
Sono inoltre presenti le funzioni che consentono di visualizzare le foto cliccando sull' icona .
Copiare il codice in un file di testo e salvare come HTML con il nome, ad esempio, di foto.html.
Esempi: OpenStreetLedro e Foto Valle del Santerno
<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.186;
var lon=11.554;
var zoom=14;
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");
// Layer KLM per le foto
var foto = new OpenLayers.Layer.GML("KML", "foto.kml",
{
format: OpenLayers.Format.KML, projection: map.displayProjection,
formatOptions: {
extractStyles: true,
extractAttributes: true,
maxDepth: 2
}
});
map.addLayers([ mapnik,cyclemap, foto ] );
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
);
// Seleziona le foto
select = new OpenLayers.Control.SelectFeature(foto);
foto.events.on({
"featureselected": onFeatureSelect,
"featureunselected": onFeatureUnselect });
map.addControl(select);
select.activate();
function onPopupClose(evt) {
select.unselectAll();
}
function onFeatureSelect(event) {
var feature = event.feature;
var selectedFeature = feature;
var popup = new OpenLayers.Popup.FramedCloud("chicken",
feature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(100,100),
"<h2>"+feature.attributes.name + "</h2>" + feature.attributes.description,
null, true, onPopupClose
);
feature.popup = popup;
map.addPopup(popup);
}
function onFeatureUnselect(event) {
var feature = event.feature;
if(feature.popup) {
map.removePopup(feature.popup);
feature.popup.destroy();
delete feature.popup;
}
}
map.setCenter (lonLat, zoom);
}
</script>
</head>
<body onload="init();">
<span style="font-family: Arial; font-weight: bold;">OSM Mapnik, Osmarender, CycleMap e layer foto</span>
<div style="width:100%; height:95%" id="map"></div>
</body>
</html>
Il file KML
E' un file kml compilato da GeoSetter come più avanti spiegato, dove sono specificate le coordinate delle icone che contrassegnano le foto sulla mappa ed il nome e l' url del file icona, oltre che la sua scala.
L' esempio utilizza inoltre immagini a dimensioni ridotte da visualizzare sulla mappa (small1, small2,small3) ed il link alla foto a piena definizione (full1, full2, full3).
Le prime sono contenute nella directory "images" e le seconde nella directory "foto".
Per testare l' esempio si possono creare le due directory nella cartella dove é collocato il file foto.html e inserirvi foto a piacere, rinominate come sopra.
Per l' icona si può utilizzare un qualisiasi file grafico salvato come "icona.png".
Copiare il testo seguente in un file e salvarlo come "foto.kml"
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.1"> <Document> <Style id="GeoSetterStyle"> <IconStyle> <scale>0.5</scale> <Icon><href>icona.png</href></Icon> </IconStyle> </Style> <Folder><name>Immagini</name> <Placemark> <styleUrl>#GeoSetterStyle</styleUrl> <name>Foto 1</name> <Snippet></Snippet> <description> <![CDATA[<img src="images/small1.jpg" width="480" height="360"> <br><a href="foto/full1.jpg" target="_blank">Link To Original</a> ]]> </description> <Point><coordinates>11.56055556,44.19000000,466.50000000</coordinates></Point> </Placemark> <Placemark> <styleUrl>#GeoSetterStyle</styleUrl> <name>Foto 2</name> <Snippet></Snippet> <description> <![CDATA[<img src="small2.jpg" width="480" height="360"> <br><a href="foto/full2.jpg" target="_blank">Link To Original</a> ]]> </description> <Point><coordinates>11.55305556,44.18583333,541.00000000</coordinates></Point> </Placemark> <Placemark> <styleUrl>#GeoSetterStyle</styleUrl> <name>Foto 3</name> <Snippet></Snippet> <description> <![CDATA[<img src="images/small3.jpg" width="480" height="360"> <br><a href="foto/full3.jpg" target="_blank">Link To Original</a> ]]> </description> <Point><coordinates>11.54833333,44.18250000,578.50000000</coordinates></Point> </Placemark> </Folder> </Document> </kml>
GeoSetter
GeoSetter è uno dei programmi con il quale si può preparare in modo automatico il file "foto.kml" oltre che georeferenziare le foto se non lo sono.
E' un freeware pe Windows e consente di generare un file .kmz per visualizzare le foto su Google Earth con l' apposita opzione.
Il file .kmz, decompresso con un qualunque zip, contiene una cartella "images" ed un file denominato "temp.kml" che rinomineremo "foto.kml".
Aprendo il file con un editore di testo, sarà possibile rinominare l'icona richiamata da "geosetter.png" a icona.png come nell' esempio, in alternativa basta rinominare la nostra icona "geosetter.png".
Per avere, come nell' esempio, il link alla foto a piena definizione, basterà selezionare l' opzione "Link To Originals" presente nella finestra di dialogo ed assegnare come web address il nome "foto".
E" anche possibile visualizzare una immagine ridotta della foto sulla mappa al posto dell"icona, selezionando come Marker Setting l' opzione "Mini Image", in questo caso GeoSetter collocherà le icone in una directori chiamata appunto "icons".
Vedi anche
- IT:OpenLayers
- IT:OpenLayers Simple Example - Semplici esempi di layers OSM
- 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.