R'deki SpatialPolygons nasıl rasterleştirilir?


10

İlgi alanımın batimetri değerlerini bir dünya batimetrisi raster katmanından {sp} paketindeki 'rasterize' işlevini kullanarak çıkarmaya çalışıyorum.

* Düzenlemeler: Aradığım şey gibi görünen 'özü' işlevini buldum.

Şimdiye kadar yaptığım şey bu:

> 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)

resim açıklamasını buraya girin

> 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 

Sonucu anlamıyorum. Çokgenlerimin her biri için neden 2 renk alıyorum? Ne demek istiyorlar?

Nihayetinde batimetri derinlik konturunu nasıl alabilirim? Bu, çözünürlüğümle veya boyutları değiştirmeyle ilgili bir şey mi?

* Düzenlemeler: tamam, şimdi aşağıdakileri yaptım:

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

v bir liste ve nasıl / altında bu bilgiyi mekansal çokgen ile yeniden hatırlatmak emin değilim ...

Teşekkür ederim!


'Batimetri derinlik konturu al' derken konturlar oluşturmak mı istiyorsunuz?
Simbamangu

Yanıtlar:


6

Çizginiz ras_sub0<-rasterize(subarea0,raster_bath)sadece çokgenlerin dizin numarasını alıyor ve bunu raster değerlerine ataıyor.

Çokgeninizin ve rasterinizin sadece kesişimini istiyorsanız:

subarea0_bathy <- intersect(raster_bath, subarea0)

Güncelleme : @GodinA'nın belirttiği gibi, intersect () bazen çokgenin tam boyutuna sahip bir raster döndürmez! Bu sorunu aşmak için orijinalinizden biraz daha büyük bir rasterle kesişebilirsiniz:

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) 

Teşekkürler @Simbamangu, "kesişim" komutunu denedim, ancak subarea0_bathy ve spatialpolygon'umu (subarea0) çizdiğimde, tamamen örtüşmüyorlar, neden? Önceki sorunuzu cevaplamak için, evet sonunda batimetri konturumu da almak istiyorum. Herhangi bir öneri?
GodinA

Evet, batimetri verilerinden ve Tanzanya poligonundan elde edilen verilere baktım ve aynı etkiyi görüyorum. Yukarıdaki güncellememe bakın. Hatlarına için, olduğunca kolay bulunuyor cont <- contour(r3)sonra lines(cont)harika R değil mi?
Simbamangu

Harika, evet R harika olabilir! Teşekkürler @Simbamangu, bu işe yarıyor! Ancak, Spatialpolygons'umu sadece derinlik konturumla çizmek istiyorum. Belki bir SpatialPolygonsDataframe oluşturmak? Kesişim kullanarak, Spatialpolygons'umu kapsayan tüm kare için bilgi alıyorum. Bir şekilde Spatialpolygons'umu derinlik konturumla birleştirmem gerekiyor, ama bunu nasıl yapacağımdan emin değilim. Bu yüzden 'özü' işlevinin iyi bir başlangıç ​​olduğunu düşündüm, ancak uzamsal çokgenlerimle nasıl yeniden bağlayabileceğimden emin olmadığım bir derinlik listesi ile sonuçlandım ... Herhangi bir fikir? Tekrar teşekkürler!
GodinA

Neyle sonuçlanmak istersin? Subarea0'ınızla çakışan kontürler (SpatialLines)? Şimdi orijinalin ötesine geçtiği için yeni bir soru başlatmak isteyebilirsiniz.
Simbamangu

Evet, subarea0'ımı yalnızca bu tanım
GodinA

1

Burada temel bir alt küme işlevi kullanan başka bir çözüm var 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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.