如何在R语言中绘制shapefile前对其进行筛选?
解决Shapefile筛选与工作目录设置问题
嘿,我来帮你搞定这个Shapefile筛选和setwd()的用法问题!咱们一步步来:
1. 先设置工作目录(setwd()的正确打开方式)
setwd()的作用是把R的工作目录切换到你存放Shapefile文件的文件夹,这样后面读取文件时就不用写长长的全路径了。
举个实际例子,假设你的Shapefile存在Windows的C:\Users\Dennis\Documents\UK_GIS_Data文件夹里,代码可以这么写:
# Windows系统用正斜杠或者双反斜杠(避免转义问题) setwd("C:/Users/Dennis/Documents/UK_GIS_Data") # 跨平台写法(Windows/macOS/Linux都能用) setwd(file.path("C:", "Users", "Dennis", "Documents", "UK_GIS_Data"))
要是你用macOS,路径可能是/Users/Dennis/Documents/UK_GIS_Data,直接填进去就行。
2. 读取并筛选Shapefile(推荐用现代的sf包)
现在R处理GIS数据首选sf包(比旧的rgdal更易用且维护活跃),咱们用它来完成读取和筛选:
# 先安装sf包(第一次用的话) install.packages("sf") library(sf) # 读取Shapefile(替换成你下载的Shapefile文件名,不用加.shp后缀也可以) uk_lads <- st_read("Local_Authority_Districts_December_2016_Full_Clipped_Boundaries_in_Great_Britain") # 按照你的需求筛选:lad16cd包含E0800000 或者 E08000010的区域 filtered_lads <- uk_lads[grepl("E0800000|E08000010", uk_lads$lad16cd), ] # 要是你习惯用dplyr的管道语法,也可以这么写(更直观) # install.packages("dplyr") # library(dplyr) # filtered_lads <- uk_lads %>% filter(grepl("E0800000|E08000010", lad16cd))
这里grepl()函数用来匹配字符串,|表示“或”的逻辑,刚好对应你下载数据时的WHERE条件。
3. 验证筛选结果并绘图
筛选完可以快速画个图看看结果对不对:
# 绘制筛选后的区域边界 plot(st_geometry(filtered_lads), main="Filtered UK Local Authority Districts")
如果你还在使用旧的rgdal包(不推荐,已退役)
要是你参考的博客用了rgdal,也可以这么操作,但还是建议转用sf:
install.packages("rgdal") library(rgdal) # 读取Shapefile,dsn填工作目录(这里是当前目录,所以用"."),layer填文件名(不含.shp) uk_lads <- readOGR(dsn = ".", layer = "Local_Authority_Districts_December_2016_Full_Clipped_Boundaries_in_Great_Britain") # 筛选逻辑和之前一样 filtered_lads <- uk_lads[grepl("E0800000|E08000010", uk_lads$lad16cd), ] # 绘图 plot(filtered_lads)
内容的提问来源于stack exchange,提问作者Dennis Ng
相关产品推荐
相关产品推荐

