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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 08:24:21