
How to Convert Degrees Minutes Seconds to Decimal Degrees
First of all let’s take a look at the symbols:
° : degree
‘ : minute
“ : second
1 minute is equal to 60 seconds.
1 degree is equal to 1 hour, that is equal to 60 minutes or 3600 seconds.
To calculate decimal degrees, we use the DMS to decimal degree formula below:
Decimal Degrees = degrees + (minutes/60) + (seconds/3600)
DD = d + (min/60) + (sec/3600)
Latitude: 52.377956 DMS Lat: 52° 22' 40.6416'' N 52.0 22/60 ~= .3667 40/3600 ~= 0.01 Longitude: 4.897070 DMS Long: 4° 53' 49.4520'' E
(()=> {
	const deg2rad = degrees => degrees * (Math.PI / 180);	
	const rad2deg = radians => radians * (180 / Math.PI);
	const nm2km = nm => nm * 1.852;
	
	const distance = (a, b) => {
		if (a[0] == b[0] && a[1] == b[1])
			return 0;
		
		const radlat1 = deg2rad(a[0]);
		const radlat2 = deg2rad(b[0]);
		const radtheta = deg2rad(a[1] - b[1]); // diff East and West
		let dist = 
			Math.sin(radlat1) * Math.sin(radlat2) +  // diff North - South
			Math.cos(radlat1) * Math.cos(radlat2) // diff North - South
			* Math.cos(radtheta); // diff East and West
		if (dist > 1) // overflow
			dist = 1;
		return rad2deg(Math.acos(dist)) * 60; // NM (nautical miles)
	};
	console.log(distance([30, 30], [60, 60])); // 2165.866861755054
	console.log(nm2km(distance([30, 30], [60, 60]))); // 4011.18542797036
})();Reference: https://www.geodatasource.com/developers/javascript
const deg2rad = degrees => degrees * (Math.PI / 180);	
const rad2deg = radians => radians * (180 / Math.PI);
interface ICoordinate {
    latitude: number,
    longitude: number
}
const distanceInKm = (a: ICoordinate, b: ICoordinate) => {
	if ((a.latitude == b.latitude) && (a.longitude == b.longitude)) {
		return 0;
	} else {
		const radlat1 = deg2rad(a.latitude);
		const radlat2 = deg2rad(b.latitude);
		const radtheta = deg2rad(a.longitude - b.longitude);
		let dist = 
            Math.sin(radlat1) * Math.sin(radlat2) + 
            Math.cos(radlat1) * Math.cos(radlat2) 
            * Math.cos(radtheta);
		if (dist > 1) {
			dist = 1;
		}
		dist = rad2deg(Math.acos(dist));
        dist = dist * 60 * 1.853159616;
		return dist;
	}
}
//distance the simple (but wrong) way
distanceSimple(a: ICoordinate, b: ICoordinate): number {
        return Math.sqrt((a.latitude - b.latitude) * (a.latitude - b.latitude) +
            (a.longitude - b.longitude) * (a.longitude - b.longitude));
    }
    distanceInKm(a: ICoordinate, b: ICoordinate) {
        if ((a.latitude === b.latitude) && (a.longitude === b.longitude)) {
            return 0;
        } else {
            const radlat1 = deg2rad(a.latitude);
            const radlat2 = deg2rad(b.latitude);
            const radtheta = deg2rad(a.longitude - b.longitude);
            let dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
            if (dist > 1) {
                dist = 1;
            }
            dist = rad2deg(Math.acos(dist));
            dist = dist * 60 * 1.853159616;
            return dist;
        }
    }
https://www.movable-type.co.uk/scripts/latlong.html
const R = 6371e3; // metres
const φ1 = lat1 * Math.PI/180; // φ, λ in radians
const φ2 = lat2 * Math.PI/180;
const Δφ = (lat2-lat1) * Math.PI/180;
const Δλ = (lon2-lon1) * Math.PI/180;
const a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
          Math.cos(φ1) * Math.cos(φ2) *
          Math.sin(Δλ/2) * Math.sin(Δλ/2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
const d = R * c; // in metresFinding direction in degrees between two positions?
TODO!
Initial Bearing
const y = Math.sin(λ2-λ1) * Math.cos(φ2); const x = Math.cos(φ1)*Math.sin(φ2) - Math.sin(φ1)*Math.cos(φ2)*Math.cos(λ2-λ1); const θ = Math.atan2(y, x); const brng = (θ*180/Math.PI + 360) % 360; // in degrees
| JavaScript:(all angles in radians)  | const y = Math.sin(λ2-λ1) * Math.cos(φ2); const x = Math.cos(φ1)*Math.sin(φ2) – Math.sin(φ1)*Math.cos(φ2)*Math.cos(λ2-λ1); const θ = Math.atan2(y, x); const brng = (θ*180/Math.PI + 360) % 360; // in degrees | 
| Excel:(all angles in radians)  | =ATAN2(COS(lat1)*SIN(lat2)-SIN(lat1)*COS(lat2)*COS(lon2-lon1), SIN(lon2-lon1)*COS(lat2)) *note that Excel reverses the arguments to ATAN2 – see notes below  | 
https://www.npmjs.com/package/geodesy
https://developers.google.com/public-data/docs/canonical/countries_csv
http://www.geonames.org/
http://download.geonames.org/export/dump/
168700cookie-checkDistance Lat-Long to Kilometers