我是R spatstat包的新用户,并且在使用owin()创建多边形观察窗口时遇到问题。代码如下:
library("maps")
library ("sp")`
library("spatstat")
mass.map <- map("state", "massachusetts:main", fill=T) # This returns a data frame includding x and y components that form a polygon of massachusetts mainland`
mass.win <- owin(poly=data.frame(x=mass.map$x, y=mass.map$y)
if(w.area&lt; 0)停止时出错(粘贴(“多边形区域为负 - ”,“可能在&gt;错误方向上遍历?”)): 缺少需要TRUE / FALSE的值
我尝试了倒转多边形的顺序并得到同样的错误。
mass.win <- owin(poly=data.frame(x=rev(mass.map$x), y=rev(mass.map$y)))
多边形包含重复的顶点
多边形是自相交的 owin中的错误(poly = data.frame(x = rev(mass.map $ x),y = rev(mass.map $ y))): 多边形数据包含重复的顶点和自相交
然后我想通过map()返回的多边形可能不是要输入到owin()。所以我尝试加载一个马萨诸塞州的形状文件(我现在完全在猜测)。:
x <- readShapePoly("../Geog/OUTLINE25K_POLY") ## The shape file for MASS, loaded from MassGIS website
mass.poly <- x <- readShapePoly("../Geog/OUTLINE25K_POLY", force_ring=T, delete_null_obj=T) ## I got following error whether or not I used force_ring
mass.owin&lt; - as(mass.poly,“owin”) 检查1006个多边形... 1,多边形1包含重复的顶点 [检查91844边缘的多边形...] 2,3,... [etd 1:21:52] .... 10 [etd 36:12] ..... [etd 23:10] .... 20 [etd 16:59] ... ...... [等13:22] ...... 30 [etd 11:01] ..... [etd 9:21] ...... 40 [etd 8:06] ..... [etd 7: 09] .... 50 [等6:23] ..... [等5:46] ...... 60 [等5:15] ...... [用2449边缘检查多边形...] .. [等4:49] ...... 70 [等4:27] ..... [等4:07] ...... 80 [等3:50] ..... [等等3: 36] ...... 90 [等3:22] ..... [等3:11] ...... 100 [ 等
我收到有关交叉顶点等的消息,但无法构建多边形。
关于问题的一些背景:我试图在spatstat中使用函数进行空间相对风险计算,即案例与控件的空间比率。为此,我需要在该窗口内的观察窗口和点图。我可以作弊并使观察窗在马萨诸塞州周围成为一个矩形,但这可能会扭曲海岸附近的价值观。在任何情况下,我都想学习如何正确使用此软件包进行的任何工作。感谢您的任何帮助,您可以提供。
答案 0 :(得分:2)
稍晚的回答,但spatstat
包需要owin
指定的对象坐标逆时针。引用版本1.36-0的文档:
单个多边形:如果poly是具有两列的矩阵或数据框,或者 然后,具有相等长度的两个分量矢量x和y的结构 这些值被解释为笛卡尔坐标 围绕窗口的多边形顶点。顶点必须是 逆时针上市。不应重复任何顶点(即不重复 第一个顶点)。
您可以使用rev
函数解决此问题,该函数会反转x
和y
的向量:
library("maps")
library ("sp")
library("spatstat")
mass.map <- map("state", "massachusetts:main", fill=T)
mass.win <- owin(poly=data.frame(x=rev(mass.map$x), y=rev(mass.map$y)))
plot(mass.win)
答案 1 :(得分:0)
我对你遇到的问题非常熟悉。 如果我理解正确,你希望得到一个类型的多边形对象。以下代码将帮助您获得所需内容。
#Loading the required packages
library (sp)
library(maps)
# Reading the dataset
mass.map <- map("state", "massachusetts:main", fill=T)
IDs <- sapply(strsplit(mass.map$names, ":"), function(x) x[1])
# converting can be done by loading the powerful package "maptools"
library(maptools)
# Converting into SpatialPolygons-object
mass.poly <- map2SpatialPolygons(mass.map, IDs = IDs)
# Converting by coercing into owin-object
mass.owin <- as.owin.SpatialPolygons(mass.poly)
答案 2 :(得分:0)
最初的问题是在 7 年前(2014 年)发布的。从那时起,spatstat
软件包发生了巨大变化。
关于重复顶点和自相交多边形的错误消息不再出现,因为代码现在会自动更正多边形数据中的这些缺陷。
错误消息 Area of polygon is negative - maybe traversed in wrong direction?
仍然出现。这是因为 owin
要求多边形顶点以逆时针顺序围绕外边界(以及围绕孔边界的顺时针顺序)列出。如果您的窗口是单个多边形而不是多边形的集合,则解决方法是简单地使用 rev
反转坐标向量的顺序:
library(maps)
library(sp)
library(spatstat)
mass.map <- map("state", "massachusetts:main", fill=TRUE)
mass.win <- owin(poly=lapply(mass.map, rev))
我们不能让这自动发生,因为它并不总是用户想要的。
有关详细信息,请参阅 the spatstat book 的第 3 章,您可以从 here 免费下载。