50 lines
2.9 KiB
JavaScript
50 lines
2.9 KiB
JavaScript
|
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||
|
//::: :::
|
||
|
//::: This routine calculates the distance between two points (given the :::
|
||
|
//::: latitude/longitude of those points). It is being used to calculate :::
|
||
|
//::: the distance between two locations using GeoDataSource (TM) prodducts :::
|
||
|
//::: :::
|
||
|
//::: Definitions: :::
|
||
|
//::: South latitudes are negative, east longitudes are positive :::
|
||
|
//::: :::
|
||
|
//::: Passed to function: :::
|
||
|
//::: lat1, lon1 = Latitude and Longitude of point 1 (in decimal degrees) :::
|
||
|
//::: lat2, lon2 = Latitude and Longitude of point 2 (in decimal degrees) :::
|
||
|
//::: unit = the unit you desire for results :::
|
||
|
//::: where: 'M' is statute miles (default) :::
|
||
|
//::: 'K' is kilometers :::
|
||
|
//::: 'N' is nautical miles :::
|
||
|
//::: :::
|
||
|
//::: Worldwide cities and other features databases with latitude longitude :::
|
||
|
//::: are available at https://www.geodatasource.com :::
|
||
|
//::: :::
|
||
|
//::: For enquiries, please contact sales@geodatasource.com :::
|
||
|
//::: :::
|
||
|
//::: Official Web site: https://www.geodatasource.com :::
|
||
|
//::: :::
|
||
|
//::: GeoDataSource.com (C) All Rights Reserved 2017 :::
|
||
|
//::: :::
|
||
|
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||
|
|
||
|
function getDistance(lat1, lon1, lat2, lon2, unit) {
|
||
|
var radlat1 = Math.PI * lat1/180
|
||
|
var radlat2 = Math.PI * lat2/180
|
||
|
var theta = lon1-lon2
|
||
|
var radtheta = Math.PI * theta/180
|
||
|
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
|
||
|
if (dist > 1) {
|
||
|
dist = 1;
|
||
|
}
|
||
|
dist = Math.acos(dist)
|
||
|
dist = dist * 180/Math.PI
|
||
|
dist = dist * 60 * 1.1515
|
||
|
if (unit=="K") { dist = dist * 1.609344 }
|
||
|
if (unit=="N") { dist = dist * 0.8684 }
|
||
|
return dist
|
||
|
}
|
||
|
|
||
|
// https://stackoverflow.com/questions/10756313/javascript-jquery-map-a-range-of-numbers-to-another-range-of-numbers
|
||
|
function scale(num, in_min, in_max, out_min, out_max) {
|
||
|
return (num - in_min ) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||
|
}
|