LazMapViewer: Fix rounding error in GPS float to degrees-minutes-seconds conversion.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8582 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2022-10-28 15:34:01 +00:00
parent 07e5d42a18
commit 5747ba1ca5

View File

@ -1295,7 +1295,12 @@ procedure SplitGps(AValue: Double; out ADegs, AMins: Double);
begin
AValue := abs(AValue);
AMins := frac(AValue) * 60;
ADegs := trunc(AValue);
if abs(AMins - 60) < 1E-3 then
begin
AMins := 0;
ADegs := trunc(AValue) + 1;
end else
ADegs := trunc(AValue);
end;
procedure SplitGps(AValue: Double; out ADegs, AMins, ASecs: Double);
@ -1303,6 +1308,16 @@ begin
SplitGps(AValue, ADegs, AMins);
ASecs := frac(AMins) * 60;
AMins := trunc(AMins);
if abs(ASecs - 60) < 1E-3 then
begin
ASecs := 0;
AMins := AMins + 1;
if abs(AMins - 60) < 1e-3 then
begin
AMins := 0;
ADegs := ADegs + 1;
end;
end;
end;
function GPSToDMS(Angle: Double): string;