2013-09-19 5 views
3

Я новый пользователь пакета R ppptstat, и у меня возникают проблемы с созданием многоугольного окна наблюдения с owin() , Код следующим образом:Как обеспечить, чтобы многоугольник в flostat :: owin (poly = <polygon>) не имел «отрицательной области»

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) 

Ошибка если (w.area < 0) остановки (паста ("Площадь многоугольника отрицательна -") "может быть пройдено в> неправильного направление?"): отсутствующего значения где требуется TRUE/FALSE

Я пробовал такие вещи, как реверсирование порядка многоугольника и получил такую ​​же ошибку.

mass.win <- owin(poly=data.frame(x=rev(mass.map$x), y=rev(mass.map$y))) 

Многоугольник содержит дублированные вершины

многоугольник самопересекающегося Ошибки в Owin (поли = data.frame (х = обороты (mass.map $ х), у = Rev (mass.map $ у))): данных Polygon продублированы вершины и самопересечение

Тогда я понял, что, возможно, многоугольник г eturned by 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 - в (mass.poly, "Owin") Проверка 1006 многоугольники .. .1, Polygon 1 содержит дублированные вершины [Проверка полигона с краями 91844 ...] 2, 3, .. [etd 1:21:52] .... 10 [etd 36:12] ..... [etd 23:10] .... 20 [etd 16:59] ..... [etd 13:22] .... 30 [etd 11:01] ..... [etd 9:21] .... 40 [etd 8:06] ..... [etd 7:09] .... 50 [etd 6:23] ..... [etd 5:46] .... 60 [etd 5:15] ... [Проверка полигона с 2449 краями ...] .. [etd 4:49] .... 70 [etd 4:27] ..... [etd 4:07] , ... 80 [etd 3:50] ..... [etd 3:36] .... 90 [etd 3:22] ..... [etd 3:11] .... 100 [ и т. Д.

У меня есть сообщения, жалующиеся на пересекающиеся вершины и т. Д., И он не смог построить многоугольник.

Некоторые проблемы, связанные с проблемой: Я пытаюсь использовать функции в spartstat для вычисления пространственного относительного риска, т. Е. Пространственного отношения толерантности случаев против контролей. Для этого мне нужно окно наблюдения и точечный сюжет в этом окне. Я мог обмануть и сделать окно наблюдения прямоугольником вокруг massachusetts, но это, вероятно, исказило бы ценности вблизи побережья. В любом случае, я хотел бы узнать, как сделать это правильно для любой будущей работы, которую я делаю с этим пакетом. Спасибо за любую помощь, которую вы можете предоставить.

+0

Ну, первое сообщение об ошибке на самом деле говорит вам, что он терпит неудачу чтобы получить значение вообще. Это, как и другие сообщения, почти наверняка объясняется тем, что ваш многоугольник имеет самопересечения и/или обманки. Похоже, вам нужен более чистый (возможно, менее подробный) многоугольник для представления вашего географического региона. –

ответ

0

Я знаком с проблемой, которая у вас есть. Если я правильно понял, вы хотите получить полигональный объект класса owin. Следующие коды помогут вам приобрести то, что вы хотели.

#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

Немного поздний ответ, но spatstat пакет хочет owin координаты объекта указан против часовой. Цитата из документации по версии 1.36-0:

одного многоугольника: Если поли представляет собой матрицу или данных кадра с двумя колоннами, или структуры с двумя компонентными векторами х и у одинаковой длины, то эти значения интерпретируются как декартовы координаты из вершин многоугольника, описывающего окно. Вершины должны быть , перечисленные против часовой стрелки. Не следует повторять вершину (т. Е. Не повторять первую вершину).

Вы можете решить эту проблему с помощью rev функцию, которая переворачивает векторы x и y:

library("maps") 
library ("sp") 
library("spatstat") 
mass.map <- map("state", "massachusetts:main", fill=T) 

enter image description here

mass.win <- owin(poly=data.frame(x=rev(mass.map$x), y=rev(mass.map$y))) 
plot(mass.win) 

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^