set up raster stack
```{r}
library(raster)
r <- raster(ncols=3000, nrows=3000)
r1 <- setValues(r, runif(ncell(r)))
r2 <- setValues(r, runif(ncell(r)))
r3 <- setValues(r, runif(ncell(r)))
r4 <- setValues(r, runif(ncell(r)))
r5 <- setValues(r, runif(ncell(r)))
r6 <- setValues(r, runif(ncell(r)))
stk <- stack(r1,r2,r3,r4,r5,r6)
```
メモ. Rでpasteをdplyrっぽく
こちらのネタです。マルチパイプもいけます
https://twitter.com/R_Programming/status/713217963801710594
`%s%` <- function(x,y){ paste0(x,y)}
これだけ。
> "A" %s% "B"%s% "C"
[1] "ABC"
ggplotで複数プロット(スケール一緒)を描く
library(ggplot2)
library(reshape2)
tmp <- shp1@data[,c(13,19,24)] ##描きたい値(複数)
tmp.melt <- melt(tmp, id="id") ##idを使ってmelt. idがない場合はcbindでくっつけておく
tmp.ggmap <- fortify(shp1, region="id") ##shp1(描きたいベクターデータをggplot用に変換する)
tmp.ggmap <- join( tmp.ggmap, tmp.melt, by ="id") ##くっつける
PC1 <- ggplot( tmp.ggmap, aes(x = long, y = lat, group=group, fill=value)) +
geom_polygon() +
coord_map() +
facet_wrap(~variable) + ##こいつが複数描く
scale_fill_gradient2(low="blue", high="red", midpoint=0) + ##色
theme(legend.position="right")
参考: http://www.cartopedia.co.uk/blog/2013/06/02/facet-wrapping-multivariate-data-reshape-and-ggplot/
全球土地被覆データMCD12Q1の作成 HDFダウンロード〜GeoTiffの抽出・マージ(モザイク)〜投影法の変換まで
シェルとGDALのみでいきます。
1.HDFダウンロード
wget -r -l 1 -A hdf http://e4ftl01.cr.usgs.gov/MOTA/MCD12Q1.051/2009.01.01/
2. 各HDFファイルからTIFFに変換。今回はLand Cover Type 1 (2001): IGBP global vegetation classification schemeのみをピックアップします。
以下のシェル(mcd12q1_hdf_to_tif.sh)を実行する(元ネタはどこだったっけ・・・)
#!/bin/bash
#Set field separator to linefeeds rather than spaces
echo "#!/bin/bash" > batch.sh
chmod +x batch.sh
for FILE in *hdf
do
echo $FILE
LAYERS=$(gdalinfo $FILE | grep SUBDATASET | grep NAME | grep Land_Cover_Type_1 | sed 's/[A-Z0-9\_]*=//g')
for LAYER in $LAYERS
do
LAYER=$(echo $LAYER | sed 's/ //g')
NEWFILE=$(echo $LAYER | \
sed 's/HDF4_EOS:EOS_GRID:"//g' | sed 's/.hdf":Grid:/_/g' | sed 's/ //g' | sed 's/"//g' | sed 's/ //g'| sed 's/:/./g').tif
CMD="gdal_translate -of GTiff '${LAYER}' $NEWFILE"
echo $CMD >> batch.sh
done
done
exec ./batch.sh
3.できたGeoTiffファイルをマージする
http://invisibleroads.com/tutorials/gdal-raster-merge.html
このシェル(gdal_tif_merge.tif)を実行
#!/bin/bash
#Set field separator to linefeeds rather than spaces
echo "#!/bin/bash" > batch.sh
chmod +x batch.sh
#IFS=$'\n'
LIST=`ls | grep Land_Cover_Type_1.tif`
LIST2=`echo $LIST | sed 's/\n/ /g'`
gdal_merge.py $LIST2 -o MOD12Q1_global.tif
4,投影法の変換もGDALで。
WGS84(EPSG:4326)へ変換する。
gdalwarp -t_srs EPSG:4326 -of GTiff MOD12Q1_global.tif MOD12Q1_global_wgs84.tif
netCDFデータのインポート(R)
色々とパッケージがあるそうですが、、raster libraryを使えば簡単だということがわかりました。
ただしncdf4パッケージが必要です。
rstr.brick <- brick("AAA.nc", vername = "NAME")
NAMEはgdalinfoで確認できる。
以上!
spplotのTips
levelplotと似てるとこもあるけど違うとこも。
よくごっちゃになる。。
#タイトルの追加
spplot( raster, main = list(label="title", cex = 3))
#色の変更
spplot( raster, col.regions=colorRampPalette(brewer.pal(9, 'Reds')))
#値の区切り
spplot( raster, col.regions=colorRampPalette(brewer.pal(9, 'Reds')), at=c(0.5,1.5,2,5))
#凡例を消す
spplot( raster, colorkey=F)
#凡例の位置を下にする(ついでにレベルの文字サイズを大きくするなど)
colorkey=list(space="bottom", tick.number=2, tck=2, labels=list(cex=1.5))
spplot( raster, col.regions=colorRampPalette(brewer.pal(9, 'Reds')), at=c(0.5,1.5,2,5),
colorkey=list(space="bottom", tick.number=2, tck=2, labels=list(cex=1.5)))
#ベクターを重ねる
spplot(raster) + layer(sp.polygons(bnd))
もしくは
layer=list("sp.polypons", shpfile, fill="gray70", lwd=0)
spplot(raster,
sp.layout=list(layer))
#緯度経度をつける
scales=list(tick.number=2, draw=TRUE, tck=0.5, cex=1.2)
spplot( raster, col.regions=colorRampPalette(brewer.pal(9, 'Reds')), at=c(0.5,1.5,2,5),
colorkey=list(space="bottom", tick.number=2, tck=2, labels=list(cex=1.5)),
scales=list(tick.number=2, draw=TRUE, tck=0.5, cex=1.2))