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

R语言如何筛选shapefile格式地图中的单个多边形要素

筛选shapefile单要素绘制Ponta Grossa市地图

问题场景

我正在使用shapefile文件绘制州级行政区的市政区划地图,需要在成果中仅展示名为Ponta Grossa的单个市政辖区。初步判断可以通过NM_MUNICIP == "PONTA GROSSA"的条件语句实现要素筛选,其中NM_MUNICIP是该shapefile的属性字段之一。

读取空间数据后查看字段名,输出结果如下:

> names(shp)
[1] "NM_MUNICIP" "CD_GEOCMU" 

可复现全量地图绘制的示例代码如下:

library(rgdal)

temp <- tempfile()
temp2 <- tempfile()
download.file("https://geoftp.ibge.gov.br/organizacao_do_territorio/malhas_territoriais/malhas_municipais/municipio_2015/UFs/PR/pr_municipios.zip",temp)

unzip(zipfile = temp, exdir = temp2)
shp <- readOGR(temp2)

plot(shp)

运行上述代码会绘制该州所有市政辖区的完整地图,效果如下:
巴拉那州全量市政辖区地图

实现方法

rgdal读取返回的SpatialPolygonsDataFrame对象和R常规数据框的行筛选逻辑完全一致,直接通过属性条件提取对应要素即可,不需要额外复杂操作。

在原有读取代码后追加以下筛选、绘图代码即可:

# 提取Ponta Grossa对应多边形要素
shp_ponta_grossa <- shp[shp$NM_MUNICIP == "PONTA GROSSA", ]

# 绘制单市政辖区地图
plot(shp_ponta_grossa)

注意事项

  • 这套IBGE公开的市政数据中,NM_MUNICIP字段存储的市名全部为大写格式,匹配时字符串需要和字段存储格式完全一致,即写为"PONTA GROSSA",不能用大小写混合的"Ponta Grossa"否则会匹配不到要素。
  • 如果需要提升匹配容错性,可以先将字段值统一转为大写再做匹配,写法为shp[toupper(shp$NM_MUNICIP) == "PONTA GROSSA", ],可以避免因字段大小写格式差异导致的匹配失败。
  • 如果使用新版sf包读取空间数据,上述筛选逻辑完全通用,sf对象本身是数据框的扩展类型,直接用相同的方括号筛选语法即可。

内容的提问来源于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:33:21