Einzelnen Beitrag anzeigen

blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#2

Re: Umrechner von grad, minuten, sekunden zu einer dezimalza

  Alt 16. Dez 2008, 20: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;
  Mit Zitat antworten Zitat