【问题标题】:Plot XYZ Points On Raster Layer在栅格图层上绘制 XYZ 点
【发布时间】:2016-11-05 05:19:57
【问题描述】:

我想在栅格图层上显示一组点,并让它们以与栅格相同的比例着色。我已经查看了其他问题,但还没有解决。点值代表 30 个站点的浓度。栅格图层显示使用浓度生成的插值网格。在下面的代码中,我得到了插值的输出,它覆盖了比我需要映射的更广的区域。我将它剪辑到我用作底图的 shp 层。然后我映射剪辑的插值,并添加点。

我有显示点和栅格的地图,我不清楚如何使点的比例与栅格相同。我想我需要以某种方式从插值中提取颜色渐变,并将它们与我的 XYZ 文件中的值匹配,但我不确定这是否是正确的道路......

到目前为止我生成地图的代码:

# test data for 4 stations

XYZData<- data.frame(
 X = c(577422.4, 579220.9, 580996.0, 584633.1), 
 Y = c(4210598, 4211570, 4212198, 4213455),Z = c(7.1,10.2,12,3))

library(raster)
rasterDF <- raster(idw_out) # idw_out is the output interpolation grid
newproj<-'my projection' # setting projection
a<-projectRaster(rasterDF, crs=newproj)

nfullName="./shpdata/this is my base map.shp"
nlayerName="name of my base map"
border_rev<-readOGR(dsn=nfullName,layer=nlayerName, verbose=F) # map extent
x1<-mask(a, border_rev) # clip interpolation to basemap

h<- colors(); h1<-h[10:100] # attempting to standardize colors used
p <- plot(x1, col=h1); points(XYZdata, type='p', col=h1)

谢谢!

编辑: 这是栅格的摘要:

class       : RasterLayer 
dimensions  : 317, 425, 134725  (nrow, ncol, ncell)
resolution  : 250, 250  (x, y)
extent      : 540425, 646675, 4199125, 4278375  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : in memory
names       : var1.pred 
values      : 0.1547871, 27.05386  (min, max)

这是栅格链接:dataset

xyz数据是这样的:

mydata <- data.frame(Longitude = c(577422.442467061, 579220.875124347, 
+ 580995.982508038, 584633.125414608, 585696.32284728, 589533.313960728, 
+ 587475.548155474, 582963.372460121, 578940.888532248, 582075.111557177 
+ ), Latitude = c(4210598.27557511, 
+ 4211569.85438234, 4212197.61081488, 4213455.20812117, 4213299.86256043, 
+ 4213030.38550458, 4214284.20259049, 4215457.67119233, 4213298.22263535, 
+ 4217435.01191314
+ ), Result = c(7.19, 10.88, 6.59, 5.92, 4.85, 3.83, 4.57, 4.71, 
+ 5.22, 2.07))

任何建议表示赞赏。

【问题讨论】:

  • 请提供一个可重现的例子

标签: r colors geospatial r-raster


【解决方案1】:

首先,我创建了一个可重现的示例:

library(rgdal)
library(raster)

xyz <- data.frame(x = seq(-160,160, 25), 
                  y = seq(-40, 20, 5), 
                  z = rnorm(13)
)
rasterDF <- raster(ncol = 100, nrow = 50)
rasterDF[] <- rnorm(ncell(rasterDF))

然后,您必须将 xyz 数据转换为 SpatialPointsDataFrame(最终将 spTransform 转换为您的 'my projection'):

xyzSP <- SpatialPointsDataFrame(coords = xyz[,1:2], 
                                data = xyz, 
                                proj4string = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))

之后,将这些点下方的栅格像元的数据连接到 z 值(只是示例重现性的一种解决方法;您的值应该已经相同)

xyzSP$Z <- rasterDF[xyzSP,]

下一步是计算稍后将在绘图中使用的颜色。因此,您必须使用rasterDF 的最小值和最大值对 Z 值进行归一化:

ncolors <- 100
xyzSP$color <- terrain.colors(ncolors)[(xyzSP$z - minValue(rasterDF))/
                                         (maxValue(rasterDF)- minValue(rasterDF)) * ncolors]

之后您可以像这样绘制结果并使用plot(...., add = TRUE)添加点图

plot(rasterDF, col = terrain.colors(ncolors))
plot(xyzSP, add = TRUE, bg = xyzSP$color, pch = 21, cex = 1)

【讨论】:

  • 谢谢洛基。完全有道理。但是,这不适用于我的实际光栅文件,不知道为什么。当我使用 rasterDF(在我的情况下为 x1)规范化 z 值时出现此错误:terrain.colors(ncolors)[(xyzSP$Result - minValue(x1))/(maxValue(x1) - : only 0's可能与负下标混合使用
  • 您能否提供您的数据(或其中的一个样本),以便创建可重现的示例?
  • @lok​​i。我在上面编辑了尽可能多的关于数据的信息。我不知道如何发布一个大的栅格示例。
  • @user1868064,RasterLayer的总结不做。因此,您可能会考虑如何提供数据(或者如果无法共享,请尝试创建导致此错误的示例)
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多