Var
FWGS84: TWGS84;
FFuseau: Integer;
FSouthernHemi: Boolean;
Function GetWGS88: TWGS84;
Begin
If Not Assigned(FWGS84) Then
FWGS84 := TWGS84.Create;
Result := FWGS84;
End;
Procedure InitialiseGPS(ALat, ALon: Double);
Begin
FFuseau := floor((ALon + 180) / 6) + 1;
FSouthernHemi := (ALat < 0);
End;
Procedure LatLonToEN(ALat, ALon: Double; Var AEast, ANorth: Double);
Var
oLatLon: TrecLatLon;
oUTM: TrecUTM;
oWGS84: TWGS84;
Begin
oLatLon.Lat := ALat;
oLatLon.Lon := ALon;
oWGS84 := GetWGS88;
oWGS84.WGS84ToUTM(oLatLon, oUTM{%H-});
AEast := oUTM.Y;
ANorth := oUTM.X;
End;
Procedure ENToLatLon(AEast, ANorth: Double; Var ALat, ALon: Double);
Var
oLatLon: TrecLatLon;
oUTM: TrecUTM;
oWGS84: TWGS84;
Begin
If FFuseau = -1 Then
Raise Exception.Create('Fuseau (UTM Zone) not defined. Call InitialiseGPS first.');
oUTM.X := ANorth;
oUTM.Y := AEast;
oUTM.southhemi := FSouthernHemi;
oUTM.fuseau := FFuseau;
oWGS84 := GetWGS88;
oWGS84.UTMToWGS84(oUTM, oLatLon{%H-});
ALat := oLatLon.Lat;
ALon := oLatLon.Lon;
End;
Initialization
FWGS84 := nil;
FFuseau := -1;
FSouthernHemi := True;
Finalization
FreeAndNil(FWGS84);