UTM-Zone

Berechnung der UTM-(Längen)-Zone aus der geografische Länge

Das einfache Thema dieser Seite ist die Berechnung der UTM-(Längen)-Zone aus der geografischen Länge. Dazu werden gut vergleichbare Beispiele mit mehreren unterschiedlichen Entwicklungs-Methoden vorgestellt. Die Beispiele lassen sich mit kostenfreien Programmen herstellen und verwenden.
Alle Angaben sind unverbindlich, die Verwendung erfolgt auf eigenes Risiko !
Kartografie Orientierung auf der Erdoberfläche
UTM Universal Transverse Mercator - Projektion (Grundlagen, Transformation)
UTM-Zone UTM-(Längen)-Zone, Zonen-Grenzen und Zentral-Meridian
Kalkulation Berechnung mit einem Kalkulations-Programm (LibreOffice-Calc, MS-Excel, ...)
Basic Berechnung mit Basic (LibreOffice-Basic, Visual Basic, ...)
Javascript Schnelle Live-Berechnung auf einer Webseite
C/C++ Ausführung mit maximaler Geschwindigkeit
Perl Beste Wahl für Konsolen-(CLI)-Programme
PHP Häufigste Wahl für dynamische Webseiten
Muster-Programm Programm-Beispiel auf einer interaktiven Webseite
Links Ausgewählte Links zum Thema 'UTM-Zone'
Verwandte Themen UTM (Universal Transverse Mercator Projektion), UTM-Transformation (Umrechnung zwischen geografischen und UTM-Koordinaten)

UTM - (Längen) - Zone

Meridian-Streifen

Für das → UTM-System wird die Erde von West nach Ost in 60 Zonen = Meridianstreifen eingeteilt.
Jeder Streifen umfasst in West-Ost-Richtung 6 Längengrad und reicht in Nord-Süd-Richtung (fast) von Pol zu Pol.

Die Zonen werden von West nach Ost nummeriert, beginnend an der Datumgrenze (geogr.Länge 180°=-180°) mit Zone 1.

Die Ost-West-Erstreckung der UTM-Zonen ist zwar in Längengrad immer konstant 6°, verringert sich jedoch in km vom Äquator (668 km auf 0° Breite) zum Pol (70 km auf 84° Breite ). In Mitteleuropa beträgt sie ca. 450km.

Grenzen: Die UTM-Zonen sind auf den Bereich -80° (Süd) bis +84° (Nord) begrenzt, weil das as UTM-System in den Polargebieten zu große Verzerrungen ergibt. Dort verwendet man die Universale Polare Stereografische Projektion ( UPS)

Details zu UTM (Universal Transverse Mercator Projektion)

Zentral-Meridian

Der zur UTM-Abbildung verwendete Zylinder liegt entlang des Zentral-Meridians von Pol zu Pol genau an der Erde an. Daher weist die Abbildung nahe dieses Meridians keine Verzerrungen auf.

Die Verzerrungen nehmen mit zunehmendem Abstand vom Zentral-Meridian jeder Zone zu. Die West-Ost Ausdehnung der UTM-Zonen von 6 Längengrad ist ein Kompromiss: Breitere Zonen würden mehr Verzerrung ergeben, schmälere Zonen eine unzumutbar große Anzahl von Zonen.

Algorithmus

Berechnung der UTM-(Längen)-Zone aus der geografischen Länge in Grad:
utmz = int((lon + 180) / 6) + 1
Die 'Ganzzahl'-Funktion int() schneidet die Nachkomma-Stellen ab ( Details).
Dieser Standard-Algorithmus berücksichtigt keine der → irregulären Zonen in Norwegen.

Berechnung von Zentral-Meridian (zone_cm), West-Grenze (zone_west) und Ost-Grenze (zone_ost) einer UTM-Zone in Längen-Grad (östlich Greenwich):
zone_cm = utmz * 6 - 183
zone_west = cm - 3
zone_ost = cm + 3

Beispiele

Auf dieser Seite folgen einige praktische Beispiele.

Dabei erhalten jene Methoden den Vorrang, die man ohne finanziellen Aufwand an jedem gängigen Arbeits-PC ausführen kann:
Kalkulations-Programme ↓ (LibreOffice ist kostenfrei), Basic ↓ (als HilfsProgramm für LibreOffice ebenfalls kostenfrei) und JavaScript ↓ (in jedem Browser-Programm enthalten).

Ergänzend werden Methoden vorgestellt, die man ebenfalls kostenfrei verwenden kann, die jedoch fortgeschrittene Ansprüche stellen:
C/C++ ↓ (erfordert einen Compiler), Perl ↓ und PHP ↓ (erfordern Interpreter, in der Praxis meist auch einen Webserver).

Auch für wenig geübte EntwicklerInnen kann es interessant sein, wie ein einfacher Algorithmus mit verschiedenen Methoden angewendet wird. Daher sind die Beispiele nicht optimiert, sondern auf maximale Verständlichkeit und Vergleichbarkeit programmiert.

Eingabe

In allen Beispielen kann man die erforderlichen Daten (geogr. Länge, optional auch Breite) eingeben. Dabei ist besonders zu beachten, dass (nur) im deutsch-sprachigen Raum ein Komma-Beistrich verwendet wird. Alle Programmiersprachen verwenden ausnahmslos einen Komma-Punkt !

Daher muss man entweder die Eingabe von Gleitkomma-Zahlen vermeiden, oder bei der Eingabe Komma-Punkte verwenden, oder die Eingabe-Daten im Programm umwandeln. Diese Aufgabe wird normalerweise mit einem → Regulären Ausdruck durchgeführt.

UTM-Zone mit Kalkulations-Programmen

Einfache Algorithmen wie diesen probiert man am einfachsten mit einem Standard → Kalkulations-Programm. Jedes gängige Programm ist dazu geeignet, z.B. LibreOffice (kostenfrei für alle gängigen Betriebssysteme) oder MS-Excel.
Das rechts simulierte Kalkulations-Beispiel lässt sich Live testen:
Tragen sie sinnvolle Daten in die grün unterlegten Eingabe-Felder ein, oder klicken sie auf einen der Städte-Namen:

Beispiele:

Die Zellen der Spalte B werden hier doppelt angezeigt: Rechts mit den in den Zellen enthaltenen Formeln, links mit den damit berechneten Daten.

In Zelle B5 wird die Länge in Dezimalgrad berechnet, daraus in Zelle B7 die UTM-Zone.

Aus der UTM-Zone wird in B9 der Zentral-Meridian (in Grad östl. Länge) berechnet, daraus die westliche B8 und östliche B10 Grenze des Meridian-Streifens.
Berechnung der UTM-(Längen)-Zone aus der geografischen Länge (in Grad, Minuten, Sekuden). Anschließend Berechnung von Zentral-Meridian und Grenzen des Meridian-Streifens:
 AB
1Geografische Länge
2Grad
3Min
4Sec
5lon123 =VORZEICHEN(B2) * (ABS(B2) + ABS(B3)/60 + ABS(B4)/3600)
6UTM-Zone
7utmz31 =GANZZAHL((B5+180)/6) + 1 - WENN(B5>=180;60;0)
8west0=B9-3
9cm3=B7*6-183
10ost6=B9+3
Hinweis: In die Formeln wurden zur besseren Darstellung Leerzeichen eingefügt. Diese werden vom Kalkulations-Programm ignoriert bzw. entfernt.
Es ist vorgesehen, die Grad-Daten (B2) optional auch negativ anzugeben. In diesem Fall werden allfällige Vorzeichen der Minuten und Sekunden (mit Funktion ABS() in Zelle B5) ignoriert. Wenn man als geografische Länge Daten 180...360° verwendet, dann ergeben sich Zonen >60
In diesem Fall wird mit einer bedingten Verzweigung (WENN() ) in Zelle B7 die Zahl 60 subtrahiert und die korrekte UTM-Zone berechnet.
In dieser einfachen Version werden die irregulären Zonen (Norwegen) nicht berücksichtigt.

Alternative: Jedes Standard Kalkulations-Programm lässt sich mit Funktionen der Programmiersprache ↓ Basic (VBA, nächstes Kapitel) ergänzen.
Die Live-Simulation dieses Kapitels ist mit Funktionen der Programmiersprache Javascript programmiert. Details zur Programmierung des Algorithmus mit ↓ Javascript (auf dieser Seite).

UTM-Zone mit Basic (VBA)

Die im Beispiel vorgestellte → Basic-Funktion lon_deg() berechnet die UTM Längen-Zone nach dem allgemeinen Algorithmus und berücksichtigt dabei auch die irregulären Zonen. Man kann die Funktion in jedem Standard Kalkulations-Programm als 'Benutzer-definierte Funktion' verwenden. Sie funktioniert in LibreOffice-Calc ebenso wie in MS-Excel.
Details zur Anwendung von Basic-Programmen in der Tabellen-Kalkulation
Berechnung der UTM-(Längen)-Zone mit einer Basic (VBA)-Funktion:
Function utm_zone(lon As Double, Optional lat As Double) As Integer
Dim utmz As Integer
If IsMissing(lat) Then lat = 0
While lon < 0
lon = lon + 360
Wend
While lon > 360
lon = lon - 360
Wend
utmz = Int((lon + 180) / 6) + 1
If (utmz = 31 And lat >= 56 And lat <= 64 And lon >= 3) Then
' Norway
utmz = 32
End If
If (lat >= 72 And lon >= 0 And lon <= 42) Then
' Svalbard / Spitzbergen
If (lon > 33) Then
utmz = 37
ElseIf (lon > 21) Then
utmz = 35
ElseIf (lon > 9) Then
utmz = 33
Else
utmz = 31
End If
End If
While utmz > 60
utmz = utmz - 60
Wend
utm_zone = utmz
End Function
Die Funktion utm_zone() erwartet in jedem Fall die geografische Länge in Grad östl. Greenwich als Argument (lon).

Das 2. Argument (lat) ist optional und gibt die geografische Breite in Grad nördl. Äquator an. Man muss dieses Argument nur dann angeben, wenn man auch die irregulären Zonen (Norwegen, Spitzbergen) berücksichtigen will.
Die Funktion berechnet zunächst die reguläre Zone und weist sie der Variablen utmz zu. Der Algorithmus ist rot hervorgehoben.

Danach werden mit bedingten Verzweigungen (IF...) die Ausnahmen (Norwegen) berücksichtigt.

Die Funktion gibt die UTM-Zone als ganze Zahl 1....60 zurück.

Anwendung

Dieses Kalkulations-Beispiel demonstriert die Anwendung der Basic-Funktion.

Im Bereich A3:A7 wird die geografische Länge vorgegeben - in diesem Fall 2°...6°.

In Spalte B wird mit dem Standard-Algorithmus die reguläre UTM-Zone berechnet.

In Zelle C1 wird optional die geografische Breite vorgegeben.

Im Bereich C3:C7 wird die UTM-Zone mit der Basic-Funktion berechnet. Das Ergebnis unterscheidet sich für geografische Breiten im Bereich 56°...64°, weil die Basic-Funktion auch die irreguläre norwegische Zone berücksichtigt.
Beispiel: Verwendung als 'Benutzerdefinierte Funktion' in einem Kalkulations-Programm:
 ABC
1Breite 60
2LängeUTM-Zone
32=GANZZAHL(($A3+180)/6)+1=utm_zone($A3;$C$1)
4=A3+1=GANZZAHL(($A4+180)/6)+1=utm_zone($A4;$C$1)
  ...
7=A6+1=GANZZAHL(($A7+180)/6)+1=utm_zone($A7;$C$1)
Die UTM-Zone wird sowohl mit dem Standard-Algorithmus (Spalte B) als auch mit der Basic-Funktion (Spalte C) berechnet. Die Formeln der Zellen B2 und C2 sind nach unten ausgefüllt.

UTM-Zone mit JavaScript

Jedes gängige Browser-Programm enthält einen → Javascript-Interpreter. Dieser Programm-Teil kann Quelltext der Programmiersprache Javascript lesen und ausführen.

Man kann Javascript-Programme in den Quelltext jeder Webseite einbetten.
Wenn sie den Quelltext einer Webseite ansehen (jeder Browser bietet diese Option), dann sind alle darin enthaltenen Javascript-Programme sichtbar.
Zur Ausführung von → Javascript-Programmen braucht man außer der Anforderung der Webseite keine weiteren Maßnahmen.

Es ist möglich, durch entsprechende Konfiguration des Browser-Programms die Ausführung vion Javascript zu unterbinden:
In diesem Fall funktioniert weder das hier vorgestellte Beispiel noch die zahlreichen weiteren Beispiele dieses Webs, in dem Javascript intensiv für interaktive Beispiele und Animationen verwendet wird.

Javascript-Funktion

Das Beispiel zeigt die Umsetzung des Algorithmus mit Javascript.

Die Minimal-Version ist einfach durchschaubar, jedoch sehr anfällig gegen Fehler. Sie arbeitet nur dann korrekt, wenn das Argument lon_deg eine Zahl im Bereich -180...+180 ist.

Die 'ausführliche' Version ist besser gegen Fehler bei der praktischen Anwendung abgesichert:

Optionale Argumente werden mit Hilfe der Eigenschaft arguments des Funktions-Objekts (hier utm_zone) identifiziert und - falls vorhanden - an Variable zugewiesen (hier an lon,lat).

Wenn nicht sicher ist, ob eine Variable als Text oder Zahl vorliegt, dann muss man sie (hier mit der Standard-Funktion parseFloat() ) in eine Zahl umwandeln.

Vorher muss man einen allfälligen Komma-Beistrich in einen Punkt umwandeln (hier mit einem → Regulären Ausdruck).

Mit Funktion isNaN() erkennt man, wenn ein Argument keine Zahl (Not-a-Number) enthält: In diesem Fall werden Standard-Werte eingesetzt. Alternativ kann man Fehler-Meldungen ausgeben.

Man erkennt schon an diesem einfachen Beispiel, dass der Aufwand zum Sichern eines Programms (gegen Fehl-Bedienung) jenen zur Ausführung der 'eigentlichen' Arbeit weit übersteigt. Das trifft nicht nur auf Javasscript zu sondern auf jede halbwegs professionelle Entwicklung.
Berechnung der UTM-(Längen)-Zone mit einer Javascript-Funktion: (Minimal-Version)
function utm_zone(lon) {
lon = parseFloat(lon);
var utmz = Math.floor((lon + 180) / 6) + 1;
return utmz;
}
Version mit optionalen Argumenten, Absicherung gegen Fehl-Bedienung und Berücksichtigung der irregulären Zonen:
function utm_zone() {
var lon = 0;
if (utm_zone.arguments.length > 0) {
lon = utm_zone.arguments[0];
lon = lon.replace(/,/,".");
lon = parseFloat(lon);
if(isNaN(lon)) {lon=0;}
while(lon<0) {lon+=360;}
while(lon>360) {lon-=360;}
}
var lat = 0;
if (utm_zone.arguments.length > 1) {
lat = utm_zone.arguments[1];
lat = lat.replace(/,/,".");
lat = parseFloat(lat);
if(isNaN(lat)) {lat=0;}
}
var utmz = Math.floor((lon + 180) / 6) + 1;
if(utmz==31 && lat>=56 && lat<=64 && lon>=3) {
utmz=32;
}
if(lat>=72 && lon>=0 && lon<=42) {
if(lon>33) {utmz=37;}
else if(lon>21) {utmz=35;}
else if(lon>9) {utmz=33;}
else{utmz=31;}
}
while(utmz>60) {utmz-=60;}
return utmz;
}

Anwendung

Es gibt viele verschiedene Möglichkeiten, um → Javascript-Programme und -Funktionen anzuwenden. Das Beispiel zeigt eine besonders einfache Version:

Setzen sie einen Hyperlink (HTML-Element <a>) an einer beliebigen Stelle innerhalb des <body> einer Webseite ein. Das Attribut href muss den Namen einer in der gleichen Datei enthaltenen Javascript-Funktion angeben (hier utm_test() )

Setzen sie ein HTML <script>-Element an einer beliebigen Stelle innerhalb des <head> einer Webseite ein.
Der Quelltext aller auf dieser Webseite verwendeten Javascript-Programme und -Funktionen muss innerhalb des <script>-Elements enthalten sein (hier hellblau unterlegt).

Die Javascript-Funktion utm_test() verwendet 3 Dialog-Fenster: In den beiden ersten Fenstern werden mit prompt() die gewünschten Werte der geografischen Länge und Breite eingegeben.
Danach wird die oben vorgestellte Funktion utm_zone() zur Berechnung verwendet.
Zuletzt wird mit alert() ein Fenster mit dem Ergebnis der Berechnung angezeigt.

Hier wird lediglich angedeutet, dass auch die oben vorgestellte Funktion utm_zone() innerhalb des <script>-Elements enthalten sein muss: Kopieren sie den Text einer der beiden Versionen an diese Stelle.
HTML-Quelltext mit einem HyperLink zum Start der Javascript-Funktion:
<body>
...
<a href="javascript:utm_test()"> Test </a>
...
</body>

Javascript-Quelltext (blau unterlegt), eingebettet in den HTML-Quelltext:
<head>
...
<script type="text/javascript">
// <![CDATA[
function utm_test() {
var lon_deg = prompt("Geogr.L\u00E4nge in Grad: ", "0");
var lat_deg = prompt("Geogr.Breite in Grad: ", "0");
var utmz = utm_zone(lon_deg,lat_deg);
alert("UTM-Zone("+lon_deg+","+lat_deg+") = "+utmz);
}
function utm_zone() {
// ...
}
// ]]>
</script>
</head>

Live-Anwendung: Klicken sie auf   Test
Kalkulations-Beispiel
Das auf dieser Seite vorgestellte ↑ Kalkulations-Beispiel verwendet ebenfalls Javascript-Funktionen zur Simulation des Verhaltens einer Tabellen-Kalkulation.

Im Gegensatz zu den hier gezeigten Beispielen werden jedoch keine Dialoge zur Anzeige der Daten verwendet, sondern die Daten werden mit Javascript → DOM-Funktionen aus Formular-Elementen gelesen und die Ergebnisse direkt in die Elemente der Webseite eingetragen.

Muster-Programm

Am Ende dieser Seite wird ein komplettes ↓ Webseiten-Programm zur Berechnung der UTM-Zone vorgestellt.
Das gleiche Programm wird zum Vergleich in je einer Javascript- und einer ↓ PHP-Version gezeigt.

Webseiten-Programme spielen in der modernen Informatik eine wichtige Rolle. Durch die Verwendung von Javascript lässt sich die Leistung solcher Programme oft um Größenordnungen gegenüber der traditionellen Programmierung mit ↓ PHP steigern.

UTM-Zone mit C/C++

Mit der Programmiersprache → C/C++ kann man Programme entwickeln, die besonders schnell ausgeführt werden. Sie wird daher für Anwendungen bevorzugt, die oft wiederholt werden, oder die aus einem anderen Grund zeitkritisch sind. Mit C/C++ werden 'ausführbare Programme' entwickelt (Linux-Binaries, Windows *.exe), die nicht auf andere Betriebssysteme portabel sind. Daher ist die Entwicklung mit C/C++ und insbesondere die Verwaltung der erzeugten Produkte teurer als für andere Programmiersprachen.

C/C++ Funktion

Das Beispiel zeigt ein komplettes → C++ Programm als Quelltext. Sie brauchen ein → Compiler-Programm, um den Text in ein ausführbares Programm des jeweiligen Betriebssystems zu übersetzen.

Der Quelltext besteht aus diesen Abschnitten:
Compiler-Direktive(n)
Deklaration der Funktionen
'Haupt'-Programm
Funktionen

Mit der Compiler-Direktive #include wird eine Funktions-Bibliothek (hier: Standard Input/Output) eingebunden.

Es folgt die Deklaration der beiden Funktionen. Sie legt die Typen der Funktionen und ihrer Argumente fest. Die Namen der beiden Funktionen sind indentisch (utm_zone), sie unterscheiden sich jedoch in ihren Argumenten (überladene C++ Funktion).

Das Haupt-Programm main() ist so einfach wie möglich gehalten. Es ist ein → Konsolen-Programm, d.h. man kann es sinnvoll nur in einem Konsolen-Fenster ausführen. Es dient zur Eingabe von geografischer Länge und Breite, sowie zur Ausgabe der berechneten UTM-Zone. Das Ergebnis wird mit jeder der beiden Funktionen berechnet:
Im 1. Fall wird aus der geografischen Länge die Standard-UTM-Zone berechnet.
Im 2.Fall wird die Zone aus Länge und Breite berechnet - unter Berücksichtigung der irregulären Zonen.
Damit wird gezeigt, wie man in C++ mit optionalen Argumenten arbeiten kann: Die Funktion wird überladen, d.h. es wird jeweils die nach Art und Anzahl der Argumente passende Variante der Funktion ausgeführt.

Zuletzt folgt der Quelltext der beiden gleichnamigen (utm_zone) Funktionen:

Die Funktion utm_zone() mit 1 Argument ergänzt lediglich die Breite lat_deg=0 und ruft die gleichnamige Funktion utm_zone() mit 2 Argumenten auf: Diese ist genauso programmiert wie alle anderen Beispiele: Der Text unterscheidet sich nur minimal von den anderen modernen Programmiersprachen.
Berechnung der UTM-(Längen)-Zone mit einem kompletten C++ Programm, z.B. in einer Text-Datei utm_zone.cpp
#include <stdio.h>

int utm_zone(double);
int utm_zone(double,double);

int main() {
int utmz;
double lon_deg,lat_deg;
printf("Laenge = ");
scanf("%lf",&lon_deg);
printf("Breite = ");
scanf("%lf",&lat_deg);
utmz = utm_zone(lon_deg);
printf("utm_zone(%lf) = %d\n",lon_deg,utmz);
utmz = utm_zone(lon_deg,lat_deg);
printf("utm_zone(%lf,%lf) = %d\n",lon_deg,lat_deg,utmz);
return 0;
}

int utm_zone(double lon) {
return utm_zone(lon,0.0);
}

int utm_zone(double lon,double lat) {
int utmz;
while(lon<0.0) {lon+=360.0;}
while(lon>360.0) {lon-=360.0;}
utmz = (int)((lon + 180.0) / 6.0) + 1.0;
if(utmz==31 && lat>=56.0 && lat<=64.0 && lon>=3.0) {
utmz = 32;
}
if(lat>=72.0 && lon>=0.0 && lon<=42.0) {
if(lon>33.0) {utmz=37;}
else if(lon>21.0) {utmz=35;}
else if(lon>9.0) {utmz=33;}
else{utmz=31;}
}
return utmz;
}

Anwendung auf Linux

Voraussetzung ist ein installierter → C/C++ Compiler, vorzugsweise der → GNU Compiler gcc bzw. gcc-c++
Dieses Programm ist in professionellen Linux-Versionen bereits installiert. Ansonsten installieren sie es mit der Software-Verwaltung der jeweiligen Distribution auf Mausklick.

Übersetzung der Quelltext-Datei in ein Linux-Programm:
Starten sie eine → Shell-Konsole und geben sie ein:
# c++ -o utm-zone utm_zone.cpp
Ersetzen sie utm_zone.cpp durch den Pfad zu ihrer C++ Quelltext-Datei. Stellen sie danach die Zugangs-Rechte nach Bedarf ein, z.B. das Recht auf Ausführung (execute) des erzeugten Programms durch alle User.

Ausführung des erzeugten Programms an einer Shell-Konsole:
# utm-zone
Ersetzen sie utm-zone durch den Namen des compilierten Programms (falls sie einan anderen verwendet haben), bzw. durch den kompletten Pfad zum Programm.

Anwendung auf Windows

Voraussetzung ist ein installierter → C/C++ Compiler, vorzugsweise → MinGW. Sie müssen dieses Programm selbst installieren, oder es wurde bereits mit einer C/C++ Entwicklungs-Umgebung installiert (z.B. → Code::Blocks oder → Eclipse).

Übersetzung der Quelltext-Datei in ein Windows-Programm:
Starten sie eine → Konsole cmd.exe und geben sie ein:
C:\> c++ -o utm-zone.exe utm_zone.cpp
Ersetzen sie utm_zone.cpp durch den Pfad zu ihrer C++ Quelltext-Datei.

Ausführung des erzeugten Programms an einer Windows-Konsole:
C:\> utm-zone
Ersetzen sie utm-zone durch den Namen des compilierten Programms (falls sie einan anderen verwendet haben), bzw. durch den kompletten Pfad zum Programm.
Das Überladen von Funktionen und Methoden ist nur in der modernen Variante C++ möglich, nicht in der klassischen Programmiersprache C. Achten sie bei Ausführung der Programme darauf, Gleitkomma-Zahlen nur mit Komma-Punkt zu formulieren, nicht mit Beistrich !

UTM-Zone mit Perl

Die moderne Programmiersprache → Perl ist in jedem gängigen Linux Betriebssystem installiert und wird dort vorwiegend für Verwaltungs-Programme eingesetzt.

Ein anderer Schwerpunkt der Anwendung sind WebServer-(CGI)-Hilfsprogramme. Das hier gezeigte Beispiel ist ein einfaches Konsolen-(CLI)-Programm und erfordert keinen Webserver.
Auf Windows-Systemen muss man Perl selbst installieren. Die Programme sind kostenfrei und erfordern keine besondere Konfiguration.
Diese Eigenschaft macht Perl zu einer wertvollen Ergänzung (auch) von Windows-Systemen.

Perl Programme sind portabel, d.h. sie laufen ohne Änderung auf jedem gängigen PC.
Das Beispiel zeigt ein komplettes → Perl Programm als Quelltext. Sie brauchen ein Perl Interpreter-Programm, um den Text zu übersetzen und auszuführen.

Der Quelltext besteht aus diesen Abschnitten:
Shebang-Zeile
Anweisung strict
Haupt-Programm
Funktion (sub)

Die 1. Zeile (Shebang) bezeichnet den Pfad zum Interpreter-Programm. Das ist auf Linux allgemein üblich, auf Windows nur bei Verwendung als Webserver-(CGI)-Programm notwendig.

Die Anweisung use strict; ist nicht notwendig, jedoch für jedes Perl-Programm sehr empfehlenswert.. Sie erzwingt die Deklaration aller Variablen.

Das Haupt-Program ist ein → Konsolen-Programm, d.h. man kann es sinnvoll nur in einem Konsolen-Fenster ausführen. Es dient zur Eingabe von geografischer Länge und Breite, sowie zur Ausgabe der berechneten UTM-Zone. Das Ergebnis wird mit der gleichen Funktion 2mal berechnet:
Im 1. Fall wird aus der geografischen Länge die Standard-UTM-Zone berechnet.
Im 2.Fall wird die Zone aus Länge und Breite berechnet - unter Berücksichtigung der irregulären Zonen.

Zuletzt folgt der Quelltext der Funktion utm_zone(), die ähnlich programmiert ist wie alle anderen Beispiele dieser Seite.
Die Übergabe der Argumente erfolgt mit dem Array @_
Durch Addition von 0 wird jedes Argument in eine Zahl umgewandelt, und ein nicht erhaltenes (optionales) Argument (hier $lat) auf einen Standard-Wert (default) gesetzt.
Berechnung der UTM-(Längen)-Zone mit einem kompletten → Perl Programm, z.B. in einer Text-Datei utm_zone.pl
#!/usr/bin/perl
use strict;

my($lon_deg,$lat_deg,$utmz);
print "Laenge = ";
$lon_deg = <STDIN>+0;
print "Breite = ";
$lat_deg = <STDIN>+0;
$utmz = utm_zone($lon_deg);
print "utm_zone($lon_deg) = $utmz\n";
$utmz = utm_zone($lon_deg,$lat_deg);
print "utm_zone($lon_deg,$lat_deg) = $utmz\n";

sub utm_zone {
my($lon,$lat)=@_;
$lon+=0;
while($lon<0) {$lon+=360;}
while($lon>360) {$lon-=360;}
$lat+=0;
my $utmz = int(($lon + 180) / 6) + 1;
if($utmz==31 && $lat>=56 && $lat<=64 && $lon>=3) {
$utmz=32;
}
if($lat>=72 && $lon>=0 && $lon<=42) {
if($lon>33) {$utmz=37;}
elsif($lon>21) {$utmz=35;}
elsif($lon>9) {$utmz=33;}
else{$utmz=31;}
}
return $utmz;
}

Anwendung auf Linux

Öffnen sie eine Shell-Konsole und geben sie den Namen des Perl-Programms (bzw. den Pfad zum Programm an, z.B.
# utm_zone.pl
# /home/ich/utm_zone.pl
In manchen Fällen scheint das Perl Interpreter-Programm empfindlich auf das Zeilen-Ende zu reagieren. Beenden sie jede Zeile im Perl-Quelltext mit dem Zeilen-Ende des jeweiligen Betriebssystems (Apple CR, Linux LF, Windows CR+LF).
Zur Umwandlung ist u.a. das kostenfreie Windows-Programm Notepad++ besonders geeignet.

Anwendung auf Windows

Voraussetzung ist ein installierter und sauber konfigurierter → Perl Interpreter, (perl.exe). Je nach Güte der → Konfiguration genügt die Angabe des Datei-Names oder des Pfades. Bei sehr mangelhafter Konfiguration müssen sie den Pfad zum Interpreter und zum Perl-Programm angeben, z.B.
C:\> utm_zone
C:\> utm_zone.pl
C:\> c:\programme\perl\bin\perl.exe c:\utm_zone.pl

UTM-Zone mit PHP

Die moderne Programmiersprache → PHP ist auf jedem gängigen Server-PC installiert und wird dort für WebServer-(CGI)-Hilfsprogramme eingesetzt. Fast alle modernen Web-Programm-Pakete sind mit PHP programmiert. Die Sprache ist vergleichsweise einfach zu erlernen und anzuwenden. PHP-Kenntnisse sind weit verbreitet, daher kann man mit PHP rasch und kostengünstig entwickeln.

Es ist möglich, jedoch wenig bekannt, PHP genauso wie Perl als → Konsolen-(CLI)-Programm einzusetzen. Das hier gezeigte Beispiel folgt allerdings den typischen Anwendungen und erfordert daher einen → Webserver.
Auf einem eigenen Linux Server-PC installiert man PHP vorzugsweise als Modul des Webservers (z.B. apache2-mod-php5).
Auf Windows-Systemen muss man PHP (kostenfrei) selbst installieren, vorzugsweise als Interpreter-Programm php.exe
Die Programme (Module) müssen vor der Anwendung → konfiguriert werden.

PHP Programme sind portabel, d.h. sie laufen ohne Änderung auf jedem gängigen (Server)-PC.

Wenn sie nicht über einen eigenen Server-PC verfügen, dann verwenden sie einen → virtuellen Server-PC: Das ist einfach, flexibel und kostenfrei !
Die Funktion utm_zone() erwartet als Argumente die geografische Länge ($lon) und Breite ($lat) in Grad. Wenn die Breite nicht angegeben ist, oder wenn beide Argumente fehlen, dann werden die in der ersten Programm-Zeile angegebenen Standard-Werte verwendet.

Die Programmierung folgt den übrigen Beispielen dieser Seite. Sie berücksichtigt auch die irregulären Zonen.

Der Quelltext muss an einer beliebigen Stelle in der PHP-Datei enthalten sein. Alternativ fasst man diese und andere Funktionen in einer eigenen Datei zusammen (z.B. carto_lib.php) und bindet diese Funktions-Bibliothek in jedes PHP-Programm ein, welches eine der Funktionen verwendet, z.B. mit der Anweisung
include_once 'carto_lib.php';

Die Funktion wird von dem unten vorgestellten kompletten ↓ PHP Muster-Programm verwendet.
Berechnung der UTM-(Längen)-Zone mit einer PHP-Funktion:
<?php
function utm_zone($lon=0,$lat=0) {
while($lon<0) {$lon+=360;}
while($lon>360) {$lon-=360;}
$utmz = floor(($lon + 180) / 6) + 1;
if($utmz==31 && $lat>=56 && $lat<=64 && $lon>=3) {
$utmz = 32;
}
if($lat>=72 && $lon>=0 && $lon<=42) {
if($lon>33) {$utmz=37;}
elseif($lon>21) {$utmz=35;}
elseif($lon>9) {$utmz=33;}
else{$utmz=31;}
}
return $utmz;
}
?>

Installation

Zur praktischen Anwendung kopieren sie den Quelltext des kompletten ↓ PHP-Programms in eine Text-Datei (z.B. utm_zone.php).
Verschieben sie die Datei in das Arbeits-Verzeichnis eines → Webservers, z.B. (Linux, Windows):
/srv/www/htdocs/utm_zone.php
C:\Programme\Apache\...\htdocs\utm_zone.php
Stellen sie auf Linux die Zugangs-Rechte ein, z.B. das Recht zu Lesen (read) für alle User.

Anwendung

Voraussetzung ist, dass sie die vom Webserver verwalteten Seiten mit einem Browser anzeigen können, z.B. die übliche Startseite
http://localhost/index.html
Ersetzen sie localhost durch den Namen oder die → IP-Adresse des Webservers.
Ersetzen sie den Namen der Startseite durch jenen des PHP-Programms, z.B.
http://localhost/utm_zone.php

Öffnen sie PHP-Programme nicht als Datei, d.h. mit Doppelklick oder mit einem Menü-Befehl wie Datei | Öffnen... des Browsers: Das funktioniert nur mit statischen Webseiten *.html, nicht jedoch mit dynamischen Webseiten *.php

Bei häufiger Verwendung ist es sinnvoll, einen Hyperlink zum Programm zu legen.
Beispiel: Fügen sie diesen Text an einer beliebigen Stelle in das <body>-Element einer Webseite (z.B. der Startseite index.html):
<a href="utm_zone.php">UTM-Zone</a>
Dieses einfache Beispiel setzt voraus, dass sich die PHP-Datei im gleichen Verzeichnis (Ordner) befindet wie die Startseite index.html- In jedem anderen Fall tragen sie an Stelle des Datei-Namens den relativen Pfad zur gewünschten Datei ein.

Muster-Programm

Am Ende dieser Seite wird ein komplettes ↓ Webseiten-Programm zur Berechnung der UTM-Zone vorgestellt.
Das gleiche Programm wird zum Vergleich in je einer ↑ Javascript- und einer PHP-Version gezeigt.

Webseiten-Programme spielen in der modernen Informatik eine wichtige Rolle. Vergleichen sie die Programmierung und die Leistung der beiden Programm-Versionen.

Muster-Programm

Webseiten-Programm

In der modernen Informatik werden immer mehr Aufgaben von 'gewöhnlichen' Programmen zu Web-Programmen verlagert. Man kann schon jetzt sehr viele Arbeiten von traditionellen Programmen (z.B. von solchen der Office-Pakete) auf Webseiten verlagern.

Klicken sie Live-Anwendung, um das Muster-Programm in der Javascript-Version zu starten.

In diesem Kapitel wirden dazu ein einfaches Beispiel vorgestellt. Die zu lösende Aufgabe ist die Berechnung der UTM-Zone aus der geografischen Länge. Sie können den Quelltext in 2 verschiedenen Versionen anzeigen:
HTML + Javascript (utm_zone.html)
PHP (utm_zone.php)

PHP-Programm

Das Beispiel zeigt ein einfaches, aber typisches PHP-(Script)-Programm:
In der Text-Datei (z.B. utm_zone.php) ist sowohl der HTML-Quelltext einer einfachen Webseite enthalten, als auch mehrere kleine PHP-Programm-Teile, die jeweils zwischen die Marken <?php und ?> eingeschlossen sind.
Beim ersten Start wird lediglich ein Formular zur Eingabe der Daten angezeigt.
Mit dem Absenden des Formulars wird das gleiche Programm aufgerufen, d.h. es wird die gleiche Webseite angezeigt: Diesmal wird jedoch zuerst der erhaltene Auftrag berechnet, danach wird wieder das Formular angezeigt. Man kann in der Folge beliebig viele weitere Aufträge berechnen.

Der Quelltext besteht aus diesen Abschnitten:
PHP-Funktion utm_zone()
Deklarationen und HTML <head>-Element
Titelzeile als HTML <h3>-Element
Decodierung der erhaltenen Argumente mit PHP
Berechnung der UTM-Zone und Ausgabe als HTML-Text
Formular zur Eingabe eines neuen Auftrags

Das → Globale Array $_GET wird analysiert, um allenfalls erhaltene Auftrags-Daten zu decodieren. Details zum → Senden von HTML-Formularen und zum → Empfang mit PHP.

Wenn Auftrags-Daten (GET-Argumente) vorliegen, dann wird das Ergebnis berechnet und als HTML-Text in die Webseite eingesetzt.

In jedem Fall wird am Ende der Webseite ein Formular angezeigt, mit dem man an das gleiche Programm weitere Aufträge erteilen kann.
Die zuletzt verwendeten Daten werden in die Formular-Felder eingetragen, weil dieses Verhalten in der Praxis oft erwünscht ist.

Javascript-Programm

Das Beispiel zeigt eine einfache Webseite, die jedoch mit Hilfe der darin enthaltenen Javascript-Programme die gleiche Aufgabe erledigt wie das PHP-Programm.
In der Text-Datei (z.B. utm_zone.html) ist nur HTML-Quelltext enthalten. In das <head>-Element ist ein <script>-Element eingebettet, darin sind die verwendeten Javascript-Programme enthalten.
Beim ersten Start wird lediglich ein Formular zur Eingabe der Daten angezeigt.
Mit dem Absenden des Formulars wird die gleiche Webseite angezeigt: Diesmal wird jedoch zuerst der erhaltene Auftrag berechnet, danach wird wieder das Formular angezeigt. Man kann in der Folge beliebig viele weitere Aufträge berechnen.

Der Quelltext besteht aus diesen Abschnitten:
HTML <head>-Element mit einem umfangreichen <script>-Element
Darstellung des Ergebnisses im <div>-Element mit dem id-Attribut "result"
Formular zur Eingabe eines neuen Auftrags

Die Javascript-Programme werden erst nach dem vollständigen Laden der Webseite ausgeführt, weil sie Daten in Elemente der Seite eintragen, die zu diesem Zeitpunkt bereits existieren müssen. Sie werden daher durch das onload-Ereignis (→ Event) des <body>-Elements gestartet.

Wenn Auftrags-Daten (GET-Argumente) vorliegen, dann wird das Ergebnis berechnet und mit → DOM-Methoden in die bereits vorhandenen Elemente eingetragen. Nur in diesem Fall wird das ansonsten unsichtbare Resultat-Element mit → CSS-Methoden sichtbar gemacht.

Das Formular am Ende der Webseite dient zum Eintragen neuer Daten. Auch in diesem Fall werden die zuletzt verwendeten Daten als Vorgabe eingetragen.

Vorteile von PHP

Einfach zu programmieren. Viele EntwicklerInnen beherrschen die erforderlichen Methoden.

PHP bietet wesentlich mehr Möglichkeiten, z.B. Zugriff auf andere Resourcen des Servers, auf Datenbanken, andere Webseiten usw. Das hat jedoch für einfache Arbeiten wie die hier vorgestellte keine Bedeutung, weil man diese Möglichkeiten nicht braucht.

Der Quelltext des PHP-Programms ist für AnwenderInnen nicht zugänglich. Wenn das Programm vertrauliche Daten enthält, dann muss man Server-(CGI)-Hilfsprogramme verwenden, und Javascript ist ausgeschlossen.

Vorteile von Javascript

Minimale Belastung des Servers: Der Server muss kein Programm ausführen, sondern sendet eine einfache (gleichbleibende) Text-Datei.

Die Gesamt-Leistung des Systems steigt mit der Anzahl jener Clients, die eine derartige dynamische Webseite anfordern, weil jeder Client einen wesentlichen Teil der Arbeit übernimmt.

Die Datei wird von jedem Client nur ein einziges Mal vom Server angefordert. Jede Wiederholung des Programms erfolgt ausschließlich am Client-PC.

Die Datei wird im Cache-Speicher jedes → Proxy-Servers gespeichert. Sie wird daher in jedes lokale Netzwerk nur einmal übertragen, auch wenn sie dort von zahlreichen PC angefordert wird.

Die Transport-Zeit zwischen Server und Client fällt nur einmal an. Jede Wiederholung findet ohne Transport am eigenen PC statt.

Man kann durch Manipulation keinen Schaden an fremden PC (insbesondere am Server) anrichten. Es ist zwar leicht, den am eigenen PC vorhandenen HTML+Javascript Quelltext zu manipulieren, damit kann man sich jedoch nur selbst schaden...

Man kommt notfalls auch ohne Webserver aus, d.h. man kann Webseiten mit Javascript-Programmen am eigenen PC direkt mit dem Browser öffnen und ausführen.

Nachteile von PHP

Hohe Belastung des Servers: Jede einzelne Berechnung wird am Server-PC ausgeführt. Das wirkt sich besonders unangenehm aus, wenn das Programm oft angefordert und von den AnwenderInnen oft wiederholt wird. Dieser Nachteil wiegt schwer, weil er sich auf alle User auswirkt - auch auf jene, die ganz andere Webseiten anfordern.

Die Gesamt-Leistung des Systems sinkt mit der Anzahl der Clients: Die Server-Leistung wird auf alle laufenden Anforderungen aufgeteilt, während die Clients 'arbeitslos' warten.

Lange Transport-Wege: Jede Anforderung wird (als → HTTP GET-Request) vom Client zum Server gesendet, dort verarbeitet und das Ergebnis wieder zurück zum Client transportiert. Das spielt im eigenen lokalen Netzwerk keine Rolle, kann aber - je nach der aktuellen Auslastung - im Internet empfindlich lang dauern.

Man kann PHP-Programme manipulieren. Angreifer können schlecht abgesicherte PHP-Programme nutzen, um in einen Server einzudringen. Dagegen hilft nur gute Ausbildung der PHP-EntwicklerInnen und sorgfältige Kontrolle der von den Clients erhaltenen Daten.

Ein Webserver ist unverzichtbar. Man kann PHP-Programme nicht direkt mit einem Browser ausführen.

Nachteile von Javascript

Schwieriger oder zumindest ungewohnt zu programmieren. Einfache Javascript-Kenntnisse sind zwar häufig verfügbar, die Kenntnis der erforderlichen Methoden (→ Reguläre Ausdrücke, → DOM-Funktionen, → Events, → Ajax, ...) ist jedoch nur bei fortgeschrittenen EntwicklerInnen verbreitet. Man findet sogar gelegentlich EntwicklerInnen, die Javascript ablehnen, weil das angeblich keine Programmiersprache ist. Diese Einstellung bestraft sich selbst, man sollte sie den KundInnen jedoch rechtzeitig bekanntgeben...

Es ist möglich, durch Konfiguration des Browsers die Ausführung von Javascript zu unterbinden. Das ist prinzipiell nicht empfehlenswert. Allenfalls kann man sich damit jedoch nur selbst schaden. Als Kompromiss bietet jeder gängige Browser die Möglichkeit, Javascript für ausgewählte Server zu erlauben - mindestens für den eigenen Server des lokalen Netzwerks.

Umfangeiche Programme brauchen mehr Transport-Kapazität, da man sie zusammen mit der Webseite vom Server zum Client senden muss. Das wirkt sich jedoch nur bei Programmen mit tausenden Anweisungen merkbar aus - In diesem Fall verwendet man ohnehin Server-Programme und teilt deren Quelltext auf mehrere Dateien auf.

Entscheidung

Je nach Art der auszuführenden Arbeit sollte man die Vor- und Nachteile von Server-Programmen (→ Perl, → PHP, ...) oder Client-Programmen ( → Javascript, → XSL) kritisch abwägen.

Die Programmiersprache → Java bietet im Prinzip beide Möglichkeiten: Man kann damit sowohl Server-Programme (Servlets) als auch Client-Programme (Applets) herstellen.

Im Zweifel sollte man immer den Server entlasten und die Arbeit mit den (ansonsten wenig ausgelasteten) Clients (Arbeits-PC) ausführen. Damit kann man die Leistung des gesamten Systems meist erheblich steigern.
Das gilt allerdings nur für heute typische Architekturen: Arbeits-PC mit enormer Leistung, die allerdings meist brach liegt oder für unproduktive Arbeit (Firewall, Viren-Schutz, überladene Grafik, ...) verwendet wird. Wenn sich in Zukunft einfache, billige Arbeitsstationen oder gar passive Terminals durchsetzen sollten, dann muss man die Gesamt-Leistung anders optimieren.

Es ist möglich, die Vorteile von Server- und Client-Programmen zu kombinieren: Am Server führt man (nur) die unbedingt notwendigen Arbeiten aus, z.B. den Zugriff auf → Datenbanken. Alle weiteren Arbeiten delegiert man an die Clients, z.B. Rechnungen, User-Interface, Sortieren, Erstellung von ( → SVG)-Diagrammen, Interaktion, Animation, usw.

Die Möglichkeiten von Javascript werden durch die moderne → Ajax-Technologie bedeutend erweitert: Sie macht es möglich, mit Javascript-(Client)-Programmen Daten, Werkzeuge und beliebige andere Objekte vom Server (nach Bedarf) anzufordern. Auch diese Technik erlaubt eine effiziente Kombination von Client- und Server-Leistung.