; ; MERCATOR-SANSON-ENTWURF IN GOODESCHER FORM, OZEANISCH ; ===================================================== ; ; Nr. bei Wagner: 16 ; Name: Abweitungstreuer flächentreuer Zylinderentwurf (Mercator-Sanson-Entwurf), ; in Goodescher Form, ozeanisch (kontinental unterbrochen) ; Quelle: Karlheinz Wagner, Kartographische Netzentwürfe, Leipzig 1949, S. 74ff. ; Richtung: Inverse Transformation ; ; Berechnung in sog. Goodescher Form. Besser ist evtl. die engl. Bezeichnung "interrupted". ; Die Klaffungen liegen so, dass die Ozeane nicht auseinandergeschnitten werden. ; ; 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. ; (C) Rolf Böhm 2007 ; Benutzte Variablen ; ================== ; ; Die Variablennamen entsprechen weitgehend denen von Karlheinz Wagner, ; ; Laufende Koordinaten ; _name Mercator-Sanson-Entwurf~in~Goodescher~Form~(ozeanisch) _var phi ; Geographische Breite _var cosphi ; Cos(Phi) _var lambda ; Geographische Länge _var delta ; Poldistanz/geographisch, auch Schiefdistanz ; ; Konstanten der Transformation ; _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) _var 2pi _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 dx ; Verschiebung im Segment um x _var dl ; Verschiebung im Segment um Lambda _var sw ; Strip width W _var se ; Strip width E ; ; x, y, x', y', Cx', Cy', Rx', Ry', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisierung ; =============== ; tstne initial 077$ ; Dialog input scale Mercator-Sanson-Entwurf~(Interrupted)\\Maßstabszahl ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 ; Grenzfelder initialisieren jump .arrinit .return: ; Sonstiges mov 2pi pi mul 2pi 2 ; Programm ist initialisiert mov initial 1 077$: ; ; 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 ; ; Zeileninitialcode ; ----------------- ; ; phi und cos(phi) berechnen (Pro Zeile einmal) ; tsteq y zeilen_y $1001 mov phi y mov cosphi phi cos cosphi mov zeilen_y y $1001: ; ; dl, se, sw aus Tabellen holen ; ----------------------------- ; mov r0 x 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 (Projektion der Verschiebung dl) ; -------------------------------------------------------------- ; mov dx dl ; Eigentlich zu projizieren: (d)x = (d)lambda * cosphi, ; aber cosphi ist im (Segment-Mittelmerisian) 1 ; ; Netz rechnen ; ------------ ; ; mov phi y ; Geographische Breite (Pro Zeile einmal; oben; deshalb hier auskommentiert) sub x dx ; Geographische Länge: Hinschieben div x cosphi ; Projizieren mov r5 x ; Test neg sw cmplt r5 sw out ; außerhalb Segment cmpgt r5 se out ; außerhalb Segment add x dl ; Zurückschieben mov lambda x ; Übernehmen ; ; 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 mov y' phi ; Lambda kreisen lassen add x' LM0 cmod x' -180 180 exit 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 ; LM0 ... 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