У меня есть MultiPolygon
, представляющий дорогу, и я хотел бы выяснить, находятся ли некоторые точки GPS на расстоянии х от дороги.Мой geo_buf
ниже road.buffer(x)
.Повторное использование geo_buf.contains(Point)
очень медленно, как показано ниже в профилировании (большую часть времени занимает бегущая строка 297).
Как я могу оптимизировать скорость?
from line_profiler import LineProfiler
from shapely.geometry import Point as shapely_Point
Line # Hits Time Per Hit % Time Line Contents
==============================================================
151 def filter_gps(gps_row, geo_buf):
152 606446 62042960.0 102.3 83.3 pot = shapely_Point(gps_row['longitude'], gps_row['latitude'])
153 606446 12433530.0 20.5 16.7 return geo_buf.contains(pot)
Line # Hits Time Per Hit % Time Line Contents
==============================================================
294 1232 11850.0 9.6 0.0 if len(df_gps.index) > 1:
295 geo_buf = shape(json.loads(srg_row['srg_buf']))
296 # filter the GPS points
297 1232 98465688.0 79923.4 68.4 df_filter = df_gps[df_gps.apply(lambda row: filter_gps(row, geo_buf), axis=1)]