145 lines
4.3 KiB
Java
145 lines
4.3 KiB
Java
package domain;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
|
|
public class KurztripEmpfehlung {
|
|
|
|
User user;
|
|
private List<Ort> alleOrte;
|
|
private Ort heimatort;
|
|
|
|
public KurztripEmpfehlung(User user) {
|
|
// this.alleOrte = ladeAlleOrte();
|
|
this.heimatort = null;
|
|
}
|
|
|
|
public void setHeimatort(Ort heimatort) {
|
|
this.heimatort = heimatort;
|
|
}
|
|
|
|
|
|
|
|
public List<Ort> zufallsorteFahrrad(int maxEntfernung) {
|
|
List<Ort> gefilterteOrte = new ArrayList<>();
|
|
|
|
if (heimatort == null) {
|
|
System.out.println("Heimatort ist nicht gesetzt.");
|
|
return gefilterteOrte;
|
|
}
|
|
|
|
for (Ort ort : alleOrte) {
|
|
Reiseplanung reise = new Reiseplanung(user, ort);
|
|
double entfernung = reise.berechneEntfernung(heimatort, ort);
|
|
if (entfernung <= maxEntfernung) {
|
|
gefilterteOrte.add(ort);
|
|
}
|
|
}
|
|
|
|
if (gefilterteOrte.isEmpty()) {
|
|
System.out.println("Keine Orte innerhalb der Entfernung von " + maxEntfernung + " km gefunden.");
|
|
return gefilterteOrte;
|
|
}
|
|
|
|
return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
|
|
}
|
|
|
|
|
|
|
|
public List<Ort> zufallsortePKW(int minEntfernung) {
|
|
List<Ort> gefilterteOrte = new ArrayList<>();
|
|
|
|
if (heimatort == null) {
|
|
System.out.println("Heimatort ist nicht gesetzt.");
|
|
return gefilterteOrte;
|
|
}
|
|
|
|
for (Ort ort : alleOrte) {
|
|
Reiseplanung reise = new Reiseplanung(user, ort);
|
|
double entfernung = reise.berechneEntfernung(heimatort, ort);
|
|
if (entfernung >= minEntfernung) {
|
|
gefilterteOrte.add(ort);
|
|
}
|
|
}
|
|
|
|
if (gefilterteOrte.isEmpty()) {
|
|
System.out.println("Keine Orte mindestens " + minEntfernung + " km entfernt gefunden.");
|
|
return gefilterteOrte;
|
|
}
|
|
|
|
return zufallsorteAuswaehlen(gefilterteOrte, Math.min(3, gefilterteOrte.size()));
|
|
}
|
|
|
|
private List<Ort> zufallsorteAuswaehlen(List<Ort> orte, int anzahl) {
|
|
List<Ort> zufallsorte = new ArrayList<>();
|
|
Random random = new Random();
|
|
|
|
int size = orte.size();
|
|
if (size <= 0) {
|
|
throw new IllegalArgumentException("Die Liste der Orte ist leer oder hat eine ungültige Größe.");
|
|
}
|
|
|
|
for (int i = 0; i < anzahl; i++) {
|
|
int index = random.nextInt(size);
|
|
zufallsorte.add(orte.get(index));
|
|
orte.remove(index); // Sicherstellen, dass Orte nicht doppelt empfohlen werden
|
|
size--; // Reduzieren der Größe der Liste nach Entfernen eines Elements
|
|
}
|
|
|
|
return zufallsorte;
|
|
}
|
|
|
|
// public double berechneEntfernung(Ort standort, Ort zielort) {
|
|
// double b1 = Math.toRadians(standort.getBreitengrad());
|
|
// double b2 = Math.toRadians(zielort.getBreitengrad());
|
|
// double l1 = Math.toRadians(standort.getLängengrad());
|
|
// double l2 = Math.toRadians(zielort.getLängengrad());
|
|
//
|
|
// double deltaL = l2 - l1;
|
|
// double cosDeltaL = Math.cos(deltaL);
|
|
// double acosArgument = Math.sin(b1) * Math.sin(b2) + Math.cos(b1) * Math.cos(b2) * cosDeltaL;
|
|
//
|
|
// acosArgument = Math.max(-1.0, Math.min(1.0, acosArgument));
|
|
//
|
|
// double entfernung = 6378.388 * Math.acos(acosArgument);
|
|
//
|
|
// return entfernung;
|
|
// }
|
|
|
|
|
|
|
|
// private List<Ort> ladeAlleOrte() {
|
|
// List<Ort> alleOrte = new ArrayList<>();
|
|
//
|
|
// String csvFile = "src/main/resources/PLZ.csv";
|
|
// String line;
|
|
// try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
|
|
// while ((line = br.readLine()) != null) {
|
|
// line = line.replaceAll("\\s+", "");
|
|
// String[] data = line.split(";");
|
|
// int plz = Integer.parseInt(data[0].replaceAll("\"", ""));
|
|
// String ortName = data[1].replaceAll("\"", "");
|
|
// double breitengrad = Double.parseDouble(data[2].replaceAll("\"", ""));
|
|
// double laengengrad = Double.parseDouble(data[3].replaceAll("\"", ""));
|
|
// Ort ort = new Ort(plz, ortName);
|
|
// ort.breitengrad = breitengrad;
|
|
// ort.längengrad = laengengrad;
|
|
// alleOrte.add(ort);
|
|
// }
|
|
// } catch (IOException e) {
|
|
// System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// } catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
|
|
// System.err.println("Fehlerhaftes Datenformat in der CSV-Datei: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// }
|
|
//
|
|
// return alleOrte;
|
|
// }
|
|
|
|
public Ort getHeimatort() {
|
|
return heimatort;
|
|
}
|
|
}
|