Как мне сгенерировать сетку координат внутри указанных многоугольников в R? - PullRequest
1 голос
/ 30 декабря 2011

У меня есть список двумерных полигонов, определенных как двухколонные матрицы координат x и y в R. Они полностью заполняют квадратную область и являются взаимоисключающими. Я хочу использовать эти определения многоугольников для генерации точной сетки значений координат x, y, в которой каждое значение идентифицируется, в какой полигон оно попадает.

Я исследовал пакет sp и могу перевести мои полигоны в объект класса SpatialPolygons, но я не знаю, приближает ли это меня к моей цели. С моими полигонами в кадре данных я могу использовать ggplot с geom_polygon(aes(fill=ID)), чтобы сгенерировать график полигонов с раскраской на основе ID полигона.

Я вижу несколько путей вперед, но не знаю, как их выполнить:

  1. Функция, которая берет многоугольник и генерирует равномерную сетку координат в границах многоугольника. (Мои полигоны довольно неправильные, со многими сторонами, поэтому создание пользовательской функции для них было бы болезненным и подверженным ошибкам.)

  2. Функция, которая принимает пару координат x, y и мой список полигонов и выходные данные, в которые попадают координаты многоугольника.

  3. Функция, которая берет мой график, сгенерированный ggplot, и преобразует цвета в сетку числовых значений координат, которые я мог бы прочитать обратно в R.

Могут быть и другие подходы, которые я не представляю. Я должен верить, что у других людей была такая же потребность раньше, но тщательный поиск не привел меня к каким-либо существующим функциям, которые делают то, что мне нужно.

Ответы [ 3 ]

2 голосов
/ 31 декабря 2011

[бормотание об удаленном образце]

Хм, в холодном свете дня кажется, что вы хотите чего-то другого:

ЕСЛИ все ваши многоугольники образуют прямоугольник И вам нужна регулярная сетка точекнад этим прямоугольником создайте объект SpatialPoints с координатами сетки (часть решения этой подзадачи см. в "expand.grid"), а затем используйте "overlay" из пакета: sp, чтобы проверить, в каком полигоне находятся ваши точки сетки.

Вы также можете использовать bbox, чтобы получить размеры ваших полигонов.

1 голос
/ 31 декабря 2011

Я не очень много думал, но вот идея до кофе: я понимаю, что ваши полигоны образуют тесселяцию Вороного. Теперь предполагается, что будет легко получить соответствующую триангуляцию Делоне, которая должна дать вам простой способ определить, принадлежит ли конкретная точка соответствующему многоугольнику.

Надеюсь, что имеет смысл?

1 голос
/ 31 декабря 2011

Это звучало так, как будто вы делали это позиционирование на квадратной сетке, так что это может быть проще, чем более общий подход к полигонам.Допустим, ваши координаты для этой сетки на квадрате - это два вектора: «xx» и «yy», и у вас есть список точек в data.frame или матрице с именем «mypoints».Это создаст матрицу индексов строк-столбцов для поиска нужного квадрата:

 xx <- seq(0,1,by=.1)
 yy <- seq(0,1,by=.1)
 mypoints <- matrix(runif(10), ncol=2)
 head(mypoints)
#---------------
          [,1]      [,2]
[1,] 0.7731868 0.2707768
[2,] 0.7005779 0.7881789
[3,] 0.9520941 0.6661852
[4,] 0.4625906 0.9176813
[5,] 0.4550811 0.5017386
#---------------
 findInterval(mypoints[1:5,1], xx)
#[1]  8  8 10  5  5
 findInterval(mypoints[1:5,2], yy)
#[1]  3  8  7 10  6
 pointidxs <- matrix( c( findInterval(mypoints[,1], xx), 
                         findInterval(mypoints[,2], yy) ), ncol=2)
 head(pointidxs)
#--------------
     [,1] [,2]
[1,]    8    3
[2,]    8    8
[3,]   10    7
[4,]    5   10
[5,]    5    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...