; ; ABSTANDSTREUER KEGELENTWURF IN NORMALER (POLARER) LAGE MIT NORDPOL ALS PUNKT ; ============================================================================ ; ; Nr. bei Wagner: 1a ; Name: Abstandstreuer Kegelentwurf mit dem Nordpol als Punkt ; Variante: Zentrierend ; Autor: ; Quelle: Karlheinz Wagner, Kartographische Netzentwürfe, Leipzig 1949, S. 34ff. ; Richtung: Inverse Transformation ; Hemisphäre: Das Programm bildet immer den Nordpol als Punkt ab, auch bei südlichen Berührungsbreiten. ; ; ; Literatur: ; Wagner: Kartographische Netzentwürfe, Leipzig: Bibliographisches Institut 1949 ; Fiala: Mathematische Kartographie, Berlin: Verlag Technik 1957 ; (C) Rolf Böhm Bad Schandau 2004 ; Polversetzend/(Selbst-)Zentrierend: Bei Kegelentwürfen ist das Rechenzentrum (der Pol) meist ; nicht der Kartenmittelpunkt. Dies ist ein (selbst)zentrierendes Programm, welches den Pol ; so versetzt, dass der Mitte der Quellkarte zur Mitte der Zielkarte wird. Das Gegenstück bilden ; polversetzende Polgramme, bei denen der Polversatz "zu Fuss" abgefragt wird. ; ; Anmerkung 1: Die Berührungsparallel oder die Schnittparallele haben k e i n e n ; Einfluss auf die Zentrierung. Entscheidend ist der Quellbildmittelparallel ; ; Anmerkung 2: Auf die X-Lagerung hat die Selbstzentrierung ebenfalls keinen Einfluss, ; dies ist, wie bei allen anderen Programmen, mit lambda0 einzustellen. ; ; Anmerkung 3: Die Selbstzentrierung ist ganz schön aufwändig. Immerhin muss ; dafür zusätzlich zu der Inversformel eine Vorwärtsformel implementiert ; werden (wenngleich diese auch nur ein einziges Mal geerechnet wird) ; Benutzte Variablen ; ================== ; ; Die Variablennamen entsprechen weitgehend denen von Karlheinz Wagner, ; ; Laufende Koordinaten ; _name Abstandstreuer~Kegelentwurf~mit~Nordpol~als~Punkt~(zentrierend) _var phi ; Geographische Breite _var lambda ; Geographische Länge _var alpha ; Azimut ebene Polarkoord., auch Schiefazimut _var delta ; Poldistanz/geographisch, auch Schiefdistanz _var m ; Radius ebene Polarkoordinaten _var n ; Winkelreduktionsfaktor (Cos(Delta0)) ; ; Konstanten der Transformation ; _var phi0 ; Geogr. Breite des Berührungsparallels _var delta0 ; Poldistanz des Berührungsparallels _var tand0 ; dessen Tangens _var pi-co ; Konstante Pi/4-Delta0 + Tan(Delta0) _var lambda0 ; Geogr. Breite des Mittelmeridians _var scale ; Kartenmaßstabszahl (also 1000000, nicht 1/1000000) _var Pol-y ; Polversatz nach Nord _var 2pi ; 360 Grad ; ; x, y, x', y', Cx', Cy', Rx', Ry', °(, (°, pi, pi/2 etc. sind vordefinierte globale Konstanten ; ; Initialisierung ; =============== ; tstne initial $077 ; Dialog input scale Maßstabszahl input phi0 Berührungspunktbreite~in~Grad input lambda0 Berührungspunktlänge~in~Grad ; Eingegebene Werte auf Min/Max bringen clip scale 1 1E12 clip phi0 -90 90 clip lambda0 -180 180 ; Konstanten berechnen mul phi0 °( mov delta0 pi/2 sub delta0 phi0 ; Delta0 fertig mov tand0 delta0 mov n delta0 sin n div n delta0 ; n fertig mov 2pi pi mul 2pi 2 ; 2*Pi ; Pol-y berechnen mov r1 Cy ; "Phi" von Cy abholen. "Lambda" alias Cx sei immer 0 ... mul r1 °( ; "Phi" in Bogenmaß umrechnen ; mov r2 pi/2 ; Eigentlicher Entwurf: Phi (in r1) im m (alias Pol-y) umrechnen sub r2 r1 ; delta = pi/2 - phi mov m r2 ; m = delta mov Pol-y m ; ; m in y umrechnen. Aus x=0 folgt, da m=sqrt(x²+y²) m=y! div Pol-y scale ; Maßstab einrechnen mul Pol-y Ry' ; Erdradius einrechnen proof Pol-y ; 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' sub y Pol-y div y Ry' mul y scale ; ; Kartesische Koordinaten x/y in Polarkoordinaten m/alpha umwandeln ; ----------------------------------------------------------------- mov alpha x ; kartesische Koord. x y in Polarkoordinaten m alpha div alpha y atan alpha tstgt y $151 ; Der atan ist doppeldeutig!: Wenn y negativ dann ... add alpha pi ; 180° addieren $151: neg alpha ; Jetzt ist alpha berechnet, liegt aber noch falsch add alpha pi cmplt alpha pi $153 sub alpha 2pi $153: power x 2 power y 2 clr m add m x add m y root m 2 ; ; Eigentlicher abstandstreuer Entwurf, dieser invers ; -------------------------------------------------- ; mov lambda alpha ; Geographische Länge div lambda n mov phi pi/2 ; Geographische Breite sub phi m ; ; Schlussarbeiten ; --------------- ; mul lambda (° mul phi (° mov x' lambda ; ausserhalb cmplt x' -180 out cmpgt x' 180 out ; lambda0 einrechnen und Ergebnis modula 360 Grad add x' lambda0 cmpgt x' -180 $3 add x' 360 $3: cmplt x' 180 $4 sub x' 360 $4: mov y' phi exit ; ; Ausserhalb ; ---------- out: mov x' -9999 mov y' -9999 exit _end