Umrechnung Geodaetisch in UTM (Informationstechnik)
Hallo alle,
ich habe mir vor geraumer Zeit ein kleines Programm zusammengebastelt (Lazarus - Freepascal ) das mir SRTM (Satelite Radar Terrain Model ) Daten in kartesische Koordinaten, die ich fuer ein Gelaendemodel benutzen kann, umrechnet.
Ich habe irgendeine Formel aus einem Buch abgekupfert und alles hat damals auch funktioniert.
Jetzt versuchte ich dieses auf der Suedhalbkugel anzuwenden aber irgendwie tut es nicht mehr das was es soll.
Vielleicht hat ja jemand die Muse sich die Formel anzuschauen und mir einen Tip zu geben was ich an der Formel aendern muss damit auch richtige UTM Koordinaten herauskommen fuer die Suedhalbkugel.
Hier nur mal die Funktion die Geografische Koordinaten in UTM umrechnet.
Falls jemand interesse hat kann ich auch das gesamte Lazarus project posten.
beste Gruesse
Thomas Hooge
function Geo2UTM(geoCoord:tGeoCoord; L0:extended):tUTMcoord;
const
{ m:extended=0.9996; International
g0:extended=111136.536655;
g2:extended=-16107.0347;
g4:extended=16.9763;
g6:extended=-0.0223;
p:extended=180.0/pi;
ellipA:extended=6378388;
ellipB:extended=6356911.946;
}
m:extended=0.9996; {GRS80}
g0:extended=111132.952547;
g2:extended=-16038.5088;
g4:extended=16.8326;
g6:extended=-0.022;
p:extended=180.0/pi;
ellipA:extended=6378137;
ellipB:extended=6356752.314;
var
B,L:extended;
dL,e0:extended;
G:extended;
a1,a2,a3,a4,a5,a6:extended;
n2,t,N:extended;
c:extended;
begin
B:=degToRad(geocoord.lat);
L:=degToRad(geoCoord.long);
dL:=radTodeg(L)-L0;
e0:=(((l0+3.0)/6.0)+30.5)*1000000.0;
g:=g0*geocoord.lat+
g2*sin(2*B)+
g4*sin(4*B)+
g6*sin(6*B);
n2:=0.006768170*power(cos(b),2);
t:=tan(b);
c:=power(ellipA,2)/ellipB;
n:=c/(sqrt(1+n2));
a1:=m/p*n*cos(b);
a3:=m/6/power(p,3)*n*power(cos(b),3)*(1-power(t,2)+n2);
a5:=m/120/power(p,5)*n*power(cos(b),5)*(5-18.0*power(t,2)+power(t,4)+n2*(14-58*power(t,2)));
a2:=m/2/power(p,2)*n*power(cos(b),2)*t;
a4:=m/24/power(p,4)*n*power(cos(b),4)*t*(5-power(t,2)+9*n2);
a6:=m/720/power(p,6)*n*power(cos(b),6)*t*(61-58*power(t,2)+power(t,4));
geo2UTM.e:=e0+a1*dL+a3*power(dl,3)+a5*power(dl,5);
geo2UTM.n:=m*g+a2*power(dl,2)+a4*power(dl,4)+a6*power(dl,6);
if geocoord.lat<0 then <<<<< hier hatte ich schon mal was geaendert funktioniert aber nicht !!!
geo2utm.n:=geo2utm.n+10000000.0;
geo2utm.z:=geocoord.elevation;
end;