text: Geographische Längen- und Breitenangaben - - Lecture notes
  Falls Sie die erste Aufgabe bearbeitet haben, arbeiten Sie einfach an Ihrem Projekt weiter. Ansonsten lesen Sie bitte in der ersten Aufgabe die Anleitung zum Projektimport sowie die weiteren Hinweise zum Hochladen in das Ilias System.
  Implementierung einer Klasse zur Darstellung und Umrechnung von Winkelangaben in geographischen Koordinaten. Die Winkeldarstellung durch Grad, Winkelminuten und -sekunden erlaubt z.B. die Breitenangabe von Stuttgart als 48 Grad, 46 Winkelminuten und 56 Winkelsekunden:
  Geographische Breite Stuttgart: 48° 46´ 56´´
  360° Grad dem Vollkreis.
  60´ Winkelminuten einem Grad (1°).
  60´´ Winkelsekunden einer Winkelminute (1´).
  Neben dieser Grad/Minuten/Sekunden Darstellung gibt es auch die dezimale Graddarstellung: Diese geht ebenfalls von einem Vollkreis zu 360° aus. Allerdings werden die Minuten- und Sekundenanteile als Dezimalbruch angegeben. Die geographische Breite 48° 46´ 56´´ von Stuttgart ergibt sich in dieser Darstellung daher zu:
  \[48,782222 = 48 + {46\over 60} + {56 \over {60 \times 60}}\]
  Oder allgemein mit Dezimalgrad d, Grad g, Winkelminuten m und Winkelsekunden s:
  \[d = g + {m\over 60} + {s \over {60 \times 60}}\]
  Implementieren Sie die bereits vorhandene, bislang leere, Klasse de.hdm_stuttgart.mi.sd1.aufgabe2.Geo. Beachten Sie die Unit Tests in de.hdm_stuttgart.mi.sd1.test.aufgabe2.Test_Geo. Folgende Eigenschaften sollen gelten:
  Instanzen von Geo sollen durch Angabe von Grad, Winkelminuten und -sekunden erzeugt werden können:
  final Geo stuttartBreite = new Geo(48, 46, 56);
  Grad, Minuten und Sekunden sollen als int in beliebigen Scopes sichtbar sein:
  final int grad = stuttartBreite.grad,
  minuten = stuttartBreite.minuten,
  sekunden = stuttartBreite.sekunden;
  Es soll eine Umrechnung in dezimale Winkelangaben möglich sein:
  final double breiteDezimal = stuttartBreite.getDezimal();
  Eine Instanz von Geo soll alternativ durch Angabe dezimaler Winkelwerte erzeugt werden können:
  final Geo greenwichBreite = new Geo(51.477222);
  Sie müssen zunächst Werte wie 51.477222 in den ganzzahligen Gradanteil 51 und den gebrochenen Anteil 0.477222 zerlegen. Dazu kann die Methode floor() in Zusammenarbeit mit einer cast Operation verwendet werden. Dies erlaubt Ihnen die Umkehrung der Formel \(d = g + {m\over 60} + {s \over {60 \times 60}}\) zur Zerlegung eines Dezimalgradwerts d in Grad, Winkelminuten und -sekunden.
  Instanzen von Geo sollen im Standard wie folgt ausgegeben werden:
  final Geo stuttartBreite = new Geo(48.782222);
  System.out.println(stuttartBreite);
  48° 46´ 56´´
  Das Format der Ausgabe soll global für alle Instanzen auf dezimale Graddarstellung umgestellt werden können. Dabei sollen genau sechs Nachkommastellen ausgegeben werden:
  Geo.nutzeDezimalStandard(true);
  48.782222
  Nutzen Sie DecimalFormat mit den Methoden setMaximumIntegerDigits(int) und setMaximumFractionDigits(int).
  Instanzen von Geo sollen auf Wertgleichheit geprüft werden können:
  g1 =      new Geo(33, 53, 19),
  g2 =      new Geo(45, 22, 13),
  g1_klon = new Geo(33, 53, 19);
  System.out.println(g1.equals(g1_klon));
  Implementieren Sie auch eine kompatible hashCode() Methode.
  Winkelangaben sollen aufsteigend sortierbar sein:
  stuttartBreite = new Geo(48, 46, 56),
  beirutBreite = new Geo(33, 53, 19),
  atlantaBreite = new Geo(33, 44, 56);
  final Geo[] breitenAngaben =
  {stuttartBreite, beirutBreite, atlantaBreite};
  Arrays.sort(breitenAngaben);
  System.out.println("Breitengrade Stuttgart, Beirut und Atlanta"
  + "\naufsteigend sortiert:");
  for (final Geo g: breitenAngaben) {
  Breitengrade Stuttgart, Rom und Greenwich
  41° 53´ 30´´
  51° 28´ 38´´
  Instanzen von Geo sollen unveränderbar (immutable) sein. Der folgende Code soll beispielsweise zu einem Compile time Fehler führen:
  final Geo g = new Geo(22);
  g.sekunden = 44;
  Sie finden obige Beispiele als auskommentierten Code in der Klasse de.hdm_stuttgart.mi.sd1.aufgabe2.extra.GeoUsageSample. Sobald Ihre Geo Klasse fertig implementiert ist, können Sie die Kommentare entfernen und sollten bei Ausführung folgendes Ergebnis sehen:
  Stuttgart Breite Grad:48
  Stuttgart Breite Minuten:46
  Stuttgart Breite Sekunden:56
  Dezimale Breitenangabe Stuttgart: 48.782222222222224
  Breitengrade Stuttgart, Beirut und Atlanta
  33° 44´ 56´´
  33° 53´ 19´´
  Standarddarstellung Breite Stuttgart:48° 46´ 56´´
  Dezimaldarstellung Breite Stuttgart:48.782222
  Laden Sie die Lösung dieser Aufgabe als gemeinsamen Projekt Export mit der ersten Aufgabe "Klassenmethoden" gemäß den dortigen Hinweisen hoch. Falls Sie die erste Aufgabe ebenfalls bearbeitet haben, enthält Ihr Upload die Lösungen zu beiden Aufgaben.