【发布时间】:2021-12-25 15:47:40
【问题描述】:
我有一张带有高程栅格的地图,它采用纬度/经度坐标,但我现在需要以东/北显示地图。我怎样才能做到这一点?
我尝试将栅格从 lat/long 重新投影到 UTM,但这会扭曲地图(我假设为 reasons discussed in this SO post)。
一个最小的工作示例遵循我用来在纬度/经度坐标中生成地图的代码的描述。我使用手动定义的边界框extent 从FedData 下载感兴趣的高程栅格。然后我使用tmap 绘制了栅格。
# - Libraries ----
library(proj4)
library(FedData)
library(rgdal)
library(tmap)
# extent defined manually
extent <- rgeos::readWKT("POLYGON((-118.25 36.45, -118.25 36.6, -118.25 36.9, -118.8 36.9, -118.8 36.45, -118.25 36.45))")
# define shape polygon on lat/long coordinates
proj4string(extent) <- "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs"
# - Get national elevation raster ----
# download National Elevation Database elevation data in extent
# default resolution is 1 arcsecond (res="1);
# to get 1/3 arcsecond (res="13)
ned_raster<-FedData::get_ned(template=extent, label="ned_raster", res="1", force.redo = T)
# - Plot with tmap ----
tm_shape(ned_raster,unit.size=1)+
tm_graticules() +
tm_raster(legend.show=FALSE)
更新 在 Robert Hijmans 的回答之后,我正在更新问题,并提供一些额外的说明。我在这里包含了我用于重新投影的代码:
ned_raster2 <- raster::projectRaster(ned_raster, crs=CRS("+proj=utm +init=epsg:26711 +zone=11 +north +no_defs"))
输出与您在答案中包含的地图中的输出相当。通过使用tmaptools::bb 修改边界框,我可以使用tmap 剪辑地图,以便投影正确但不会“出现”扭曲:
# - Project from angular to planar ----
ned_raster2 <- raster::projectRaster(ned_raster, crs=CRS("+proj=utm +init=epsg:26711 +zone=11 +north +no_defs"))
# redefine extent/bounding box
e2 = tmaptools::bb(ned_raster2)
e2 = e2*c(1.01,1.001,.99,.999)
# - Plot with tmap ----
tm_shape(ned_raster2,unit.size=1,bbox=e2)+
tm_graticules(n.x=5) +
tm_raster(legend.show=FALSE)
据此,我怎样才能在这张地图上包含适当的轴(东/北)?
【问题讨论】:
标签: r maps map-projections tmap