C :: Aufgabe #359

1 Lösung Lösung öffentlich

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.

Lösungen:

vote_ok
von JKooP (18090 Punkte) - 21.05.2021 um 21:36 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <math.h>
#define N 7

typedef struct __Location__ {
	char loc[50];
	double lat;
	double lon;
}Location;

Location locations[N] = {
	{ "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) {
	double l = cos((loc1.lat + loc2.lat) / 2 * 0.01745); // Verbesserungswert Längenkreise
	double x = 111.3 * l * (loc1.lon - loc2.lon);
	double y = 111.3 * (loc1.lat - loc2.lat);
	return sqrt(x * x + y * y);
}

void print_locations(Location compare, double radius) {
	for (int i = 0; i < N; i++) {
		double d = get_distance(locations[i], compare);
		if (d <= radius)
			printf("%s: %.1f km \n", locations[i].loc, d);
	}
}

int main()
{
	Location compare = { "Karlsruhe", 49.00689, 8.403653 };
	double radius = 70;
	print_locations(compare, radius);
}
2009667

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.