function To_GPS(Decimal_longitude : in Decimal_Longitude_Type;
Decimal_Latitude : in Decimal_Latitude_Type) return GPS_Coordonates_Type is
GPS_Coordonates : GPS_Coordonates_Type;
Longitude : Longitude_Coordonate_Type;
Latitude : Latitude_Coordonate_Type;
Local : Double := 0.0;
Degree_Int : Double := 0.0;
Minute_Flo : Double := 0.0;
Minute_Int : Double := 0.0;
Second_flo : Double := 0.0;
begin
-- Longitude convertion
--
Local := Double(Decimal_Longitude);
if Decimal_Longitude < 0.0 then
local := local * (-1.0);
end if;
Modf(Local, Degree_Int);
Minute_Flo := 60.0 * (Local - Degree_Int);
Modf(Minute_Flo, Minute_int);
Second_Flo := 60.0 * (Minute_Flo - Minute_Int);
if Decimal_Longitude < 0.0 then
Degree_Int := Degree_Int * (-1.0);
end if;
Longitude.Degr_Lon := Float(Degree_Int);
Longitude.Minu_Lon := Float(Minute_Int);
Longitude.Seco_Lon := Float(Second_Flo);
Local := Double(Decimal_Latitude);
if Decimal_Latitude < 0.0 then
local := local * (-1.0);
end if;
Modf(Local, Degree_Int);
-- Si je n'affiche pas ça passe pas.
Text_Io.Put(double'Image(Degree_int));
Minute_Flo := 60.0 * (Local - Degree_Int);
--Text_Io.Put(double'Image(Minute_flo));
Modf(Minute_Flo, Minute_int);
--Text_Io.Put(double'Image(Minute_Int));
Second_Flo := 60.0 * (Minute_Flo - Minute_Int);
if Decimal_Latitude < 0.0 then
Degree_Int := Degree_Int * (-1.0);
end if;
Latitude.Degr_Lat := Float(Degree_Int);
-- En effet Minute_Int vaut : NaN**************
Latitude.Minu_Lat := Float(Minute_Int);
Latitude.Seco_Lat := Float(Second_Flo);
GPS_Coordonates := (Longitude, Latitude);
return GPS_Coordonates;
end To_GPS;