这里是一个使用HTML5定位获取用户位置的基本代码示例。然后调用NearestCity()
并计算位置到每个城市的距离(km)。我选择使用更简单的勾股定理和等距投影来调整经度线的曲率,而不是使用Haversine公式。
window.onload = function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(UserLocation);
}
else
NearestCity(38.8951, -77.0367);
}
function UserLocation(position) {
NearestCity(position.coords.latitude, position.coords.longitude);
}
function Deg2Rad(deg) {
return deg * Math.PI / 180;
}
function PythagorasEquirectangular(lat1, lon1, lat2, lon2) {
lat1 = Deg2Rad(lat1);
lat2 = Deg2Rad(lat2);
lon1 = Deg2Rad(lon1);
lon2 = Deg2Rad(lon2);
var R = 6371;
var x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2);
var y = (lat2 - lat1);
var d = Math.sqrt(x * x + y * y) * R;
return d;
}
var lat = 20;
var lon = 40;
var cities = [
["city1", 10, 50, "blah"],
["city2", 40, 60, "blah"],
["city3", 25, 10, "blah"],
["city4", 5, 80, "blah"]
];
function NearestCity(latitude, longitude) {
var minDif = 99999;
var closest;
for (index = 0; index < cities.length; ++index) {
var dif = PythagorasEquirectangular(latitude, longitude, cities[index][1], cities[index][2]);
if (dif < minDif) {
closest = index;
minDif = dif;
}
}
alert(cities[closest]);
}