Jak zrasteryzować SpatialPolygons w R?


10

Próbuję wyodrębnić wartości batymetrii mojego obszaru zainteresowania ze światowej rastrowej batymetrii za pomocą funkcji „rasterize” w pakiecie {sp}.

* Edycje: znalazłem funkcję „wyodrębniania”, która wydaje się być tym, czego szukam.

Oto co zrobiłem do tej pory:

> class(subarea0) #This is my area of interest (Eastern Canadian Arctic Sea)
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

> extent(subarea0)
class       : Extent 
xmin        : -82.21997 
xmax        : -57.21667 
ymin        : 60.2 
ymax        : 78.16666

library(marelac)
data("Bathymetry")#World bathymetric data in library (marelac)
names(Bathymetry);class(Bathymetry);str(Bathymetry)
[1] "x" "y" "z"
[1] "list"
List of 3
 $ x: num [1:359] -180 -179 -178 -177 -176 ...
 $ y: num [1:180] -89.5 -88.5 -87.5 -86.5 -85.5 ...
 $ z: num [1:359, 1:180] 2853 2873 2873 2873 2873 ...

  raster_bath<-raster(Bathymetry)#Transformed into a raster layer
    extent(raster_bath) <- extent(subarea0)#Transform the extend of my raster to the extend of my SpatialPolygons

>ras_sub0<-rasterize(subarea0,raster_bath)#rasterize my SpatialPolygons (*Edits: not the function that I need here, but I am still interested to learn what results mean)
Found 2 region(s) and 10 polygon(s)
> plot(ras_sub0)
> plot(subarea0, add=TRUE)

wprowadź opis zdjęcia tutaj

> ras_sub0
class       : RasterLayer 
dimensions  : 180, 359, 64620  (nrow, ncol, ncell)
resolution  : 0.06964709, 0.0998148  (x, y)
extent      : -82.21997, -57.21667, 60.2, 78.16666  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 
values      : in memory
min value   : 1 
max value   : 2 
layer name  : layer 

Nie rozumiem wyniku. Dlaczego otrzymuję 2 kolory dla każdego z moich wielokątów? Co mieli na myśli?

Jak ostatecznie uzyskać kontur głębokości batymetrii? Czy to ma coś wspólnego z moją rozdzielczością lub zmianą wymiarów?

* Edycje: ok, teraz wykonałem następujące czynności:

v <- extract(raster_bath, subarea0)#Extract data from my Raster Layer for the locations of my SpatialPolygons

v jest listą i nie jestem pewien, jak / w jakiej formie ponownie powiązać te informacje z moim wielokątem przestrzennym ...

Dziękuję Ci!


Kiedy mówisz „uzyskaj kontur głębokości batymetrii”, masz na myśli, że chcesz również generować kontury?
Simbamangu

Odpowiedzi:


6

Twoja linia ras_sub0<-rasterize(subarea0,raster_bath)po prostu bierze numer indeksu wielokątów i przypisuje go do wartości rastra.

Jeśli chcesz tylko przecięcia swojego wielokąta i rastra:

subarea0_bathy <- intersect(raster_bath, subarea0)

Aktualizacja : Jak zauważa @GodinA, wygląda na to, że intersect () czasami nie zwraca rastra, który ma pełny zasięg wielokąta! Aby obejść ten problem, możesz przecinać się z nieco większym rastrem niż oryginał:

r2 <- raster() # create a generic raster
extent(r2) <- extent(subarea0) + 1 # add 1 degree of extent (0.5 each side)
r3 <- intersect(raster_bath, r2) 

Dziękuję @Simbamangu, próbowałem użyć polecenia „przecinaj się”, ale kiedy wykreślam podobszar00_bathy i mój wielokąt przestrzenny (podobszar0), nie pokrywają się całkowicie, dlaczego? Aby odpowiedzieć na twoje poprzednie pytanie, tak, w końcu chciałbym mieć również kontur batymetrii. Jakieś sugestie?
GodinA

Tak, spojrzałem na dane batymetryczne i wielokąta Tanzanii i widzę ten sam efekt. Zobacz moją aktualizację powyżej. W przypadku konturów jest to tak proste, jak cont <- contour(r3)wtedy lines(cont)Czyż R nie jest świetny?
Simbamangu

Świetnie, tak R może być fantastyczny! Dzięki @Simbamangu, to działa! Chciałbym jednak rysować moje wielokąty przestrzenne tylko z moim konturem głębokości. Może stworzyć ramkę SpatialPolygonsData? Używając przecięcia, otrzymuję informacje o całym kwadracie obejmującym moje wielokąty przestrzenne. Muszę jakoś połączyć moje wielokąty przestrzenne z konturem głębokości, ale nie jestem pewien, jak to zrobić. Właśnie dlatego pomyślałem, że funkcja „wyciąg” była dobrym początkiem, ale skończyłem z listą głębi, że nie jestem pewien, jak mogę ponownie powiązać z moimi przestrzennymi wielokątami ... Jakieś pomysły? Dzięki jeszcze raz!
GodinA

Z czym chcesz się skończyć? Kontury (linie przestrzenne), które pokrywają się z twoim podobszarem0? Możesz zacząć nowe pytanie, ponieważ wykracza ono poza oryginał.
Simbamangu

Tak, chciałbym uzyskać mój podobszar0 tylko z konturem głębokości dla tego zdefiniowanego obszaru: gis.stackexchange.com/questions/25112/…
GodinA

1

Oto inne rozwiązanie, wykorzystujące podstawową funkcję podzbioru w raster.

# create a raster with the dimensions that you are interested in.
r <- raster(extent(subarea0)+1) # +1 to increase the area
res(r) <- 0.1 # you can change the resolution here. 0.1 can be about 10x10 km if you are close to the equator.
crs(r) <- projection(subarea0) # transfer the coordinate system to the raster

# Now you can add data to the cells in your raster to mark the ones that fall within your polygon.
r[subarea0,] <- 1 # this an easy way to subset a raster using a SpatialPolygons object

# check your raster
plot(r)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.