Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. google.maps.event.addListener(map, 'click', find_closest_marker);
  2.  
  3. function rad(x) {return x*Math.PI/180;}
  4. function find_closest_marker( event ) {
  5. var lat = event.latLng.lat();
  6. var lng = event.latLng.lng();
  7. var R = 6371; // radius of earth in km
  8. var distances = [];
  9. var closest = -1;
  10. for( i=0;i<map.markers.length; i++ ) {
  11. var mlat = map.markers[i].position.lat();
  12. var mlng = map.markers[i].position.lng();
  13. var dLat = rad(mlat - lat);
  14. var dLong = rad(mlng - lng);
  15. var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  16. Math.cos(rad(lat)) * Math.cos(rad(lat)) * Math.sin(dLong/2) * Math.sin(dLong/2);
  17. var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  18. var d = R * c;
  19. distances[i] = d;
  20. if ( closest == -1 || d < distances[closest] ) {
  21. closest = i;
  22. }
  23. }
  24.  
  25. alert(map.markers[closest].title);
  26. }
  27.  
  28. markers.reduce(function (prev, curr) {
  29.  
  30. var cpos = google.maps.geometry.spherical.computeDistanceBetween(location.position, curr.position);
  31. var ppos = google.maps.geometry.spherical.computeDistanceBetween(location.position, prev.position);
  32.  
  33. return cpos < ppos ? curr : prev;
  34.  
  35. }).position
  36.  
  37. function find_closest_marker( lat1, lon1 ) {
  38. var pi = Math.PI;
  39. var R = 6371; //equatorial radius
  40. var distances = [];
  41. var closest = -1;
  42.  
  43. for( i=0;i<markers.length; i++ ) {
  44. var lat2 = markers[i].position.lat();
  45. var lon2 = markers[i].position.lng();
  46.  
  47. var chLat = lat2-lat1;
  48. var chLon = lon2-lon1;
  49.  
  50. var dLat = chLat*(pi/180);
  51. var dLon = chLon*(pi/180);
  52.  
  53. var rLat1 = lat1*(pi/180);
  54. var rLat2 = lat2*(pi/180);
  55.  
  56. var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  57. Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2);
  58. var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  59. var d = R * c;
  60.  
  61. distances[i] = d;
  62. if ( closest == -1 || d < distances[closest] ) {
  63. closest = i;
  64. }
  65. }
  66.  
  67. // (debug) The closest marker is:
  68. console.log(markers[closest]);
  69. }
  70.  
  71. function distance(lat1, lng1, lat2, lng2) {
  72. var radlat1 = Math.PI * lat1 / 180;
  73. var radlat2 = Math.PI * lat2 / 180;
  74. var radlon1 = Math.PI * lng1 / 180;
  75. var radlon2 = Math.PI * lng2 / 180;
  76. var theta = lng1 - lng2;
  77. var radtheta = Math.PI * theta / 180;
  78. var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
  79. dist = Math.acos(dist);
  80. dist = dist * 180 / Math.PI;
  81. dist = dist * 60 * 1.1515;
  82.  
  83. //Get in in kilometers
  84. dist = dist * 1.609344;
  85.  
  86. return dist;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement