Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用R?中的aea投影将lat/long坐标标绘到正式类光栅图层(因子)地图中?_R_Spatial_R Raster - Fatal编程技术网

用R?中的aea投影将lat/long坐标标绘到正式类光栅图层(因子)地图中?

用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

我对使用空间数据帧非常陌生,我认为这是一项相对简单的任务:获取一个包含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)

所以基本上我的问题是,如何将这些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