C++ :: Aufgabe #369
1 Lösung
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.
Lösungen:
C++ 17
C-Code
#include <iostream> #include <vector> #include <map> #include <string> #include <iomanip> using namespace std; struct Location { double lat; double lon; }; vector<map<string, Location>>locations{ { { "Frankfurt Main", {50.053764, 8.637086} }, { "Mainz", {50.001231, 8.276251} }, { "Darmstadt", {49.872775, 8.651177} }, { "Würzburg", {49.79245, 9.932966} }, { "Heidelberg", {49.398752, 8.672434} }, { "Mannheim", {49.489591, 8.467236} }, { "Stuttgart", {48.778449, 9.180013} } } }; double get_distance(Location loc1, Location loc2) { auto l{ cos((loc1.lat + loc2.lat) / 2 * 0.01745) }; // Verbesserungswert Längenkreise auto x{ 111.3 * l * (loc1.lon - loc2.lon) }; auto y{ 111.3 * (loc1.lat - loc2.lat) }; return sqrt(x * x + y * y); } void print_locations(Location compare, double radius) { for (const auto& l : locations) for (const auto& k : l) { auto d{ get_distance(k.second, compare) }; if (d <= radius) cout << fixed << setprecision(1) << k.first << ": " << d << " km" << "\n"; } } int main() { auto compare{ Location{49.00689, 8.403653} }; // Karlsruhe auto radius{ 70 }; print_locations(compare, radius); }