Как вписать прямоугольник angular в неправильный многоугольник, используя R? - PullRequest
1 голос
/ 01 марта 2020

Как вписать прямоугольник angular в неправильный многоугольник? Или лучше; как получить встраивание максимально-прямоугольного angular -полигона в неправильный многоугольник?

Фон : у меня есть несколько перекрывающихся растровых файлов, которые представляют разные типы данных космическая сенсорная система. Для дальнейшего анализа я хочу получить максимальный прямоугольный angular -полигон (все 4 угла с углом 90 градусов), который вписывается в контуры / контуры всех этих наборов данных, чтобы маскировать и обрезать мои наборы данных. Другими словами; Как вписать прямоугольник angular многоугольника максимального размера в зеленый контур (см. Изображение ниже)?

Идея : сначала получите контур или след для каждого набора данных, а затем распустите все следы, чтобы получить контур, и наконец вписывает прямоугольник angular максимального размера в этот неправильный многоугольник

the red lines represent the footprints of the datasets, the green lines represent the outline of the irregular polygon in which I want to fit a rectangular polygon of maximum size

1 Ответ

0 голосов
/ 14 марта 2020

Делает ли следующее то, что вам нужно?

library(raster)
library(rgeos)
library(mapview)
raster1 <- raster(xmn=-2,xmx=0.1,ymn=50.3,ymx=51.5,vals=1)
raster2 <- raster(xmn=-2.1,xmx=0.5,ymn=50.4,ymx=51.4,vals=1)
raster3 <- raster(xmn=-2.2,xmx=-0.3,ymn=50.2,ymx=51.6,vals=1)

r1 <- extent(raster1)
r1p <- as(r1, 'SpatialPolygons')
r2 <- extent(raster2)
r2p <- as(r2, 'SpatialPolygons')
r3 <- extent(raster3)
r3p <- as(r3, 'SpatialPolygons')
r1p$data <- 1
r2p$data <- 2
r3p$data <- 3

rr <- bind(r1p, r2p, r3p)
rrsp <- as(extent(rr), 'SpatialPolygons')
rrsp$data <- 1
crs(rrsp) <- crs(r1p) <- crs(r2p) <- crs(r3p) <- crs(raster1)

mm <-
    mapview(rrsp, col.regions = 'green', col='green', alpha.regions = 0.1) + 
    mapview(r1p, col.regions = 'red', col='red', alpha.regions = 0.1) + 
    mapview(r2p, col.regions = 'red', col='red', alpha.regions = 0.1) + 
    mapview(r3p, col.regions = 'red', col='red', alpha.regions = 0.1)

mm

Он находит экстенты каждого растра, создает из них пространственные многоугольники, а затем связывает их вместе. Степень этого затем определяется как пространственный многоугольник.

Код mapview создает следующий график.

enter image description here

Зеленый прямоугольник охватывает все растры красного цвета.

...