使用st_read与SQL读取特定列值的空间数据行遇问题求助
空间数据集按列值过滤读取的解决方案
Shapefile 问题修正
你遇到的语法错误是因为SQL关键字拼写错误(WERE → WHERE),同时变量名file未定义(应使用shp_file)。修正后的代码如下:
# 读取全量Shapefile数据 shp_file <- system.file("shape/nc.shp", package="sf") data_full <- read_sf(shp_file, query = "SELECT * FROM nc") # 过滤指定FIPSNO值的行 data_filtered <- read_sf(shp_file, query = "SELECT * FROM nc WHERE FIPSNO = 37009")
如果仍出现列名识别问题,先执行st_read(shp_file)查看数据集的实际列名,确认拼写和大小写是否匹配(Shapefile列名通常有长度限制,且可能为大写)。
Geopackage 问题修正
错误提示"no such table: nc"是因为你指定的表名不存在,先确认Geopackage内的图层名称:
gpkg_file <- system.file("gpkg/nc.gpkg", package="sf") # 查看文件内所有图层信息 st_layers(gpkg_file)
执行后会返回图层列表,假设实际图层名为nc(若不是则替换为返回的正确名称),修正后的读取代码:
# 读取全量Geopackage数据 data_gpkg_full <- read_sf(gpkg_file, layer = "nc") # 过滤指定行(两种可行写法) # 写法1:明确指定图层+查询语句 data_gpkg_filtered <- read_sf(gpkg_file, layer = "nc", query = "SELECT * FROM nc WHERE FIPSNO = 37009") # 写法2:直接使用完整查询语句 data_gpkg_filtered <- read_sf(gpkg_file, query = "SELECT * FROM nc WHERE FIPSNO = 37009")
内容的提问来源于stack exchange,提问作者rafa.pereira
相关产品推荐
相关产品推荐

