繁体   English   中英

如何将经纬度坐标中的栅格投影到 UTM,以便在 tmap 中绘图?

[英]How can I project a raster in lat-long coordinates to UTM, for plotting in tmap?

我有一张地图,其高程栅格位于纬度/经度坐标,但我现在需要以东/北显示地图。 我怎样才能做到这一点?

我曾尝试将栅格从纬度/经度重新投影到 UTM,但这会使地图变形(我假设是出于此 SO 帖子中讨论原因)。

一个最小的工作示例遵循我用来在纬度/经度坐标中生成地图的代码的描述。 我使用手动定义的边界框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) 

纬度/经度坐标中的地图版本。

我现在需要以东/北显示地图。

我知道您想使用平面(笛卡尔)坐标而不是角度(经纬度)坐标。 这意味着您需要选择合适的坐标参考系统 (CRS)。 你说你使用了 UTM,这可能是合理的,但你发现结果是“扭曲的”。 您应该显示您使用的代码,因为您可能犯了错误。 总会有一些失真,但对于像这样的小区域,如果您正确指定 CRS,则不会有问题。 (否则,请解释“扭曲”及其重要性。)

例如

library(raster)
library(FedData)

# extent defined manually
e <- as(extent(-118.8, -118.25, 36.45, 36.9), "SpatialPolygons")
crs(e) <- "+proj=longlat"

ned <- FedData::get_ned(template=e, label="ned_raster", res="1", force.redo = T)
ned2 <- projectRaster(ned, crs="+proj=utm +zone=11")
plot(ned2)

在此处输入图片说明

对于较大的区域,您不能使用 UTM,您需要使用另一个 CRS。

或者,您可以从投影栅格创建网格线(经纬网),存储它们的坐标,然后将它们转换回 longlat。 那会有点奇怪。 通常,人们可能希望在其他投影(平面)地图上显示经纬度坐标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM