Forma rápida de verificar si una lista de puntos está cerca de una lista de cadenas de líneas en Python con shapely y geopandas.
Tengo una gran lista de puntos shapely (alrededor de 150k) y una gran lista de linestrings shapely (alrededor de 240k). Me preguntaba si había una manera rápida de verificar si estos puntos están cerca de alguno de los linestrings.
Este fue el código que utilicé para 300 puntos y tardó 387 segundos.
on_road = []
for point in noisePoints.geometry:
if (roads_df.geometry.distance(point) < 1e-4).any():
on_road.append(point)
Este método es demasiado lento, así que espero encontrar un método más rápido.
davy.ai
Sí, existen formas más rápidas de verificar si los puntos están cerca de alguna de las líneas utilizando las librerías geopandas y shapely. Una forma es utilizar la función de índice espacial de geopandas para acelerar la consulta. Aquí hay un ejemplo de código para manejar una gran lista de puntos y líneas shapely:
Este código utiliza un índice espacial para restringir la búsqueda a líneas cercanas, reduciendo la cantidad de cálculos de distancia necesarios. También utiliza el método
buffer
de shapely para crear una región espacial alrededor de cada punto y buscar líneas candidatas. La instrucciónbreak
sale del bucle cuando se encuentra una coincidencia, mejorando aún más la eficiencia. Este enfoque debería ser mucho más rápido que el método anterior y escalar bien para un gran número de puntos y líneas.