Find Google Maps closest marker
Finds closest marker to user clicked spot.
by Rene Korss
HTML
<script src="https://maps.googleapis.com/maps/api/js?key=&v=3.0&sensor=true&language=ee&libraries=geometry"></script>
<div id="map-canvas"></div>
CSS
#map-canvas {
width: 500px;
height: 500px;
}
JavaScript
var map;
var markers = [];
var marker, i;
var infowindow = new google.maps.InfoWindow({
content: ''
});
var locations = [
['A', 3.180967, 101.715546, 1],
['B', 3.200848, 101.616669, 2],
['C', 3.147372, 101.597443, 3],
['D', 3.19125, 101.710052, 4]
];
function initialize() {
var haightAshbury = new google.maps.LatLng(3.171368, 101.653404);
var mapOptions = {
zoom: 12,
center: haightAshbury,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
google.maps.event.addListener(map, 'click', function (event) {
// Dont add this marker if you don't want users markers. Closest function will still work.
addMarker(event.latLng);
});
google.maps.event.addListener(map, 'click', find_closest_marker);
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
title: locations[i][0],
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
markers.push(marker);
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
}
}
function addMarker(location) {
var marker = new google.maps.Marker({
title: 'User added marker',
// Just to differ from default markers
icon: {
path: google.maps.SymbolPath.BACKWARD_CLOSED_ARROW,
scale: 5
},
position: location,
map: map
});
// You can not add it to markers array. Otherwise added marker will be always the closest to itself
//markers.push(marker);
}
function find_closest_marker(event) {
var distances = [];
var closest = -1;
for (i = 0; i < markers.length; i++) {
var d =...