2017-07-07 4 views
-3

Ich habe die folgende Liste der Breitengrade und Längengrade.Verbindung von Koordinaten in der Nähe von der Liste der Koordinaten

[(52.5, 12.0), (36.0, -0.5), (50.0, -17.5), (52.0, 13.0), (52.0, 13.0), (50.0, -16.5), (37.5, 1.5), (37.5, 1.5), (46.0, 20.0), (37.5, 1.5), (46.0, 20.0), (50.0, -15.0)]

Ich wünschte nur, um die Punkte zu verbinden, die nahe beieinander sind. Ich möchte auch nur verbinden, wenn der Indexunterschied zwischen jedem Punkt weniger als 5 ist (zum Beispiel).

Ich suchte zunächst nach einer Methode, alle Punkte nur dann zu verbinden, wenn die gezeichnete Linie eine bestimmte Länge hat. Nicht sicher, ob dies in Python möglich ist?

Vielen Dank im Voraus.

+0

Was meinen Sie mit Indexdifferenz? Unterschied zwischen der x-Koordinate, der y-Koordinate, der euklidischen Distanz? Was hast du bisher versucht? –

+0

Ist Indexabstandswickel? Zum Beispiel ist 5 vor dem ersten Element das letzte Element? – bendl

+0

Wie sieht dein Code bisher aus? : https://stackoverflow.com/help/how-to-ask – patrick

Antwort

1

Dies setzt voraus, dass die Indizes umschlossen sind und dass "nahe" als 1 Einheiten definiert ist. Führt für jedes Element in der Liste eine Abstandsprüfung für die 10 umgebenden Elemente durch und fügt, wenn sie sich innerhalb von 1 befinden, einem Wörterbuch hinzu.

nearby = {}               # This will hold 'connected' elements 
for index, element in enumerate(l):         # Enumerate through the list l, keeping track of index 
    for other in l[index-5: index+5]:        # For each element 5 before and 5 after 
     if sum((a - b)**2 for a, b in zip(element, other))**.5 < 1 and element != other: 
                    # If other < 5 away from element and other not element 
      if element not in nearby.keys():       # If element isn't already in the dicitonary 
       nearby[element] = [other]       # Add it and reference other 
      else:             # Otherwise 
       nearby[element].append(other)      # Add other to the list of nearby elements 

Wenn Indizes wickeln Sie nicht die Zeile ändern können for other in l[index-5: index+5]: die Kontrollen für den Beginn und das Ende der Liste enthalten. Hier ist, wie ich es tun würde:

for other in l[index-5 if index-5 > 0 else 0 : index+5 if index+5 < len(l) else len(l) -1]: 

Das ist ziemlich lang, so dass Sie möchten diese in mehrere Zeilen aufgeteilt, aber es funktioniert der Trick, wie ist.

+0

Überlegen Sie, die Werte <1 bis <100 zu ändern, vorausgesetzt, das OP hat kommentiert, dass er ~ 100 als nahe betrachtet, und auch Ihr Code, wenn er ausgeführt wird, führt momentan zu einem leeren Diktat. –

+0

~ 100 ist in Kilometern, seine Punkte sind in Längen- und Breitengrad, also <100 wäre der größte Teil der Welt, glaube ich. Auch ich bin mir fast sicher, dass es nicht so ist. Ich habe es auf meiner Maschine und TIO getestet und es funktioniert an beiden Orten. – bendl

+0

https://tio.run/##hZDdboMwDIXv8xTeXdKFKMDSStXYiyAuguqqaBAQUGls2rOz/LGq06b5Bh/[email protected]/[email protected]wxQ7NbCWguXY46hlpy44EbDiuny/[email protected]@gUo5klaBX8XFp6uHQWqIYGa7XaZH6s51G7qezPQuCMPuzDLCOesQJvT9wEPRSjfnKP7BpjeXxneQbziMlF2D7sI5TI2Vfa9Sm9b3ZHumn97hR4GNCcatiZkGBsz0wCxdf0C – bendl

Verwandte Themen