2016-06-21 6 views
0

Ich versuche, die nächste Zeile zu einer Menge von Punkten zu finden (etwa 24 Milliarden Punkte, 4 Millionen Zeilen). Die Punkte existieren in einem GeoDataFrame, während die Linien in einem anderen existieren. Ich habe versucht, diese zu folgen: https://github.com/geopandas/geopandas/issues/140, und tat dies:Wie verwende ich GeoPandas Spatial Index mit Linien?

lines_sidx = lines_df['geom'].sindex 
[list(lines_sidx.intersection((points.loc[i,'geom'].y, points.loc[i,'geom'].x))) for i in range(len(points))] 

Und das gibt nur eine leere Liste von Listen. Was geht hier vor sich?

(Beachten Sie, dass ich dies auf die ersten 100 Zeilen und Punkte aus beiden Datensätzen anwende).

Antwort

1

Ihre Frage wird mit dem Kontext vorangestellt, in dem Sie versuchen, eine Nearest Neighbour-Abfrage durchzuführen, aber Ihre Frage selbst fragt nach dem, was in diesem Geopandas-Schnittmengencodeblock vor sich geht. Ich werde versuchen, eher auf Ihre Frage als auf das Vorwort einzugehen, da sie uneins zu sein scheinen. Es sieht so aus, als ob Ihre Kreuzungscode-Logik ausgeschaltet ist. Der Kern der Verwendung von rtree mit einem räumlichen Schnittpunkt ist, dass Sie zuerst die möglichen Übereinstimmungen (einige falsch positive, aber keine falsche negative) mit Ihrem Index finden, und dann finden Sie die genauen Übereinstimmungen.

So etwas wie dies, wie in diesem geopandas r-tree tutorial demonstriert:

spatial_index = gdf.sindex 
possible_matches_index = list(spatial_index.intersection(polygon.bounds)) 
possible_matches = gdf.iloc[possible_matches_index] 
precise_matches = possible_matches[possible_matches.intersects(polygon)] 

Wenn Sie versuchen, eine Nächster-Nachbarn-Suche mit einer Reihe von Punkten und eine Reihe von Linien zu tun, ist es möglich, keine der Funktionen Schnittpunkt, der Ihre leeren Set-Ergebnisse zurückgeben könnte.

Verwandte Themen