You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:52:38