Misuriamo con Google Map
In questo post presenterò un esempio di come è possibile creare un tool per misurare le distanze in Google Map disegnando sulla mappa una linea. Ecco l’esempio: link
Per le nozioni di base sulla creazione di una mappa, generazione della chiave e inizializzazione rimando alla documentazione ufficiale di Google.
L’oggetto utilizzato è l’oggetto GPolyline che attraverso il metodo getLength restituisce la lunghezza in metri lungo la superficie terrestre.
Iniziamo con il definire una classe che si occupa di inizializzare l’oggetto mappa, con uno zoom sull’Italia. In questa classe inoltre definiamo le tre variabili che conterranno rispettivamente l’elenco dei vertici della linea, l’elenco dei bookmark e l’oggetto GPolyline.
function MyApplication() { this.map = new GMap2(document.getElementById("map")); this.map.setCenter(new GLatLng(41.86956082699455, 12.32666015625), 6); var mapControl = new GMapTypeControl(); this.map.addControl(mapControl); this.map.addControl(new GLargeMapControl()); this.markers = new Array; this.vertes = new Array; this.linea = null; this.Out = document.getElementById("out") GEvent.bind(this.map, "click", this, this.onMapClick); }
La classe MyApplication ha inoltre una variabile Out che corrisponde all’elemento div in cui viene stampato il valore della misura.
Definiamo ora tre metodi per la classe:
Il primo metodo, legato all’evento click sulla mappa, è onMapClick: si occupa di aggiungere un nuovo vertice e un nuovo bookmark trascinabile.
MyApplication.prototype.onMapClick = function(marker,point) { //aggiungo il marker var marker = new GMarker(point , {draggable: true}); this.map.addOverlay(marker); this.markers.push(marker); this.vertes.push(point); var index = this.vertes.length - 1 GEvent.addListener(marker, "dragend", function() { Drag(index) }) this.refreshLine(); }
All’evento dragend del bookmark è associata la funzione Drag che serve ad aggiornare il vertice associato al bookmark con le nuove coordinate:
function Drag(index) { application.refreshPoint(index); }
Il secondo metodo della classe è refreshLine:crea la linea formata dai vertici corrispondenti ai bookmark inseriti con un click e aggiorna l’output
MyApplication.prototype.refreshLine = function() { if (this.vertes.length > 1) { if (this.linea != null) { this.map.removeOverlay(this.linea); } p = new GPolyline(this.vertes) this.linea = p; this.map.addOverlay(p); this.Out.innerHTML =p.getLength() } }
Infine il metodo RefreshPoint aggiorna un vertice della lista in base alla posizione del bookmark corrispondente:
MyApplication.prototype.refreshPoint = function(index)
{
var marker = this.markers[index]
this.vertes[index] = marker.getLatLng();
this.refreshLine();
}Il codice completo HTML + Javascript è link
Tags: Google Map, Javascript, Misura