我有一个包含多边形(代表社区)的 SHP 文件和一个包含我所在城市谋杀案的 CSV 文件,其中包含事件发生地点的坐标。我需要找到每起谋杀案属于哪个社区,并将其注册到 CSV 中的新列中。
我知道这很容易,但我刚刚开始编程,我一生都做不到。我尝试过熊猫、geopandas 和 shapely。 我尝试将新数据添加到 df,然后将其附加到 CSV,但没有将数据添加到 DF。 我尝试在地理数据帧之间使用 gpd.sjoin 但该列总是以 NaN 值结束。
对于存在于多边形内的点,
gdp.sjoin
是正确的选择。请参阅下面的最小示例:
import geopandas
from geodatasets import get_path
from shapely.geometry import Point
path_to_data = get_path("nybb")
gdf = geopandas.read_file(path_to_data)
# Point inside Manhattan
gdf_pt = geopandas.GeoDataFrame(geometry=[Point(-73.97, 40.78)],crs = 'EPSG:4326' )
gdf.sjoin(gdf_pt.to_crs(gdf.crs)) # returns Manhattan Boro
如果您的
sjoin
, 得到空值
crs
sjoin_nearest
一起使用(但这需要您试验参数以适合您的用例)