Converting latitude and longitude to decimal values Converting latitude and longitude to decimal values javascript javascript

Converting latitude and longitude to decimal values


To parse your input use the following.

function ParseDMS(input) {    var parts = input.split(/[^\d\w]+/);    var lat = ConvertDMSToDD(parts[0], parts[1], parts[2], parts[3]);    var lng = ConvertDMSToDD(parts[4], parts[5], parts[6], parts[7]);}

The following will convert your DMS to DD

function ConvertDMSToDD(degrees, minutes, seconds, direction) {    var dd = degrees + minutes/60 + seconds/(60*60);    if (direction == "S" || direction == "W") {        dd = dd * -1;    } // Don't do anything for N or E    return dd;}

So your input would produce the following:

36°57'9" N  = 36.9525000110°4'21" W = -110.0725000

Decimal coordinates can be fed into google maps to get points via GLatLng(lat, lng) (Google Maps API)


Corrected the above functions and made the output an object.

function ParseDMS(input) {    var parts = input.split(/[^\d\w\.]+/);        var lat = ConvertDMSToDD(parts[0], parts[2], parts[3], parts[4]);    var lng = ConvertDMSToDD(parts[5], parts[7], parts[8], parts[9]);    return {        Latitude : lat,        Longitude: lng,        Position : lat + ',' + lng    }}function ConvertDMSToDD(degrees, minutes, seconds, direction) {       var dd = Number(degrees) + Number(minutes)/60 + Number(seconds)/(60*60);    if (direction == "S" || direction == "W") {        dd = dd * -1;    } // Don't do anything for N or E    return dd;}


My tweaked version coerces the string parts into Numbers so that they can actually be added together rather than concatenated. It also handles decimal values which are common for the Seconds component:

function ParseDMS(input) {    var parts = input.split(/[^\d\w\.]+/);    var lat = ConvertDMSToDD(parts[0], parts[1], parts[2], parts[3]);    var lng = ConvertDMSToDD(parts[4], parts[5], parts[6], parts[7]);}

The following will convert your DMS to DD

function ConvertDMSToDD(degrees, minutes, seconds, direction) {    var dd = Number(degrees) + Number(minutes)/60 + Number(seconds)/(60*60);    if (direction == "S" || direction == "W") {        dd = dd * -1;    } // Don't do anything for N or E    return dd;}