Получение подмножества точек, которые находятся за пределами указанного неправильного многоугольника, с помощью {spatstat}

У меня есть большой набор точек (широта и долгота), ограниченных сложным многоугольником. Однако некоторые из точек не находятся в границах многоугольника, и я хотел бы поместить эти точки в исходный фрейм данных (не объект ppp, описанный ниже).

#Simple example of a polygon and points.
ex.poly <- data.frame(x=c(0,5,5,2.5,0), y=c(0,0,5,2.5,5))
df <- data.frame(x=c(0.5, 2.5, 4.5, 2.5), y=c(4,1,4, 4))

bound <- owin(poly=data.frame(x=ex.poly$x, y=ex.poly$y))

test.ppp <- ppp(x=df$x, y=df$y, window=bound)

#plotting example, to show the one out of the bound owin object
plot(bound)
points(df$x, df$y)

Сообщение об ошибке 1 point was rejected as lying outside the specified window подходит, как и ожидалось. Как бы я установить исходный фрейм данных df выяснить, какой пункт (ы) отклонен?

2 ответа

Решение

Генерация границы и списка точек

ex.poly <- data.frame(x=c(0,5,5,2.5,0), y=c(0,0,5,2.5,5))
df <- data.frame(x=c(0.5, 2.5, 4.5, 2.5), y=c(4,1,4, 4))

Определите и нанесите точки внутри и снаружи многоугольника с помощью пакета spatstat

library(spatstat)
bound <- owin(poly=data.frame(x=ex.poly$x, y=ex.poly$y))
isin<-inside.owin(x=df$x,y=df$y,w=bound)
point_in <- df[isin,]
point_out <- df[!isin,]
plot(bound)
points(df)
points(point_out,col="red",cex = 3 )
points(point_in,col="green",cex = 3 )

Спатстат из полигона

Альтернативно, используя пакетные спланки

library(splancs)
pts<-as.matrix(df)
poly<-as.matrix(ex.poly)
point_in<-pip(pts,poly,out=FALSE)
point_out<-pip(pts,poly,out=TRUE)
plot(pts, ylim=c(0,5), xlim=c(0,5))
polygon (poly)
points(point_out,col="red",cex = 3 )
points(point_in,col="green",cex = 3 )

PointsInOutOfPolygon

Если вашей главной целью является "выяснить, какие точки отклонены", вы можете просто получить доступ к rejects атрибут test.ppp, который вы уже создали:

exterior_points <- attr(test.ppp, "rejects")

external_points теперь является отдельным ppp, который содержит только те точки, которые находятся за пределами окна, которое вы указали при создании test.ppp.

Другие вопросы по тегам