API di Google Maps – Ottenere i punti più vicini al codice postale

Prima di tutto, grazie per aver dedicato del tempo a considerare la mia domanda e il vostro aiuto.

Sono in procinto di aggiungere una mappa a un sito Web utilizzando Google Maps API v3 e javascript.

Ho una lista di indirizzi e li ho tracciati con successo sulla mappa. Quando l’utente digita un codice di avviamento postale, la mappa si ricollega sulla loro posizione mostrando i marcatori più vicini a quel punto. Ora, ho bisogno di creare una vista elenco delle 3 o 5 posizioni più vicine al loro codice postale con link per la direzione di guida. Sono bloccato … e aperto a suggerimenti.

Grazie!

La solita soluzione consiste nell’utilizzare il metodo google.maps.geometry.spherical computeDistanceBetween (da: LatLng, a: LatLng, radius?: Number) per ridurre il numero a circa 10, quindi utilizzare la matrice di distanza per restituire la distanza di guida a quelli posizioni in modo che i risultati possano essere ordinati in base alla distanza di guida (distanza di viaggio effettiva) e ridotti a 3 o 5 posizioni più vicine in base alla distanza di viaggio effettiva entro i limiti della richiesta.

esempio (trova i 3 posti più vicini da una lista) (dati presi in prestito dall’esempio di “pizza store” di FusionTables)

function codeAddress() { var address = document.getElementById('address').value; geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); if (customerMarker) customerMarker.setMap(null); customerMarker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); closest = findClosestN(results[0].geometry.location,10); // get driving distance closest = closest.splice(0,3); calculateDistances(results[0].geometry.location, closest,3); } else { alert('Geocode was not successful for the following reason: ' + status); } }); } function findClosestN(pt,numberOfResults) { var closest = []; document.getElementById('info').innerHTML += "processing "+gmarkers.length+"
"; for (var i=0; i"; gmarkers[i].setMap(null); closest.push(gmarkers[i]); } closest.sort(sortByDist); return closest; } function sortByDist(a,b) { return (a.distance- b.distance) } function calculateDistances(pt,closest,numberOfResults) { var service = new google.maps.DistanceMatrixService(); var request = { origins: [pt], destinations: [], travelMode: google.maps.TravelMode.DRIVING, unitSystem: google.maps.UnitSystem.METRIC, avoidHighways: false, avoidTolls: false }; for (var i=0; i"+closest[i].title + '
' + closest[i].address+"
" + results[i].distance.text + ' appoximately ' + results[i].duration.text + '

'; } } }); }

esempio sopra con il link “Ottieni indicazioni stradali” in InfoWindow

Quando hai la coppia lat lng di un codice postale puoi usare la formula di harversine per trovare la distanza dalla tua posizione.