用R?中的aea投影将lat/long坐标标绘到正式类光栅图层(因子)地图中?
我对使用空间数据帧非常陌生,我认为这是一项相对简单的任务:获取一个包含6个点的数据帧,x和y列表示这些点的横向/纵向位置,并对其进行投影,以便可以在我制作的空间数据帧中使用 以下是我在6点中的编码方式:用R?中的aea投影将lat/long坐标标绘到正式类光栅图层(因子)地图中?,r,spatial,r-raster,R,Spatial,R Raster,我对使用空间数据帧非常陌生,我认为这是一项相对简单的任务:获取一个包含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
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)
所以基本上我的问题是,如何将这些lat/long转换成这个投影使用的x/y格式?以下是我要覆盖的数据集范围,以供参考,表明它显然不是简单的lat/long格式:
class : Extent
xmin : -1145835
xmax : -1011345
ymin : 1613205
ymax : 1704855
提前非常感谢大家 您需要(重新)将空间点投影到与其他数据源相同的投影中。我更熟悉在R中使用空间向量信息的sf
包,但看起来您正在使用sp
packcage
第一步是将数据帧指定给正确的投影。纬度和经度通常以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
您的坐标现在显示在目标空间中,并且应该能够绘制在背景数据的顶部
如果您愿意使用其他软件包,
sf::st_transform()
更易于使用,而且sf
软件包通常更易于使用。非常感谢!这很有效。我想你是对的,sp格式让我有些反感。非常感谢您的友好和有益的反馈。
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
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