繁体   English   中英

将IDW插值限制为R {Spatstat}中的多边形

[英]Confining an IDW interpolation to a polygon in R{Spatstat}

我是一个相当新的R用户,她正在处理美国大都市地区内嵌入的空间数据。 我正在为许多变量生成IDW映射,但在定义IDW的边界时遇到了麻烦。 我只想在都会区边界的范围内插值数据,而我目前的方法是填满整个图。

首先从这样的dataframe创建一个ppp对象:

x.points<-SpatialPointsDataFrame(coords =x.data[,c("LON10","LAT10")],
  data=x.data[,c("v1","v2")],
  proj4string=CRS("+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs"))

x.proj<-spTransform(x.points,CRSobj = CRS("+proj=aea
  +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 
  +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0"))    

x.ppp<-as.ppp(x.proj)

使用plot(x.ppp)投影此ppp对象将显示每个变量(上面的代码中的“ v1”和“ v2”)的图。 但是,该图会填满整个矩形框。 我通过为它分配一个owin对象来限制我的ppp对象时的帧,如下所示:

y.spdf<-spTransform(y.spdf,CRSobj = CRS("+proj=aea 
  +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 
  +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0"))

y.owin<-as.owin(y.spdf)

x.ppp<-x.ppp[y.owin]

现在使用plot(x.ppp)进行绘制,可以得到我的数据点的图,这些数据点已正确地plot(x.ppp)在其都市区域的多边形内。 虽然这是一个好的开始,但我想继续将此空间框架传递到IDW地图上。 咨询spatstat手册使我相信,我可以通过我的owin对象作为as.mask说法,但每当我这样做,我得到一个错误。 示例代码如下:

idw<-idw(x.ppp, power=4, as.mask(y.owin))

这给了我错误“ switch(at,pixel = {:EXPR必须是长度为1的矢量)中的错误。”使用at="points"不起作用,因为我改为获取结果dataframe imlist对象而不是imlist 。如果我忽略了as.mask参数,我得到了正确的idw,但是它插值超出了我以前可以使用owin对象设置的都会区边界。

我认为这是一项相当普通的任务,但是咨询spatstat文档使我有些茫然。 as.mask参数似乎可以正常工作,但我不确定我要去哪里。 关于如何解决此问题的任何意见或建议,或者我可以尝试用来更好地理解该问题的资料来源,将提供很大的帮助。 谢谢!

我知道这有点令人困惑。 基本上, idw在包含数据( owin的框架)的整个矩形框中计算结果。 如果执行rslt <- idw(x.ppp)则会得到此结果。 为了将结果限制为多边形窗口,我们需要通过该窗口对结果图像进行子集化(并设置drop=FALSE以获得结果不规则图像,而不是多边形区域内的像素值)。 用代码解释:

简单情况(一个数字标记值)

library(spatstat)
# Fake data with one numeric mark
X <- humberside
marks(X) <- runif(npoints(X))
# Window is a polygonal region:
W <- Window(X)
W
# IDW in the frame of W
rslt <- idw(X)
# Subset of IDW inside W
rslt <- rslt[W, drop = FALSE]
plot(rslt)

一个变量的IDW

多元大小写(两个或多个数字标记值)

library(spatstat)
# Fake data with more numeric marks
X <- humberside
marks(X) <- cbind(x = runif(npoints(X)), y = runif(npoints(X)))
# Window is a polygonal region:
W <- Window(X)
W
# IDW in the frame of W for each mark variable (imlist object)
rslt <- idw(X)
# Subset of IDW inside W for each mark variable (imlist object)
rslt <- solapply(rslt, "[.im", W, drop = FALSE)
plot(rslt)

IDW两个变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM