我希望基于坐标列表来提取栅格值。我在网上找到了一些脚本,其中包括坐标(),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)
答案 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)