Converting Strings Into Decimal Degree Format

Below is a small utility routine and the corresponding documentation that will help convert a user-supplied string in degree, minute, second format (e.g. N 49° 12' 12.3") and will return a double in the decimal degree format MapPoint expects.

Microsoft MapPoint can accept geographical coordinates on input (e.g.
in the "Find" dialog: select Edit/Find and switch to the "Lat/Lon"
tab) as well as display them in the location sensor window
(Tools/Location sensor).

While the "Find" dialog is smart and can handle values entered as
degrees, minutes and seconds (simply separate them with a blank) or as
decimal degrees, the GetLocation function available to the programmer
requires doubles in decimal format.

Sometimes, coordinates are available in degree, minute, second format
though, or users would like to enter values in this more familiar
format (e.g. because that is the format their GPS is set to).

This article presents a handy VB subroutine for the MapPoint
programmer that accepts a string in DMS (degree, minute, second)
format and will convert it to decimal format. The routine is called
DMSVal (in analogy to the Visual Basic "Val" conversion function).

The signature of the function is as follows:

Function DmsVal(ByVal strDms As String, bValid as Boolean) As Double

DMSVal tries to be tolerant about the format of the strDMS string it
accepts on input. There may be leading and trailing blanks, an
optional compass point (N, E, S, W), and values for degrees, minutes
and seconds separated by arbitrary delimiters except comma and period.

The decimal separator may be both the decimal point (.) common in
North America as well as the comma (,) used in Europe (no thousands
separator allowed nor needed though)

If compass points South (S or s) or West (W or w) are encountered, the
return value is negative according to the convention used in MapPoint.

The following are examples of valid DMS strings:

N 49° 1' 5.1"
49/1/5.1
E49d1m5.1s
E49 1 5.1

DMSVal will set the "bValid" parameter to "False" if it could not
convert the input string. A successful conversion is indicate by
a bValid value of "True".

If you already have the values available in separate fields, the
following function can be used:

Function DmsValCalc(strCompassPoint As String, dblDeg As Double, _
dblMin as Double, dblSec as Double) As Double

DMSValCalc can be called directly with a compass point (N, E, S, W), and
the degree, minutes and seconds values. It is used internally by DMSVal.