Shapefile与带坐标CSV数据合并报错,求解决方案
空间点数据关联面状边界数据报错解决方法
我有一个带边界的shapefile文件
shp,以及一个包含坐标和数值的.csv数据文件。我希望将数据框df关联到shp,使每个坐标/观测值匹配到正确的区域/边界。尝试了以下代码,但出现错误:
shape_df <- st_join(shp, df, join = st_intersects)使用
st_contains也会出现相同错误。数据类型如下:
> class(shp) [1] "SpatialPolygonsDataFrame" attr(,"package") [1] "sp" > class(df) [1] "SpatialPointsDataFrame" attr(,"package") [1] "sp" > st_crs(shp) Coordinate Reference System: User input: OSGB36 / British National Grid wkt: PROJCRS["OSGB36 / British National Grid", >st_crs(df) Coordinate Reference System: User input: OSGB36 / British National Grid wkt: PROJCRS["OSGB36 / British National Grid", BASEGEOGCRS["OSGB36",错误信息:
Error in UseMethod("st_join") : no applicable method for 'st_join' applied to an object of class "c('SpatialPolygonsDataFrame', 'SpatialPolygons', 'Spatial')"
错误原因:st_join是sf包中的函数,仅支持处理sf类的空间对象,但你当前的shp和df都是sp包下的空间数据类型(SpatialPolygonsDataFrame、SpatialPointsDataFrame),因此触发了"无适用方法"的报错。
方案一:转换为sf对象后使用st_join
先将sp类型的对象转换为sf格式,再执行空间关联操作:
# 加载sf包 library(sf) # 将sp对象转换为sf对象 shp_sf <- st_as_sf(shp) df_sf <- st_as_sf(df) # 执行空间关联(点匹配到对应的面) shape_df <- st_join(shp_sf, df_sf, join = st_intersects)
方案二:直接使用sp包的over()函数处理
如果不想转换数据类型,可以用sp包原生的over()函数实现点与面的匹配:
# 加载sp包 library(sp) # 用over函数获取每个点对应的面属性 point_match <- over(df, shp) # 将匹配结果合并到原面数据中(可根据实际需求调整合并逻辑) shape_df <- cbind(shp, point_match)
内容的提问来源于stack exchange,提问作者lala345
相关产品推荐
相关产品推荐

