R语言读取zip压缩包内shapefile地图文件失败如何解决
代码运行失败的核心原因
- shapefile属于多文件组合格式,读取时必须依赖同路径下的
.shx空间索引、.dbf属性表、.prj投影信息等多个同名配套文件,直接用unz()单独提取压缩包内的.shp文件传入读取函数,会因为缺失配套依赖报错 - Windows环境下调用
download.file下载二进制压缩包时,如果不指定mode = "wb"参数,会默认以文本模式写入文件,直接导致下载的压缩包损坏、无法正常解压 - 旧版
rgdal::readOGR不支持直接传入文件连接对象,需要分别传入文件所在目录路径、不带后缀的图层名参数才能正常读取
可运行实现代码
目前R语言空间数据生态已经全面转向维护中的sf包,已经停止维护的rgdal不推荐继续使用,完整读取代码如下:
library(sf) # 创建临时文件、临时存储目录 temp_zip <- tempfile(fileext = ".zip") unzip_dir <- tempdir() # 下载目标压缩包,指定二进制写入模式避免文件损坏 download.file( url = "https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip", destfile = temp_zip, mode = "wb" ) # 将压缩包完整解压到临时目录,保证shapefile所有配套文件处于同一路径 unzip(zipfile = temp_zip, exdir = unzip_dir) # 读取解压后的shapefile文件 pr_municipios <- st_read(file.path(unzip_dir, "41MUE250GC_SIR.shp"))
如果需要沿用旧的rgdal+sp工作流,将读取环节替换为以下代码即可,下载、解压步骤和上述代码一致:
library(rgdal) data <- readOGR(dsn = unzip_dir, layer = "41MUE250GC_SIR")
绘图方法
数据读取成功后,运行以下代码即可绘制目标行政区划地图:
# sf版本绘图 plot(st_geometry(pr_municipios), col = "#f2f2f2", border = "darkgrey")
绘制效果参考:
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

