For most of January I have been working with an open source GIS mapping component called SharpMap. It's a cool tool, and very powerful, but being open source it - to some extent, -suffers from a lack of clear examples, particularly for programmers new to this type of programing (geospatial) .

Today I wanted to calculate the distance between to points on the earths surface. This is quite a difficult thing to do mathematically, but luckily for me in 1975 this fellow came up with a good answer. Even better is that this fine fellow wrote it up in a C# Class - so that saved me a few hours today ;-).
Anyway i thought it might be useful to show how I have put this into practice using VB.net. Enjoy!
Go to Mike Gavaghans website and down load his C# code. unzip it and copy the file called "Gavaghan.Geodesy.dll" from the "Dist" folder to your base folder for your solution. Then add a reference to it in your IDE. The following function takes 4 arguments and returns a distance between them in meters.
-
Imports System
-
Imports Gavaghan.Geodesy
-
-
Public Class VincentyGeodeticProblems
-
-
'//Answers is in meters!
-
Shared Function Distance _
-
(ByVal Loc1_X As Double, ByVal Loc1_Y As Double, _
-
byval Loc2_X as Double, byval Loc2_Y as Double) _
-
as Double
-
-
-
' instantiate the calculator
-
Dim geoCalc As New GeodeticCalculator()
-
-
' select a reference elllipsoid
-
Dim reference As Ellipsoid = Ellipsoid.WGS84
-
-
' set loc 1 coordinates
-
Dim Loc1 As GlobalCoordinates
-
Loc1 = New GlobalCoordinates(Loc1_X, Loc1_Y)
-
-
' set loc 2 coordinates
-
Dim Loc2 As GlobalCoordinates
-
Loc2 = New GlobalCoordinates(Loc2_X, Loc2_Y)
-
-
' calculate the geodetic curve
-
Dim geoCurve As GeodeticCurve = _
-
geoCalc.CalculateGeodeticCurve(reference, Loc1, Loc2)
-
-
return geoCurve.EllipsoidalDistance
-
-
End function
-
-
End Class
Then you can do all sorts of useful stuff!