Hallo zusammen,
ich habe gerade ein kleines Projekt am laufen und möchte ein Ranking von Straßenabschnitten auf einer Karte abbilden.
Das Ranking anhand einer gewissen Eigenschaft wurde schon erledigt. Was mir nun noch fehlt ist, dass Straßen, die zu nah aneinander liegen, nicht zusammen auftauchen. Demnach muss ich das Ranking von oben abarbeiten und Abschnitte, die zu dicht aneinander liegen ausschließen. Um die Distanz zwischen den Abschnitten zu ermitteln, bestimme ich anhand ihrer Koordinaten die Luftlinienentfernung und versuche diese einander zu vergleichen und auszugrenzen.
Die Dsegs bezeichnen gerichtete Segmente(directes-segment)
Für den Spaß habe ich folgenden Code geschrieben:
Mein Problem liegt nun darin, dass der neu hinzugefügte Abschnitt (aus der Liste allDsegs) nicht mit allen in der Map gespeicherten Abschnitte und deren Koordinaten verglichen wird. Es tauchen also Abschnitte auf, deren Distanz < 50 km ist.
Ich habe mir überlegt, für jeden Aufruf der Map (For-Schleife) eine Liste zu generieren, die die Distanzen zwischen dem List-Element und der Distanzen aller Map-Elemente vergleicht. Da ich jedoch nicht den neuen Distanzwert mit allen Distanzwerten in der bestehenden Liste vergleichen kann, sind mir da irgendwie die Hände gebunden.
Hat wer vllt eine Lösung für das Problem?
Gibt es vllt einen Befehl, der
ich habe gerade ein kleines Projekt am laufen und möchte ein Ranking von Straßenabschnitten auf einer Karte abbilden.
Das Ranking anhand einer gewissen Eigenschaft wurde schon erledigt. Was mir nun noch fehlt ist, dass Straßen, die zu nah aneinander liegen, nicht zusammen auftauchen. Demnach muss ich das Ranking von oben abarbeiten und Abschnitte, die zu dicht aneinander liegen ausschließen. Um die Distanz zwischen den Abschnitten zu ermitteln, bestimme ich anhand ihrer Koordinaten die Luftlinienentfernung und versuche diese einander zu vergleichen und auszugrenzen.
Die Dsegs bezeichnen gerichtete Segmente(directes-segment)
Für den Spaß habe ich folgenden Code geschrieben:
Java:
public class Top10Dsegs{
private static Map<Long,String> getTop10DSEGs() throws IOException {
Map<Long,String> top10Dsegs = new HashMap<>();
List<String> allDsegs = loadDsegRanking(rFiles);
//the list allDsegs is a csv with the following structure
//DsegID, Latitide, Longitude
//1167317891449551556,51.435550689697266,6.695819854736328
double LatFromList, LonFromList;
double LatFromMap, LonFromMap;
String[] listArray;
String[] mapArray;
Long firstDseg = Long.parseLong(allDsegs.get(0).substring(0, 19));
top10Dsegs.put(firstDseg, allDsegs.get(0).substring(20));
//Iterating through all Dsegs
for(String line : allDsegs){
Long nextID = null;
String nextCoordinates = "0.0000,0.0000";
listArray = line.split(",");
LatFromList = Double.valueOf(listArray[1]);
LonFromList = Double.valueOf(listArray[2]);
//checking all coordinates of maped Dsegs
for(Map.Entry<Long, String> entry : top10Dsegs.entrySet()){
mapArray = entry.getValue().split(",");
LatFromMap = Double.valueOf(mapArray[0]);
LonFromMap = Double.valueOf(mapArray[1]);
//calculating the distance between the next Dsegfrom the list and the other Dsegs from the map
//result of dist is a double and it's metric is Km.
Double dist = Implements.DistanceCalculator.distance(LatFromMap, LonFromMap, LatFromList, LonFromList, "K");
if (dist>50){
nextID = Long.parseLong(listArray[0]);
nextCoordinates = listArray[1] + "," + listArray[2];
}
}
if(nextID != null && top10Dsegs.size() < 10){
top10Dsegs.put(nextID, nextStartCoordinates);
}
return top10Dsegs;
}
}
Mein Problem liegt nun darin, dass der neu hinzugefügte Abschnitt (aus der Liste allDsegs) nicht mit allen in der Map gespeicherten Abschnitte und deren Koordinaten verglichen wird. Es tauchen also Abschnitte auf, deren Distanz < 50 km ist.
Ich habe mir überlegt, für jeden Aufruf der Map (For-Schleife) eine Liste zu generieren, die die Distanzen zwischen dem List-Element und der Distanzen aller Map-Elemente vergleicht. Da ich jedoch nicht den neuen Distanzwert mit allen Distanzwerten in der bestehenden Liste vergleichen kann, sind mir da irgendwie die Hände gebunden.
Hat wer vllt eine Lösung für das Problem?
Gibt es vllt einen Befehl, der