如何优化点在多边形中的重复检查

2024-03-28 14:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代表道路的MultiPolygon,想知道是否有一些GPS点落在距离道路x距离内。我下面的geo_bufroad.buffer(x)。使用repeatedgeo_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)]

Tags: from距离dftimelinefiltergpsrow