我有一个代表一条路的MultiPolygon
,它想知道一些GPS点是否在离道路x的距离之内。下面的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)]
发布于 2018-11-27 10:12:06
这些可能会有帮助:
(没有测试)我认为最快的方法是将Polygon
拆分成许多较小的Polygon
,然后使用geopandas.tools.sjoin
。
https://stackoverflow.com/questions/53496450
复制相似问题