Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- google.maps.event.addListener(map, 'click', find_closest_marker);
- 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<map.markers.length; i++ ) {
- var mlat = map.markers[i].position.lat();
- var mlng = map.markers[i].position.lng();
- var dLat = rad(mlat - lat);
- var dLong = rad(mlng - lng);
- var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
- Math.cos(rad(lat)) * Math.cos(rad(lat)) * Math.sin(dLong/2) * Math.sin(dLong/2);
- var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
- var d = R * c;
- distances[i] = d;
- if ( closest == -1 || d < distances[closest] ) {
- closest = i;
- }
- }
- alert(map.markers[closest].title);
- }
- 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
- function find_closest_marker( lat1, lon1 ) {
- var pi = Math.PI;
- var R = 6371; //equatorial radius
- var distances = [];
- var closest = -1;
- for( i=0;i<markers.length; i++ ) {
- var lat2 = markers[i].position.lat();
- var lon2 = markers[i].position.lng();
- var chLat = lat2-lat1;
- var chLon = lon2-lon1;
- var dLat = chLat*(pi/180);
- var dLon = chLon*(pi/180);
- var rLat1 = lat1*(pi/180);
- var rLat2 = lat2*(pi/180);
- var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
- Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2);
- var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
- var d = R * c;
- distances[i] = d;
- if ( closest == -1 || d < distances[closest] ) {
- closest = i;
- }
- }
- // (debug) The closest marker is:
- console.log(markers[closest]);
- }
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement