【问题标题】:Plotting lat/long coordinates into a Formal Class Raster Layer (factor) map with aea projection in R?在R中使用aea投影将纬度/经度坐标绘制到正式类栅格图层(因子)地图中?
【发布时间】:2021-03-17 00:40:38
【问题描述】:

我对使用空间数据框很陌生,并且我认为这是一项相对简单的任务:获取一个包含 6 个点的数据框,其中 x 和 y 列代表这些点的纬度/经度位置,然后投影它们它们可以在我制作的空间数据框中使用。

这是我在 6 点中的编码方式:

d1 <- structure(list(latitude = c(37.427733, 37.565759, 37.580956, 37.429285, 37.424270, 37.502496), longitude = c(-108.011061, -107.814039, -107.676662, -107.677166, -108.898826, -108.586042)))

d2 <- as.data.frame(d1)

d3 <- SpatialPointsDataFrame(c(d2[,c('longitude','latitude')]), data = d2)

我尝试更改/分配这些投影(这些纬度/经度数据取自 Google 地图),但我似乎无法使其工作。我想要覆盖这些点的数据的投影如下:

+proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs

所以基本上我的问题是,如何将这些纬度/经度转换为该投影使用的 x/y 格式?这是我想覆盖它以供参考的数据集的范围,表明它显然不是简单的纬度/经度:

class      : Extent 
xmin       : -1145835 
xmax       : -1011345 
ymin       : 1613205 
ymax       : 1704855 

提前谢谢大家!

【问题讨论】:

    标签: r spatial r-raster


    【解决方案1】:

    您需要将空间点(重新)投影到与其他数据源相同的投影中。我更熟悉在 R 中处理空间矢量信息的 sf 包,但看起来您正在使用 sp 包。

    第一步是将您的数据框分配给正确的投影。经纬度一般都是WGS84,或者epsg:4326所以:

    library(sp)
    
    d1 <- structure(list(latitude = c(37.427733, 37.565759, 37.580956, 37.429285, 37.424270, 37.502496), longitude = c(-108.011061, -107.814039, -107.676662, -107.677166, -108.898826, -108.586042)))
    
    d2 <- as.data.frame(d1)
    
    d3 <- SpatialPointsDataFrame(c(d2[,c('longitude','latitude')]), data = d2)
    
    
    proj4string(d3) <- CRS("+init=epsg:4326")
    
    sf::st_bbox(d3)
    # xmin       ymin       xmax       ymax 
    # -108.89883   37.42427 -107.67666   37.58096 
    

    看摘要,或者这个extent,你可以看到lat和long和原来一样。现在我们可以使用您提供的 proj4string 重新投影

    target_crs = CRS("+proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs")  # This is your string assigned to an object
    
    
    d4 = spTransform(d3, target_crs) ## object used to transform your data frame
    
    sf::st_bbox(d4)
    # xmin     ymin     xmax     ymax 
    # -1127246  1661667 -1018854  1679942 
    

    您的坐标现在显示在目标空间中,并且应该能够绘制在您的背景数据之上。

    如果您愿意使用替代包,sf::st_transform() 更容易使用,sf 包通常更易于使用。

    【讨论】:

    • 非常感谢!这很好用。我认为你是对的,sp 格式让我有些失望。非常感谢您的友好和有益的反馈。
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多