Upgrade to Pro — share decks privately, control downloads, hide ads and more …

rayshader入門 / rayshader-tokyor88

rayshader入門 / rayshader-tokyor88

[出典]
本スライドの図は基盤地図情報ダウンロードサービスの数値標高モデル10mメッシュを加工したものです
https://fgd.gsi.go.jp/download/menu.php

東京都の古い地図の画像は Japanese Historical Maps, East Asian Library - UC Berkeley Collections によって提供されているものです
http://japanmaps.davidrumsey.com/luna/

[参考リンク]
- rayshader: https://www.rayshader.com/
- fgdr: https://uribo.github.io/fgdr/
- Rと3Dプリンターで八ヶ岳のミニチュアを作る。 - 株式会社ホクソエムのブログ: https://blog.hoxo-m.com/entry/2019/12/19/080000
- Some more notes about using Rust code in R packages | Wannabe Rstats-fu https://yutani.rbind.io/post/some-more-notes-about-using-rust-code-in-r-packages/

yutannihilation

September 19, 2020
Tweet

More Decks by yutannihilation

Other Decks in Programming

Transcript

  1. Rustを覚えましょう! #[no_mangle] pub extern fn rev_slice(s: Slice) -> Slice {

    // convert from Slice to Rust slice let s = unsafe { std::slice::from_raw_parts_mut(s.data, s.len as _) }; let mut v = s.to_vec(); v.reverse(); let len = v.len(); let v_ptr = v.as_mut_ptr();
  2. Rustを覚えましょう! #[no_mangle] pub extern fn rev_slice(s: Slice) -> Slice {

    // convert from Slice to Rust slice let s = unsafe { std::slice::from_raw_parts_mut(s.data, s.len as _) }; let mut v = s.to_vec(); v.reverse(); let len = v.len(); let v_ptr = v.as_mut_ptr(); という話はしません
  3. どれを使えばいいの?? • raster: 古くからある定番パッケージ。 rayshader には rastar_to_matrix() という関数 が用意されているので楽。 •

    terra: rasterの後継。速い、けどまだ機能少ない • stars: sf のラスタ版みたいな感じ? sf に慣れて いれば一番使いやすい気がする。
  4. terraを使った場合 a <- as.array(r, transpose = TRUE) m <- a[,,1]

    m[m < 0] <- NA • 行と列が逆になっている?ことに注意して array → matrix に変換 • 標高がマイナスなところは欠測なのでNAに
  5. あらかじめ影を計算 hillshade <- m %>% sphere_shade() • 他にも ray_shade() とか

    ambient_shade() とかいろいろ種類がある • texture に任意の画像を指定できるので地図を 重ねたりできる
  6. ラスタ画像の解像度は 1m x 1m とは限らない #> class : SpatRaster #>

    dimensions : 856, 1046, 1 (nrow, ncol, nlyr) #> resolution : 13.29884, 13.29884 (x, y) #> extent : 14847237, 14861148, 4220655, 4232038 #> coord. ref. : +proj=merc +a=6378137 +b=6378137 +lat_ #> data source : memory #> names : lyr.1 #> min values : -9999
  7. プロット plot_3d(hillshade, m, theta = -120, zscale = res(r)[1]) xyがz軸の値に

    対して何倍か ラスタの解像度を 取得する関数