Dieses Tool berechnet die Entfernung sowie die Richtung zwischen zwei Locatorfelder.
Im Amateurfunk werden keine Koordinaten, sondern Locatorfelder genutzt. Dies ist ein Raster über den ganzen Globus. Das Locatorfeld um Berlin und Brandenburg herum hat die Buchstaben und Ziffern JO62. Hinzu kommen noch die Kleinfelder mit den Buchstaben A bis X. Dies sind die Zeilen und Spalten im Rastergitter.
Berlin hat z.B. den Locator JO62QM. (Zeile Q, Spalte M) und noch andere, denn Berlin ist doch ein bisschen größer.
Rom hat den Locator JN61GV und ist von der Stadt Brandenburg an der Havel (JO62GJ) nur 1166 Kilometer entfernt und liegt in 180 Grad (das ist Süden). Der Amateurfunker dreht also seine Antenne auf 180 Grad.
Die Entfernungsangaben werden auch bei Wettbewerben (Contesten) genutzt. Dann werden aus den Kilometern – Punkte. Und 1166 Punkte sind schon ein guter Wert.
Ein Download der Installationsdateien findet du hier: DL1RLB/MyLocator · GitHub
Aber dort findest du auch den kompletten C# Code.
GitHub – DL1RLB/MyLocator: Berechnet den Locatorstandort
Das Programm nutzt die Klasse von Yves Goergen, http://unclassified.software/source/maidenheadlocator Copyright (c) 2011 zur Berechnung und basiert auf einem Perl-Modul von Dirk Koopman, G1TLH, vom 07.11.2002. Quelle: http://www.koders.com/ Die Kompassrose, als freies Tool, wurde in "C# Helper" (http://www.csharphelper.com/howtos/howto_horizontal_compass.html) beschrieben.
In der Form werden zwei Textboxen (Heimatlocator und Ziellocator) angelegt. Das Ergebnis wird in den anderen Textboxen und Labels angezeigt.
Die Klasse „MaidenheadLocator“ berechnet die Entfernung, die Richtung aber auch die Koordinaten werden berechnet. Der Locator kann auch aus den Koordinaten ermittelt werden. Die Werte müssen mit Komma eingetragen werden. Es gibt mehrere Onlinekarten wo der Locator angezeigt werden kann. Mein Beispiel zeigt die Karte von HA8TKS.
public void Berechnen_Click(object sender, EventArgs e) { #region Entfernung und Richtung berechnen aus zwei Textfeldern // die beiden Locatoreingaben holen und in der Klasse MaidenheadLocator ausrechnen lassen double entfernung = MaidenheadLocator.Distance(tbHeimatlocator.Text, tbZiellocator.Text); // Richtung berechnen aus den zwei Textfeldern double richtung = MaidenheadLocator.Azimuth(tbHeimatlocator.Text, tbZiellocator.Text); // Heimatlocator aus dem Textfeld string heimatLocator = tbHeimatlocator.Text; // Koordinaten vom Lacator aus dem Textfeld des Heimatlocators LatLng heimatkoordinaten = MaidenheadLocator.LocatorToLatLng(tbHeimatlocator.Text); // Koordinaten vom Lacator aus dem Textfeld des Ziellocators LatLng zielkoordinaten = MaidenheadLocator.LocatorToLatLng(tbZiellocator.Text); // Breite/Länge in Locator konvertieren string myLoc = MaidenheadLocator.LatLngToLocator(52.41, 12.55); //Richtungswert auf 2 Kommastellen runden tbRichtung.Text = Math.Round(double.Parse(richtung.ToString()), 2).ToString() + " °"; // EntfernungsWert auf 2 Kommastellen runden tbEntfernung.Text = Math.Round(double.Parse(entfernung.ToString()), 2).ToString() + " km"; // in Textfeld eintragen lblZielKoordinaten.Text = zielkoordinaten.ToString(); // in Textfeld eintragen lblEigeneKoordinaten.Text = heimatkoordinaten.ToString(); // umwandeln der Gradanzahl in eine Ganzahlige Zahl CurrentValue = Convert.ToInt32(richtung); // in Label eintragen lblDegrees.Text = CurrentValue.ToString() + " °"; // neuzeichnen der Kompassnadel bei Änderung picHeading.Refresh(); } #endregion
Im Code wird noch der runde Kompass sowie der Zeiger im Kompass gezeichnet. Zusätzlich habe ich eine Regex-Prüfung eingebaut. Denn nicht alle Locatordaten sind richtig. Die ersten beiden Buchstaben vom Locator reichen nur von A bis R und der letzten Buchstaben im Raster ist das X. Das heißt Y und Z führen zu einer Exeption (Absturz des Programms). Bei Eingabe von falschen Zeichen wird der Text rot.
#region Heimatlocator Prüfen auf Richtigkeit der eingegebenen Buchstaben private void homeLoc_TextChanged(object sender, EventArgs e) { if (new Regex("^[A-R,a-r]{2}[0-9]{2}[A-X,a-x]{2}$").IsMatch(tbHeimatlocator.Text)) { tbHeimatlocator.Enabled = true; tbHeimatlocator.ForeColor = Color.Black; } else { //MessageBox.Show("Dieser Locator gibt es nicht!"); tbHeimatlocator.ForeColor = Color.Red; } } #endregion
Die Messagebox habe ich wieder ausgeschaltet. Denn die kommt bei jedem neuen Buchstaben, weil ich diese Prüfung während der Eingabe prüfen. Das Prüfe ich natürlich auch auf den Ziellocator.
Jetzt habe ich eine Grundlage für weiter Anpassung und Verbesserungen.
- Speichern des zuletzt eingegebenen Heimatlocators – Erledigt
- Locator ermitteln aus den Koordinaten- Erledigt
- Link zur Anzeige des Locators oder der Koordinaten auf einer Karte- Erledigt
- Zeiger als ein Beam (Antenne)
- weitere Gradzahlen in der Kompassrose, z.B. 45 Grad
- Fehlerbehebung Exeption bei falschen Werten
Wer mehr über Locatoren wissen will schaut bei Wikipedia nach. Dort findet man auch die C# Klasse.
Quellenangaben im Text.