Utwórz wielokąty zasięgu i granicy danego rastra w R.

13

Chcę utworzyć dwa wielokąty.

  1. Jeden jest z prostokątnych rozmiarów mojego rastra. Wiem, że mogę uzyskać zasięg użycia rastra, r <- raster("band5.tif") e <- extent(r) plot(e)daje mi to: wprowadź opis zdjęcia tutaj

  2. Jak mogę utworzyć JEDEN wielokąt granicy rastra, jak pokazano poniżej?

Tak wygląda mój raster:raster („band5.tif”)

csheth
źródło

Odpowiedzi:

23

Oto przykład.

library(raster)
# example data
x <- raster(system.file("external/test.grd", package="raster"))

Aby uzyskać zasięg prostokątny

e <- extent(x)
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  

Aby uzyskać wielokąt otaczający komórki, które nie są NA

# make all values the same. Either do
r <- x > -Inf
# or alternatively
# r <- reclassify(x, cbind(-Inf, Inf, 1))

# convert to polygons (you need to have package 'rgeos' installed for this to work)
pp <- rasterToPolygons(r, dissolve=TRUE)

# look at the results
plot(x)
plot(p, lwd=5, border='red', add=TRUE)
plot(pp, lwd=3, border='blue', add=TRUE)
Robert Hijmans
źródło
Nie mogę znaleźć dokumentacji z tej r <- r > -Infstrony. Co to właściwie robi? I jak różni się od values(r)[!is.na(values(r))] <- 1(co ustawia wszystkie lokalizacje, które nie są NA w r na 1).
csheth
3
r > -Infjest podstawowy R. Sprawdź, c(1,NA,3,NA) > -Infjak to działa. Dodałem alternatywę ( reclassify). Twoja alternatywa działa, ale nie jest dobra dla dużych obiektów.
Robert Hijmans,
Czekam tylko, aż komputer przetworzy tę rasterToPolygons()część, i wtedy ocenię twoją odpowiedź. Dzięki za -Infkawałek będzie bardzo przydatny!
csheth
W przypadku bardzo dużego rastra może to chwilę potrwać lub nawet zawieść. W takim przypadku możesz rozważyć użycie najpierw, aggregateponieważ i tak nie zobaczysz różnicy.
Robert Hijmans,
Nawet z zaledwie 100 komórkami po uruchomieniu aggregate()on r, nie przetworzył (komputer wyposażony w 16 GB pamięci RAM). Problem polega na tym, że muszę zachować granicę tak natywną, jak to tylko możliwe, ponieważ DEM musi zostać wyodrębniony z powstałego wielokąta. Jeśli spróbuję dalej pobrać próbkę rastra, utracę tę granicę. Masz jakieś prace?
csheth,