Essentially codifies in a single Delphi record type the Java Script Navigation Code mostly from Movable Type Scripts and then builds additional functionality around these.
Open a record with Longitude and Latitude as either Radians or Degrees. Checks valid values.
Procedure CreateDec(ADecLong, ADecLatt: Double); (Long Lat in Degrees)
Procedure Create(ALongRad, ALatRad: Double); (Long Lat in Radians)
Using that record obtain a second record at a given distance and bearing
Function LocationAt(AMeters, ATrueHeadingDegrees: Double): RNavigateLongLat;
Function LocationAtMtrsRad(AMeters, ATrueHeadingRadians: Double)
: RNavigateLongLat;
Or
Use a second record to obtain distance and/or great circle bearing
Function MetresFrom(AStart: RNavigateLongLat): Double;
Function LocationAt(AMeters, ATrueHeadingDegrees: Double): RNavigateLongLat;
Function HeadingFrom(AStart: RNavigateLongLat): Double; // 0..360 Degrees
Function HeadingInRadFrom(AStart: RNavigateLongLat): Double;
Function MetresFromPrecision(AStart: RNavigateLongLat;
Out ARadiansToStart, ARadiansFromStart: Double{Radians}; AAllowPolarRoute: Boolean = false): Double;
Function LocationAtMtrsRad(AMeters, ATrueHeadingRadians: Double)
: RNavigateLongLat;
Use a record to find a Link to Google Maps
Function GoogleLink: String;
Function GoogleLinkDirectionsTo(ADestination: RNavigateLongLat;
AMapLoc: Integer = 0 { 0 Start 1 End 3 Center } ): String;
In Windows Only do a Shell execute to Google in a browser
Procedure GoGoogle;
Procedure GoGoogleDirectionsTo(ADestination:RNavigateLongLat;
AMapLoc: Integer = 0 { 0 Start 1 End 3 Center });
The remaining functions are about formatting the values into text and other utilities the handle running averaging.