C# :: Aufgabe #399 :: Lösung #1
3 Lösungen
#399
Stände von Koordinaten (Standort) im Umkreis von x km ermitteln
Anfänger - C#
von Gustl
- 21.05.2021 um 17:06 Uhr
Erstelle eine Funktion, eventuell mit Hilfe einer Datenbank, welche über die Parameter Location (Latitude & Longitude) und Radius in Kilometer alle Städte in dem Umkreis mit den Koordinaten ausgibt.
Oder eine Liste mit den Koordinaten in diesem Umkreis. Somit können dann die Städte in einer GeoDatenbank ermittelt werden.
Oder eine Liste mit den Koordinaten in diesem Umkreis. Somit können dann die Städte in einer GeoDatenbank ermittelt werden.
#1
von JKooP (18090 Punkte)
- 21.05.2021 um 19:59 Uhr
NET 5.x; C# 9.x; VS-2019
C#-Code
using System; using System.Collections.Generic; using System.Linq; const double AverageDistance = 111.3; const double Rad = Math.PI / 180; // 0.01745 Dictionary<string, Location> locations = new() { { "Frankfurt Main", new Location(50.053764, 8.637086) }, { "Mainz", new Location(50.001231, 8.276251) }, { "Darmstadt", new Location(49.872775, 8.651177) }, { "Würzburg", new Location(49.79245, 9.932966) }, { "Heidelberg", new Location(49.398752, 8.672434) }, { "Mannheim", new Location(49.489591, 8.467236) }, { "Stuttgart", new Location(48.778449, 9.180013) }, }; var compare = new Location(49.00689, 8.403653); // Karlsruhe var radius = 70.0; locations.Where(x => Distance(x.Value, compare) <= radius).Select(x => new {loc = x.Key, dis = Math.Round(Distance(x.Value, compare),1) }) .ToList().ForEach(x => Console.WriteLine($"{x.loc}: {x.dis} km")); static double Distance(Location loc1, Location loc2) { var lat = Math.Cos((loc1.Lat + loc2.Lat) / 2 * Rad); // Verbesserungswert Längenkreise var x = AverageDistance * lat * (loc1.Lon - loc2.Lon); var y = AverageDistance * (loc1.Lat - loc2.Lat); return Math.Sqrt(x * x + y * y); } record Location(double Lat, double Lon);
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1