Show Google Map Location nearest to you
by Ben Clayton
HTML
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<div id="map">postcode entry</div>
JavaScript
/*jslint browser: true */
/*global google */
function toRad(value) {
"use strict";
/** Converts numeric degrees to radians */
return value * (Math.PI / 180);
}
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2, unit) {
"use strict";
var a, c, d, R, dLat, dLon;
R = (unit === 'mi') ? 3958.75587 : (unit === 'ft') ? 20902230.9711286 : 6371; // Mean radius of the earth in km
dLat = toRad(lat2 - lat1); // toRad below
dLon = toRad(lon2 - lon1);
a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
d = R * c; // Distance in km
return d;
}
function calcDistance(checkCoords, lat, lng) {
"use strict";
var closestLatLng, distance = 700000, i, latlng;
for (i = 0; i < checkCoords.length; i = i + 1) {
latlng = checkCoords[i].split(",");
if (getDistanceFromLatLonInKm(latlng[0], latlng[1], lat, lng) < distance) {
distance = getDistanceFromLatLonInKm(latlng[0], latlng[1], lat, lng);
closestLatLng = [latlng[0], latlng[1]];
}
}
return closestLatLng;
}
function addMarker(lat, lng, title, map) {
"use strict";
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
title: title
});
marker.setMap(map);
return (lat + ',' + lng);
}
function show_map(lat, lng) {
"use strict";
var checkCoords = [], closestLatLng, latlng, map, myOptions;
latlng = new google.maps.LatLng(lat, lng);
myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_container"), myOptions);
checkCoords[0] = addMarker(51.477118, -0.000732, 'Royal Observatory, Greenwich, London', map);
checkCoords[1] = addMarker(49, 1, 'Near Royal Observator', map);
checkCoords[2] =...