st_contains匹配报错:CRS坐标系统不匹配/缺失问题咨询
问题根源
- 你在使用
st_as_sf()将点数据转换为sf对象时,没有指定原始坐标对应的坐标系(CRS),导致生成的df_points的CRS为缺失状态 st_transform()的作用是将数据从已知的源CRS转换为目标CRS,源CRS缺失的情况下无法执行转换,因此触发第一个报错- 两个对象CRS不一致,直接运行
st_contains()自然触发CRS不匹配的报错
解决步骤
步骤1:为点数据设置原始CRS
从你提供的dput输出可以看到,点坐标为十进制度格式的经纬度,覆盖美国本土范围,默认通用原始CRS为WGS84(对应EPSG编码4326),如果确认你的坐标原始基准为NAD83,可替换为EPSG编码4269:
# 给点数据设置原始CRS,这里以WGS84(EPSG:4326)为例 df_points <- st_set_crs(df_points, 4326)
步骤2:将点数据转换为和多边形一致的CRS
此时点数据已有明确的源CRS,可正常执行投影转换,和你的多边形数据(EPSG:2264,北卡州平面坐标系/英尺)对齐:
# 写法1:直接复用多边形的CRS,无需手动填编码 df_points <- st_transform(df_points, st_crs(df_polygon)) # 写法2:直接输入多边形对应的EPSG编码2264,效果一致 # df_points <- st_transform(df_points, 2264)
步骤3:执行空间匹配
此时两个对象CRS完全一致,可正常运行st_contains():
combine <- st_contains(df_polygon, df_points)
补充说明
你提到的数字形式的CRS就是EPSG编码,是国际通用的坐标系唯一标识,常用的合法编码包括:
- 4326:WGS84 经纬度坐标系,GPS、大多数在线地图的原始经纬度都用这个
- 4269:NAD83 经纬度坐标系,美国本土常用的大地基准
- 3857:Web墨卡托投影,谷歌、百度等在线瓦片地图通用的投影
- 2264:你当前使用的NAD83 / 北卡罗来纳州平面投影(美制英尺)
另外注意你的点数据bbox覆盖了美国本土大部分区域,而多边形仅覆盖北卡州,最终匹配结果会有大量点不属于任何北卡多边形,属于正常情况。
内容的提问来源于stack exchange,提问作者tchoup
相关产品推荐
相关产品推荐

