Registriert seit: 19. Jun 2007
126 Beiträge
Delphi 5 Standard
|
Re: Umrechner von grad, minuten, sekunden zu einer dezimalza
16. Dez 2008, 21:29
hiho
hast du glück, dass ich das gerade in Info brauche^^ und mir das mal geschrieben hatte
das war jetzt noch vom NMEA-Protokoll einer GPS-Maus,
aber daraus kannst du dir das ja im Prinzip ableiten, musst ggf. halt noch wegkürzen, da im allgemeinen unnötige Sachen durchgeführt werden, wie die Beachtung von Längen o. Breitengrad bzw Nord-und Südhalbkugel sowie Westlich oder Östlich von Greenwich, im Normalfall wird das aber mit Buchstaben angegeben W,O,S,N
schau einfach am besten Mal, konnte den Code bis jetzt noch nicht testen wie ich ihn hier habe, aber im normalfall sollte das gehen, hab die funktion in abgespeckterweise getest und da hat es geklappt,also nur gerade das Umrechnen
Delphi-Quellcode:
function DezToGrad(str:string; breitengrad:boolean):string;
var
stunden:integer; //Stunden
minuten,sekunden: extended; //Minuten und Sekunden - extended, weil beim Umrechnen Gleitkommazahlen benötigt werden
begin
str:=Stringreplace(str,'.',#44,[]); //der Eingabestring enthält einen Punkt, aber damit kann delphi nicht umgehen als Gleitkommazahl
if breitengrad then //Breitengrad oder Längengrad?
begin
if pos('-',str)>0 then //Süd- oder Nordhalbkugel?
begin
str:=copy(str,2,length(str)); //ggf. das Minus entfernen
stunden:=90+(90-strtoint(copy(str,1,Pos(',',str)-1))); //Südhalbkugel
minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1
minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten
minuten:=60-minuten;
sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1
minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma
sekunden:=60-trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden
end
else
begin
stunden:=strtoint(copy(str,1,Pos(',',str)-1)); //Nordhalbkugel
minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1
minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten
sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1
minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma
sekunden:=trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden
end;
end
else
begin // Längengrad
if pos('-',str)>0 then // Westlich oder Östlich von Greenwich
begin
str:=copy(str,2,length(str)); //ggf. das Minus entfernen
stunden:=strtoint(copy(str,1,Pos(',',str)-1)); //Östlich von Greenwich
minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1
minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten
minuten:=60-minuten;
sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1
minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma
sekunden:=60-trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden
end
else
begin
stunden:=180+(180-strtoint(copy(str,1,Pos(',',str)-1))); //Westlich von Greenwich
minuten:=strtofloat(str)-stunden; //wandelt den String in Gleitkomma um - die Stunden -> Zahl kleiner 1
minuten:=minuten*60; // Multipliziere mit 60 für die Minuten zu erhalten
sekunden:=minuten-trunc(minuten); // Um die Sekunden zu erhalten -> Zahl kleiner 1
minuten:=trunc(minuten); // die abgerundet Ganzzahl der Minuten da noch Gleitkomma
sekunden:=trunc(sekunden*60); // Multipliziere mit 60 für die Sekunden und Runden
end;
end;
result:=inttostr(stunden)+'° '+floattostr(minuten)+#39+' '+floattostr(sekunden)+#39#39; // Ausgabe erfolgt Stunden° Minuten' Sekunden''
end;
function GradToDez(str:string):string;
var stunden:integer; minuten,sekunden:extended;
begin
stunden:=strtoint(copy(str,1,Pos('°',str)-1));
minuten:=strtofloat(copy(str,Pos('°',str)+1,Pos(#39,str)-1-Pos('°',str)))/60;
sekunden:=strtofloat(copy(str,Pos(#39,str)+2,PosEx(#39,str,Pos(#39,str))+2-Pos(#39,str)))/3600;
result:=floattostr(stunden+minuten+sekunden)+'°';
end;
|