spatstat的功能窗口丢失空间点

时间:2019-02-08 12:26:25

标签: spatstat

我有一个测试代码,其中包含简短的数据集(20分)和少量 空间区域。一切正常。

测试后,我想增加空间面积,我定义了一个更大的多边形,绘制了20个点,它们是 在该区域内。

但是spatstat的功能窗口未找到 点,出现0点。

这是怎么回事?

day<-c(22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22)
longitude<- c(617237.1,495004.2,618067.6,617088.9,616980.4,358600.5,617759.7,617188.4,617029.6,649704.0,284809.5,358567.5,711395.7,617637.2,617069.2,358272.2,575173.3,726735.2,684353.3,636383.3)
latitude<-c(4177364,4284973,4177484,4177504,4177411,4266954,4177658,4177359,4177455,4130436,4400643,4266136,4185628,4177310,4177367,4266181,4126490,4109880,3989603,4074784)
data<-cbind(day,longitude,latitude)
dataDF<-as.data.frame(data)
coordinates(dataDF)<-  ~longitude+latitude
sp::proj4string(dataDF) <-CRS("+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs")
# small polygon 
y_coord <- c(3900000,3900000,4500000 ,4500000   )
x_coord <- c(2e+05,  8e+05, 8e+05,2e+05)
xym1 <- cbind(x_coord, y_coord)
xym1
library(sp)
p = Polygon(xym1)
ps = Polygons(list(p),1)
quadrat1 = SpatialPolygons(list(ps))
sp::proj4string(quadrat1) <-CRS("+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs")
plot(quadrat1,axes=TRUE,col="green")
plot(dataDF,add=TRUE,col="red")# points within extent
p.ppp <- as(dataDF, "ppp")      
class(p.ppp)
ma1    <- as(quadrat1, "owin")
#Window works fine
marks(p.ppp)  <- NULL
Window(p.ppp) <- ma1#
plot(p.ppp, main=NULL, cols=rgb(0,0,0,.2), pch=20)
#big polygon 
y_coord <- c(2900000,2900000,5900000 ,5900000   )
x_coord <- c(-15e+05,  2e+06, 2e+06,-15e+05)
xym2 <- cbind(x_coord, y_coord)
xym2
library(sp)
p2 = Polygon(xym2)
ps2 = Polygons(list(p2),1)
quadrat2 = SpatialPolygons(list(ps2))
sp::proj4string(quadrat2) <-CRS("+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs")

plot(quadrat2,axes=TRUE,col="green")
plot(dataDF,add=TRUE,col="red")# 20 points within
#Window didn-t work
p.ppp <- as(dataDF, "ppp")      
ma2    <- as(quadrat2, "owin")#big polygon
marks(p.ppp)  <- NULL
Window(p.ppp) <- ma2# 0 points?
plot(p.ppp, main=NULL, cols=rgb(0,0,0,.2), pch=20)# 0 points

1 个答案:

答案 0 :(得分:1)

编辑:这是处理spatstat(编码为普通多边形的矩形)中一种特殊情况的错误,现已修复。因此,从版本1.58-2.026开始,这种情况将不再发生。它根本与计算机精度无关。下面的答案仍然包含将观察窗(owin)显式编码为矩形的有效点,而不是使用引入不必要复杂性的通用多边形。

使用此错误似乎是由于计算机精度问题引起的 多边形中数值较大的坐标。多边形计算和 多边形点测试很难在 计算机,因此spatstat中所有与多边形相关的多边形都按比例缩放为整数, 由某些C ++例程处理。显然这里有些问题。我们 将进行调查。

由于多边形实际上是一个简单的矩形,因此可以避免该问题 通过直接在spatstat中指定它而不是转换空间 spatstat中的多边形窗口。

library(spatstat)
x <- c(617237.1,495004.2,618067.6,617088.9,616980.4,358600.5,617759.7,617188.4,617029.6,649704.0,284809.5,358567.5,711395.7,617637.2,617069.2,358272.2,575173.3,726735.2,684353.3,636383.3)
y <- c(4177364,4284973,4177484,4177504,4177411,4266954,4177658,4177359,4177455,4130436,4400643,4266136,4185628,4177310,4177367,4266181,4126490,4109880,3989603,4074784)
y_coord <- c(2900000,2900000,5900000,5900000)
x_coord <- c(-15e+05,  2e+06, 2e+06,-15e+05)

问题示例:

W1 <- owin(poly=cbind(x_coord, y_coord))
W1
#> window: polygonal boundary
#> enclosing rectangle: [-1500000, 2e+06] x [2900000, 5900000] units
X1 <- ppp(x, y, window = W1)
#> Warning: 20 points were rejected as lying outside the specified window
X1
#> Planar point pattern: 0 points
#> window: polygonal boundary
#> enclosing rectangle: [-1500000, 2e+06] x [2900000, 5900000] units
#> *** 20 illegal points stored in attr(,"rejects") ***

工作示例:

W2 <- owin(x_coord[1:2], y_coord[2:3])
X2 <- ppp(x, y, window = W2)
X2
#> Planar point pattern: 20 points
#> window: rectangle = [-1500000, 2e+06] x [2900000, 5900000] units

reprex package(v0.2.1)于2019-02-08创建