; ; GINZBURG PROJECTION ; =================== ; ; Name: Ginzburg [Azimuthal] Projection ; Autor: Ginzburg ; Quelle: ; ; Grafarend, E. und Syffus, R. (Betreuung); Bernecker, B.: Erstellung von ID-Cards ; ausgewählter Azimutalabbildungen der Kugel und des Rotationsellipsoides (1998) - ; Irsigler, M.: Erstellung von ID-Cards ausgewählter Kegelabbildungen der Kugel ; und des Rotationsellipsoides (1998) - Austen, G.: Erstellung von ID-Cards ; ausgewählter Zylinderabbildungen der Kugel und des Rotationsellipsoides (2000). - ; Studienarbeiten. Geodätisches Institut der Universität Stuttgart 1998, 2000. ; ; Richtung: Direkt-Transformation ; ; Anmerkung: Es handelt sich um eine Verallgemeinerung der azimutalen Cosinus- ; netze. Faktor k=2 ergibt eine orthographische, k=2 Lamberts ; flächentreue Projektion ; ; Das Programm übernimmt die Koordinaten eines Punktes (x/y) und transformiert ; diese in einen Punkt (x'/y'). ; ; x/y sind ebene Zielpunktkoordinaten, x'/y' geben die geogr. Breite und Länge ; der Position auf der Quell-Erdkugel, auf der der Zielpunkt gelesen werden ; kann. ; (C) Dr.-Ing. Rolf Böhm 2006 ; Benutzte Variablen ; ================== ; ; Laufende Koordinaten ; _name Ginzburg~Projection _var phi ; Geographische Breite _var lambda ; Geographische Länge _var alpha ; Polarazimut _var delta ; Poldistanz _var m ; Polarradius _var phi' ; Schiefes Phi _var lambda' ; Schiefes Lambda, dazu noch ein paar Untervarianten _var lambda" _var lambda- _var lambda= ; ; Differenzen ; _var d11 _var d12 _var d21 _var d22 _var dx ; lies d gekreuzt _var d= ; lies d parallel ; ; Konstanten der Transformation ; _var phi0 _var sinphi0 _var cosphi0 _var sinl ; Sinus(Lambda) _var cosl ; Cosinus(Lambda) _var sinp ; Sinus(Phi) _var cosp ; Cosinus(Phi) _var alpha ; Polarkoordinatenazimut _var m ; Polarkoordinatenradius _var t1 _var t2 _var t3 ; ; Eingabeparameter ; _var lambda0 ; Geogr. Länge des Bildmittelpunktes _var k ; Ginzburg Faktor. k=1: orthographisch, k=2: Lambert flächentreu _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) _var -------- ; ; x, y, x', y', Cx', Cy', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisierung ; =============== ; tstne initial 077$ ; Dialog pause Hinweis:~Dieses~Programm~rechnet~eine~Vorwärtstransformation.\\Es~muss~mit~einer~direkt~arbeitenden~Projection~engine~abgearbeitet~werden. input scale Maßstabszahl mov k 1.5 input k Parameter~(0.5~...~10)\\~~1:~orthographische~Azimutalprojektion\~~2:~flächentreue~Azimutalprojektion input phi0 Berührungspunktbreite~in~Grad input lambda0 Berührungspunktlänge~in~Grad ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 clip k 0.5 10 clip phi0 -90 90 clip lambda0 -180 180 ; Phi0 in Bogenmaß und Standardwinkelfunktionen ... mul phi0 °( mov r0 pi ;; phi0 kontern sub r0 phi0 ;; phi0 kontern mov phi0 r0 ;; phi0 kontern mov cosphi0 phi0 ; Cos(phi0) braucht man nur einmal rechnen cos cosphi0 mov sinphi0 phi0 ; Sin(phi0) braucht man nur einmal rechnen sin sinphi0 ; Programm ist initialisiert mov initial 1 077$: ; ; SIMD-Laufbereich ; ================ ; mov lambda x ; Geographische Länge mov phi y ; Geographische Breite add lambda 180 ; 180-Grad-Phasensprung einrechnen sub lambda lambda0 cmod lambda -180 180 ; x, y haben eine Doppelbedeutung: ; - einmal die verdefinierten RTA-Input-Koordinaten, also eigentlich Phi und Lambda, ; - dann aber auch die ebenen Kartenkoordinaten, die errechnet werden ; ; Umrechnung in Bogenmaß ; ---------------------- ; mul phi °( mul lambda °( ; ; Transformation in schiefe Lage ; ------------------------------ ; ; Das Problem ist, dass die Rechnung über arcsin läuft und dieser doppeldeutig ist. ; Die Lösung: Die Sache wird ein zweitesmal mit einer Formal angegangen, die einen ; arccos liefert. Dieser ist nun zwar auch doppeldeutig. Es ist aber nun diejenige Lösung ; richtig, die sowohl arcsin als auch arccos liefern. Wegen Rundungsunsicherheiten wird ; nicht auf Identität, sondern auf Differenzminimum getestet. ; Dieser Abschnitt rechnet genauso, wie bei der Inverstransformation. ; Vorab: sin/cos von Lambda und Phi berechnen mov sinl lambda sin sinl ; Sin(Lambda) mov cosl lambda cos cosl ; Cos(Lambda) mov sinp phi sin sinp ; Sin(Phi) mov cosp phi cos cosp ; Cos(Phi) ; phi' sphärisch transformieren mov t1 sinp ; phi' berechnen (Formeln Fiala, S. 79f.) mul t1 sinphi0 mov t2 cosp mul t2 cosphi0 mul t2 cosl add t1 t2 mov phi' t1 asin phi' ; Lambda (1): lambda' sphärisch transformieren: Mittels Arcsin mov t1 cosp neg t1 mul t1 sinl mov t2 phi' cos t2 div t1 t2 mov lambda' t1 asin lambda' ; Lambda (2): lambda- berechnen: Die zweite Lösung, die der Arcsin liefert tstlt lambda' 201$ mov lambda- pi sub lambda- lambda' jump 203$ 201$: clr lambda- sub lambda- pi sub lambda- lambda' 203$: ; Lambda (3): lambda" berechnen: Mittels Arccos mov t1 cosphi0 neg t1 mul t1 sinp mov t2 sinphi0 mul t2 cosp mul t2 cosl mov t3 phi' cos t3 add t1 t2 div t1 t3 mov lambda" t1 acos lambda" ; Lambda (4): lambda= berechnen: Die zweite Lösung, die der arccos liefert mov lambda= lambda" ; Gleichheitszeichen lies als Doppelstrich quer neg lambda= ; Lambda (5): Ein Lambda aus demjenigen Paar ist nun richtig, welches die kleinste ; Differenz aufweist ; Differenzen für 2. Entscheidungsstufe berechnen mov d11 lambda' sub d11 lambda" abs d11 mov d12 lambda' sub d12 lambda= abs d12 mov d21 lambda- sub d21 lambda" abs d21 mov d22 lambda- sub d22 lambda= abs d22 ; Differenzen für 1. Entscheidungsstufe berechnen mov dx d12 ; "gekreuzt" mul dx d21 mov d= d11 ; "parallel" mul d= d22 ; 1. Entscheidungsstufe: gekreuzt oder even cmpgt dx d= =richtig ; 2. Entscheidungsstufe: Einzellösung xrichtig: cmpgt d12 d21 21richtig jump 12richtig =richtig: cmpgt d11 d22 22richtig jump 11richtig ; Lösungen zusammensuchen 21richtig: mov lambda' lambda- jump ok 22richtig: mov lambda' lambda- 12richtig: 11richtig: ok: ; ; Netzentwurf rechnen ; ------------------- ; mov alpha lambda' ; mov m pi/2 sub m phi' div m k sin m mul m k ; ; Polarkoordinaten in kartesische Koordinaten umrechnen ; ----------------------------------------------------- ; mov x alpha sin x mul x m mov y alpha cos y mul y m ; ; Maßstab, Kartenmittelpunkt etc. einrechnen ; ------------------------------------------ ; mul x Rx' ; Erdradius div x scale ; Kartenmaßstab add x Cx' mul y Ry' div y scale add y Cy' ; ; Schlussarbeiten ; --------------- ; mov x' x mov y' y exit out: mov x' -9999 mov y' -9999 exit _end