我试图找到最近的一串点(大约240亿点,400万行)。这些点存在于一个GeoDataFrame中,而这些行存在于另一个GeoDataFrame中。我试着遵循这个:https://github.com/geopandas/geopandas/issues/140,并做了这个:
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))]
这只是返回一个空的列表列表。这是怎么回事?
(请注意,我将此应用于前两个数据集的前100行和点。)
答案 0 :(得分:2)
您的问题以您尝试执行最近邻居查询的上下文开头,但您的问题本身会询问该geopandas交叉点代码块中发生了什么。我会尝试解决你的问题,而不是它的前言,因为它们似乎不一致。看起来您的交叉代码逻辑已关闭。使用具有空间交集的rtree的要点是您首先在索引中找到可能的匹配(一些误报,但没有假阴性),然后您找到精确匹配。
像这样的事情,如geopandas r-tree tutorial所示:
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)]
如果您尝试使用一组点和一组线进行最近邻搜索,则可能没有任何要素相交,这可能会返回空集结果。