我有一个geoandas文件,我正在寻找一种有效的方法来识别给定坐标的点。例如,我有一个像
这样的geopandas变量gpd1 = gpd.read_file('file_path')
如果我有一个特定的point
(20,30),我如何找到位置最接近或与给定点相同的gpd1
行?我在想
select_point = gpd1[gpd1.geometry.x==point[0] & gpd1.geometry.y==point[1]]
但是我感觉这种方法对于大型数据集不是很有效。如果给定的点稍微偏离gpd1
中的点,则此方法可能不起作用。
这个脚本以一种有效的方式为搜索点找到最近的几何形状(如果有几个几何形状在相同距离上):
import geopandas as gpd
from shapely import Point
file_gdf = gpd.GeoDataFrame(geometry=[Point(10, 10), Point(10, 0), Point(-15, 0)])
search_point = Point(0, 1)
search_point_gdf = gpd.GeoDataFrame(geometry=[search_point], crs=file_gdf.crs)
nearest_in_file_gdf = search_point_gdf.sjoin_nearest(
file_gdf[["geometry"]], distance_col="distance", rsuffix="nearest"
).set_index("index_nearest")
nearest_in_file_gdf = nearest_in_file_gdf.join(file_gdf, rsuffix="_nearest")
print(nearest_in_file_gdf)
结果:
geometry distance geometry_nearest
index_nearest
1 POINT (0.00000 1.00000) 10.049876 POINT (10.00000 0.00000)