调整SpatVector范围优化美国地图可视化:解决栅格显示过小问题
问题与解决方案
问题说明
使用geodata包获取美国边界并绘图时,返回的地图包含阿拉斯加、夏威夷等海外领地,导致叠加相关栅格数据时,栅格因整体范围过大而显示过小。目前仅通过裁剪经度大于100度的多边形来放大美国本土,以下是几种更高效的解决方案:
原始代码与效果
library(geodata) ct_shp <- geodata::gadm('USA', level = 0, path=".") plot(ct_shp)

解决方案
1. 直接获取美国本土边界
geodata包提供了usa()函数,可直接返回美国本土的边界数据,无需额外裁剪:
library(geodata) # 获取美国本土边界 ct_shp_main <- geodata::usa(path = ".") plot(ct_shp_main)
2. 基于行政名称筛选本土区域
如果仍使用gadm获取的全量美国数据,可转换为sf对象后,通过州名称筛选本土区域(排除阿拉斯加、夏威夷、波多黎各等):
library(sf) # 转换为sf格式 ct_shp_sf <- st_as_sf(ct_shp) # 定义美国本土州列表 main_states <- c("Alabama", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming") # 筛选本土区域 ct_shp_main <- ct_shp_sf[ct_shp_sf$NAME_1 %in% main_states, ] # 绘图 plot(st_geometry(ct_shp_main))
3. 调整绘图范围(无需修改数据)
若不想改动原始数据,可在绘图时通过xlim和ylim指定美国本土的经纬度范围,聚焦显示目标区域:
# 美国本土大致经纬度范围:经度-125至-66,纬度25至49 plot(ct_shp, xlim = c(-125, -66), ylim = c(25, 49)) # 叠加栅格时同步使用该范围 # plot(your_raster_data, xlim = c(-125, -66), ylim = c(25, 49), add = TRUE)
4. 投影转换优化显示
美国本土常用Albers等面积投影(EPSG:5070),转换投影可避免经纬度投影的拉伸变形,让地图显示更合理:
library(sf) # 转换为sf格式并更换投影 ct_shp_albers <- st_transform(st_as_sf(ct_shp), crs = 5070) # 筛选本土区域后绘图 ct_shp_main_albers <- ct_shp_albers[ct_shp_albers$NAME_1 %in% main_states, ] plot(st_geometry(ct_shp_main_albers))
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

