Google Maps Api v3: trova i marker più vicini

Quando clicco sulla mappa, quale sarà il modo migliore per trovare marker o marker più vicini? ci sono alcune funzioni in api che mi aiuteranno a farlo?

è google map api v3.

Per prima cosa devi aggiungere l’eventlistener

google.maps.event.addListener(map, 'click', find_closest_marker); 

Quindi crea una funzione che scorre attraverso la matrice di marcatori e usa la formula di haversine per calcolare la distanza di ogni indicatore dal clic.

 function rad(x) {return x*Math.PI/180;} function find_closest_marker( event ) { var lat = event.latLng.lat(); var lng = event.latLng.lng(); var R = 6371; // radius of earth in km var distances = []; var closest = -1; for( i=0;i 

Questo tiene traccia dei marker più vicini e ne avverte il titolo.

Ho i miei marcatori come array sul mio object mappa

Puoi utilizzare il metodo computeDistanceBetween () nello spazio dei nomi google.maps.geometry.spherical .

Mi piacerebbe ampliare il suggerimento di Leor per chiunque sia confuso su come calcolare la posizione più vicina e fornire effettivamente una soluzione di lavoro:

Sto usando i marcatori in un array di markers ad esempio var markers = []; .

Quindi diamo la nostra posizione come qualcosa come var location = new google.maps.LatLng(51.99, -0.74);

Quindi riduciamo semplicemente i nostri marcatori rispetto alla posizione che abbiamo così:

 markers.reduce(function (prev, curr) { var cpos = google.maps.geometry.spherical.computeDistanceBetween(location.position, curr.position); var ppos = google.maps.geometry.spherical.computeDistanceBetween(location.position, prev.position); return cpos < ppos ? curr : prev; }).position 

Ciò che viene fuori è l'object LatLng più vicino LatLng .

La formula sopra non ha funzionato per me, ma l’ho usata senza alcun problema. Passa la posizione corrente alla funzione e passa attraverso una serie di indicatori per trovare il più vicino:

 function find_closest_marker( lat1, lon1 ) { var pi = Math.PI; var R = 6371; //equatorial radius var distances = []; var closest = -1; for( i=0;i 

Sei a conoscenza delle estensioni di MySql Spatial ?

Potresti usare qualcosa come MBRContains (g1, g2) .

Ecco un’altra funzione che funziona perfettamente per me, restituisce la distanza in chilometri:

  function distance(lat1, lng1, lat2, lng2) { var radlat1 = Math.PI * lat1 / 180; var radlat2 = Math.PI * lat2 / 180; var radlon1 = Math.PI * lng1 / 180; var radlon2 = Math.PI * lng2 / 180; var theta = lng1 - lng2; var radtheta = Math.PI * theta / 180; var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta); dist = Math.acos(dist); dist = dist * 180 / Math.PI; dist = dist * 60 * 1.1515; //Get in in kilometers dist = dist * 1.609344; return dist; }