根据坐标列表提取栅格值-spTransform?

时间:2019-07-26 06:17:51

标签: r coordinates raster r-raster sp

我希望基于坐标列表来提取栅格值。我在网上找到了一些脚本,其中包括坐标(),SpatialPoints(),crs()和spTransform()以及其他没有的脚本。有人可以解释一下脚本1或脚本2是否正确,为什么?非常感谢你!

脚本1

WHERE Column_p < val4 and Column_n = val5

脚本2

sites <- read.csv("df.csv")
coordinates(sites)= ~ Longitude+ Latitude 
mypoints = SpatialPoints(sites,proj4string = CRS("+init=epsg:4326"))
myproj = CRS(myraster)
points.proj = spTransform(mypoints, myproj)
myvalues = extract(myraster, points.proj)

1 个答案:

答案 0 :(得分:1)

任何一种都是正确的。使用RasterLayer { "comments": { "lineComment": "//", "blockComment": [ "/*", "*/" ] }, ... 和data.frame r,您可以做到

sites

假设“经度”和“纬度”是v <- extract(r, sites[, c("Longitude", "Latitude")]) 中的变量。

但这仅在sites也具有(“经度”,“纬度”)坐标参考系的情况下有效。事实并非如此。考虑这个RasterLayer

r

f <- system.file("external/test.grd", package="raster") r <- raster(f) r #class : RasterLayer #dimensions : 115, 80, 9200 (nrow, ncol, ncell) #resolution : 40, 40 (x, y) #extent : 178400, 181600, 329400, 334000 (xmin, xmax, ymin, ymax) #crs : +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812 +no_defs #source : C:/soft/R/R-3.6.1/library/raster/external/test.grd #names : test #values : 128.434, 1805.78 (min, max) 是“ sterea ...”,而范围“ 178400,181600,...)显示,坐标显然不是经度和纬度(它们以距坐标系原点的米表示)。 crs。)

在这种情况下,您可能在crs

所覆盖的区域中有一个点
r

但是site <- data.frame(Longitude=5.745039, Latitude=50.96254) 返回extract,因为crs不匹配

NA

我们这样做

extract(r, site)
#     [,1]
#[1,]   NA

现在可以正常工作

pts <- SpatialPoints(site)
crs(pts) <- "+proj=longlat +datum=WGS84"
rcrs <- crs(r)
ptrans <- spTransform(pts, rcrs)