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

使用tmap绘制地图出现重复重叠文本标签及旧CRS警告如何解决?

解决方案

1. 消除旧CRS警告

你收到的old-style crs object detected警告是因为数据集存储的CRS格式为旧版sf标准,执行以下代码即可更新格式消除警告:

rg <- st_transform(rg, st_crs(rg))

2. 解决标签重复重叠问题

该问题通常由两类原因导致,对应解决方案如下:

原因1:同一行政区对应多个几何要素

很多行政区划数据集会将行政区的飞地、破碎地块单独存储为一行数据,导致同一个行政区名称对应多个多边形,绘制时每个多边形都会生成一个标签,本质上是重复生成而非单纯重叠。
解决方案:先对空间数据按行政区名称去重,保留每个行政区的首个几何要素即可:

library(dplyr)
rg <- distinct(rg, regiao_administrativa, .keep_all = TRUE)

原因2:标签自动布局规则未优化

如果去重后仍有重叠,可调整tm_text的布局参数,优先使用自动布局功能而非仅开启重叠移除:

tm_shape(rg) + 
  tm_polygons("regiao_administrativa", legend.show = F) +
  tm_text("regiao_administrativa", 
          size = 0.3, # 适当缩小字号降低重叠概率
          auto.placement = TRUE, # 开启自动布局,自动调整标签位置避免重叠
          remove.overlap = TRUE, # 移除仍然重叠的标签
          overlap.limits = c(0.05, 0.05)) # 仅允许最多5%的标签面积重叠

3. 进阶优化方案

如果上述调整仍不满足需求,可单独计算每个行政区的质心,将文本标签绘制在质心位置,避免异形多边形导致的标签位置异常:

# 计算行政区质心
rg_centroid <- st_centroid(rg)

# 绘制地图
tm_shape(rg) + 
  tm_polygons("regiao_administrativa", legend.show = F) +
tm_shape(rg_centroid) +
  tm_text("regiao_administrativa", 
          size = 0.3, 
          auto.placement = TRUE, 
          remove.overlap = TRUE)

内容的提问来源于stack exchange,提问作者Alien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:03