; ; GOODESCHER UNTERBROCHENER ENTWURF, OZEANISCH ; ============================================ ; ; Name: Mollweidescher Entwurf in Goodescher Form, Goode 1923 ; Quelle: ABC Kartenkunde, S. 401 ; Richtung: Inverse Transformation ; ; Die "Goodesche Form" entspringt J. P. Goodes Idee, eine Weltkarte in Ozeanmitten ; einzuschneiden und so Verzerrungen in den Kontinenten zu mindern. ; ; Dieses Programm wendet dieses Prinzip auf den Mollweideschen Entwurf an, ; so wie dies auch von Goode ursprünglich erfolgt ist. ; ; Ozeanische Variante (mit kontinentalen Klaffungen) ; ; Die Klaffungen werden unten im Unterprogramm .arrinit definiert. ; ; 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. ; ; Der Maßstab wird abgefragt. ; Die Zielbildgeometrie wird dem Sekundäroperanden oder einem Fixbild entnommen. ; ; Literatur: ; Wagner: Kartographische Netzentwürfe, Leipzig: Bibliographisches Institut 1949 ; ABC Kartenkunde, Leipzig: Brockhaus 1983, S. 410 (Abbildung mit Klaffungen). ; (C) Rolf Böhm 2006 ; Benutzte Variablen ; ================== ; ; ; Laufende Koordinaten ; _name Goodescher~unterbrochener~Entwurf~(ozeanisch) _var phi ; Geographische Breite _var lambda ; Geographische Länge _var delta ; Poldistanz/geographisch, auch Schiefdistanz _var psi ; Parameter Psi _var sinpsi ; sin davon _var sin2psi ; sin von 2*psi _var cospsi ; cos davon _var t1 ; Temporär 1 _var y... ; Current y ; ; Variablen für Interruptionen ; _dim DLn 36 ; Tabelle mit Mittelmeridianen Nordhalbkugel _dim SWn 36 ; Tabelle mit Streifenbreiten nach W " _dim SEn 36 ; Tabelle mit Streifenbreiten nach O " _dim DLs 36 ; Tabelle mit Mittelmeridianen Südhalbkugel _dim SWs 36 ; Tabelle mit Streifenbreiten nach W " _dim SEs 36 ; Tabelle mit Streifenbreiten nach O " _var LM0 ; Lambda0 _var lambdaW ; Grenzlambda West _var lambdaE ; Grenzlambda Ost _var dx ; Verschiebung im Segment um x _var dl ; Verschiebung im Segment um Lambda _var sw ; Strip width W _var se ; strip width E ; ; Konstanten der Transformation ; _var lambda0 ; Geogr. Länge des Bildmittelpunktes _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) _var \/2 ; Wurzel aus 2 (Ja, Variablenname »\/2« ist in RTA möglich) _var 2*\/2 ; 2 * Wurzel aus 2 _var 2*\/2/pi ; 2 * Wurzel aus 2 durch Pi ; ; x, y, x', y', Cx', Cy', Rx', Ry', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisierung ; =============== ; tstne initial 77$ ; Dialog input scale Maßstabszahl ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 ; Wurzel 2 mov \/2 2 ; Die Variablennamen sind ein kleiner Scherz ... root \/2 2 mov 2*\/2 \/2 mul 2*\/2 2 mov 2*\/2/pi 2*\/2 div 2*\/2/pi pi ; Äquatorlänge (=Verkürzungsfaktor) des Mollweide ; Interruptions-Variablen laden jump .arrinit .return: ; Programm ist initialisiert mov initial 1 77$: ; ; SIMD-Laufbereich ; ================ ; ; Maßstab, Kartenmittelpunkt etc. einrechnen ; ------------------------------------------ sub x Cx' ; Bildmittelpunkt div x Rx' ; Erdradius mul x scale ; Kartenmaßstab sub y Cy' div y Ry' mul y scale ; ; dl, sw und se aus Tabellen holen ; -------------------------------- ; mov r0 x div r0 2*\/2/pi mul r0 (° div r0 10 floor r0 add r0 18 clip r0 0 36 tstlt y $1300 get dl DLn r0 ; Delta Lambda get sw SWn r0 ; Strip width get se SEn r0 jump $1310 $1300: get dl DLs r0 ; Delta Lambda get sw SWs r0 ; Strip width get se SEs r0 $1310: ; ; Rückverschiebung dx ermitteln ; ----------------------------- ; mov dx dl mul dx 2*\/2/pi ; ; Den Parameter psi berechnen ; --------------------------- ; cmpeq y y... $3030 mov psi y div psi \/2 mov sinpsi psi ; sinpsi aufheben asin psi mov sin2psi psi mul sin2psi 2 sin sin2psi ; sin2psi ist jetzt auch fertig mov cospsi psi ; psi wird auch aufgehoben cos cospsi ; und jetzt ist auch cospsi fertig mov y... y $3030: ; ; Eigentlicher Entwurf, dieser invers ; ----------------------------------- ; sub x dx ; Hinschieben ; mov lambda x ; Geographische Länge mul lambda pi mov t1 cospsi mul t1 2*\/2 div lambda t1 mov phi psi ; Geographische Breite mul phi 2 add phi sin2psi div phi pi asin phi ; mov r5 lambda ; test ob außerhalb neg sw cmplt r5 sw out cmpgt r5 se out add lambda dl ; Zurückschieben ; ; In Gradmaß umrechnen und Ausserhalbtest ; --------------------------------------- ; mul phi (° mul lambda (° cmplt phi -90 out cmpgt phi 90 out cmplt lambda -180 out cmpgt lambda 180 out ; ; Schlussarbeiten ; --------------- ; mov x' lambda add x' LM0 mov y' phi cmpgt x' -180 10$ add x' 360 10$: cmpgt x' -180 30$ add x' 360 30$: cmplt x' 180 40$ sub x' 360 40$: cmplt x' 180 50$ sub x' 360 50$: exit end out: mov x' -9999 mov y' -9999 exit ; ; Subroutine .arrinit -- Felder initialisieren ; ============================================ ; ; Ozeanische Lage (Eigenentwicklung RB; G I Evendens Abb. 5.1 ist wohl nicht völlig korrekt) ; ; Hier editieren, wenn andere Segmentlagen gewünscht werden ... ; ; Das Unterprogramm stellt folgende 7 Konfigurationsparameter bereit: ; The Subroutine defines the following 7 configuraton parameters: ; ; DLn DLs ... Segmentmittelmeridian / Central meridian of the segment ; SWn SWs ... Segmentbreite nach W / Segment width to West ; SEn SEs ... Segmentbreite nach O / Segment width to East ; DL0 ... Lambda0 - Erdrotation / Lambda0 - earth rotation ; ; Nachsilbe n definiert Nord-, Nachsilbe s Südhalbkugelwert ; Prefix n meand North, Prefix s South hemisphere ; ; Achtung: Werte bei verdrehter Erde im Originalmaß, wewstlich -180: -190 ... , östlich +180: +190, +200 ... ; Note: On rotated earth original co-ords, before -180: -190 ... , after +180: +190, +200 ... .arrinit: ; ; Mittelmeridiane Nordhalbkugel (einschließlich Verdrehung um Lambda0 alias LM0) ; mov DLn(0) 60 mov DLn(1) 60 mov DLn(2) 60 mov DLn(3) 60 mov DLn(4) 60 mov DLn(5) 60 mov DLn(6) 60 mov DLn(7) 60 mov DLn(8) -170 mov DLn(9) -170 mov DLn(10) -170 mov DLn(11) -170 mov DLn(12) -170 mov DLn(13) -170 mov DLn(14) -170 mov DLn(15) -170 mov DLn(16) -170 mov DLn(17) -170 mov DLn(18) -170 mov DLn(19) -170 mov DLn(20) -170 mov DLn(21) -170 mov DLn(22) -170 mov DLn(23) -170 mov DLn(24) -170 mov DLn(25) -40 mov DLn(26) -40 mov DLn(27) -40 mov DLn(28) -40 mov DLn(29) -40 mov DLn(30) -40 mov DLn(31) -40 mov DLn(32) -40 mov DLn(33) -40 mov DLn(34) -40 mov DLn(35) -40 ; ; Streifenbreiten nach W Nordhalbkugel ; mov SWn(0) 40 mov SWn(1) 40 mov SWn(2) 40 mov SWn(3) 40 mov SWn(4) 40 mov SWn(5) 40 mov SWn(6) 40 mov SWn(7) 40 mov SWn(8) 90 mov SWn(9) 90 mov SWn(10) 90 mov SWn(11) 90 mov SWn(12) 90 mov SWn(13) 90 mov SWn(14) 90 mov SWn(15) 90 mov SWn(16) 90 mov SWn(17) 90 mov SWn(18) 90 mov SWn(19) 90 mov SWn(20) 90 mov SWn(21) 90 mov SWn(22) 90 mov SWn(23) 90 mov SWn(24) 90 mov SWn(25) 50 mov SWn(26) 50 mov SWn(27) 50 mov SWn(28) 50 mov SWn(29) 50 mov SWn(30) 50 mov SWn(31) 50 mov SWn(32) 50 mov SWn(33) 50 mov SWn(34) 50 mov SWn(35) 50 ; ; Streifenbreiten nach E Nordhalbkugel ; mov SEn(0) 40 mov SEn(1) 40 mov SEn(2) 40 mov SEn(3) 40 mov SEn(4) 40 mov SEn(5) 40 mov SEn(6) 40 mov SEn(7) 40 mov SEn(8) 80 mov SEn(9) 80 mov SEn(10) 80 mov SEn(11) 80 mov SEn(12) 80 mov SEn(13) 80 mov SEn(14) 80 mov SEn(15) 80 mov SEn(16) 80 mov SEn(17) 80 mov SEn(18) 80 mov SEn(19) 80 mov SEn(20) 80 mov SEn(21) 80 mov SEn(22) 80 mov SEn(23) 80 mov SEn(24) 80 mov SEn(25) 60 mov SEn(26) 60 mov SEn(27) 60 mov SEn(28) 60 mov SEn(29) 60 mov SEn(30) 60 mov SEn(31) 60 mov SEn(32) 60 mov SEn(33) 60 mov SEn(34) 60 mov SEn(35) 60 ; ; Mittelmeridiane Südhalbkugel (einschließlich Verdrehung um Lambda0 alias LM0) ; mov DLs(0) 70 mov DLs(1) 70 mov DLs(2) 70 mov DLs(3) 70 mov DLs(4) 70 mov DLs(5) 70 mov DLs(6) 70 mov DLs(7) 70 mov DLs(8) 70 mov DLs(9) 70 mov DLs(10) -155 mov DLs(11) -155 mov DLs(12) -155 mov DLs(13) -155 mov DLs(14) -155 mov DLs(15) -155 mov DLs(16) -155 mov DLs(17) -155 mov DLs(18) -155 mov DLs(19) -155 mov DLs(20) -155 mov DLs(21) -155 mov DLs(22) -155 mov DLs(23) -155 mov DLs(24) -155 mov DLs(25) -155 mov DLs(26) -155 mov DLs(27) -25 mov DLs(28) -25 mov DLs(29) -25 mov DLs(30) -25 mov DLs(31) -25 mov DLs(32) -25 mov DLs(33) -25 mov DLs(34) -25 mov DLs(35) -25 ; ; Streifenbreiten nach W Südhalbkugel ; mov SWs(0) 50 mov SWs(1) 50 mov SWs(2) 50 mov SWs(3) 50 mov SWs(4) 50 mov SWs(5) 50 mov SWs(6) 50 mov SWs(7) 50 mov SWs(8) 50 mov SWs(9) 50 mov SWs(10) 85 mov SWs(11) 85 mov SWs(12) 85 mov SWs(13) 85 mov SWs(14) 85 mov SWs(15) 85 mov SWs(16) 85 mov SWs(17) 85 mov SWs(18) 85 mov SWs(19) 85 mov SWs(20) 85 mov SWs(21) 85 mov SWs(22) 85 mov SWs(23) 85 mov SWs(24) 85 mov SWs(25) 85 mov SWs(26) 85 mov SWs(27) 45 mov SWs(28) 45 mov SWs(29) 45 mov SWs(30) 45 mov SWs(31) 45 mov SWs(32) 45 mov SWs(33) 45 mov SWs(34) 45 mov SWs(35) 45 ; ; Streifenbreiten nach E Südhalbkugel ; mov SEs(0) 50 mov SEs(1) 50 mov SEs(2) 50 mov SEs(3) 50 mov SEs(4) 50 mov SEs(5) 50 mov SEs(6) 50 mov SEs(7) 50 mov SEs(8) 50 mov SEs(9) 50 mov SEs(10) 85 mov SEs(11) 85 mov SEs(12) 85 mov SEs(13) 85 mov SEs(14) 85 mov SEs(15) 85 mov SEs(16) 85 mov SEs(17) 85 mov SEs(18) 85 mov SEs(19) 85 mov SEs(20) 85 mov SEs(21) 85 mov SEs(22) 85 mov SEs(23) 85 mov SEs(24) 85 mov SEs(25) 85 mov SEs(26) 85 mov SEs(27) 45 mov SEs(28) 45 mov SEs(29) 45 mov SEs(30) 45 mov SEs(31) 45 mov SEs(32) 45 mov SEs(33) 45 mov SEs(34) 45 mov SEs(35) 45; ; ; Rotation of earth (Degree!) ; mov LM0 -160 ; Degree! ; ; Into Arc ; .arr3: get r2 DLn r0 ; DLn(r0) sub r2 LM0 ; Rotate the original central meridians in the table cmod r2 -180 180 mul r2 °( ; into arc put DLn r0 r2 ; and back get r2 SWn r0 ; SWn(r0) mul r2 °( ; into arc put SWn r0 r2 ; and back get r2 SEn r0 ; SEn(r0) mul r2 °( ; into arc put SEn r0 r2 ; and back get r2 DLs r0 ; DLs(r0) sub r2 LM0 ; Rotate the original central meridians in the table cmod r2 -180 180 mul r2 °( ; into arc put DLs r0 r2 ; and back get r2 SWs r0 ; SWs(r0) mul r2 °( ; into arc put SWs r0 r2 ; and back get r2 SEs r0 ; SEs(r0) mul r2 °( ; into arc put SEs r0 r2 ; and back inc r0 cmple r0 36 .arr3 jump .return _end