Enviar pesquisa
Carregar
Rを用いたGIS
•
19 gostaram
•
19,955 visualizações
Mizutani Takayuki
Seguir
Rを用いたGISの講習資料です。
Leia menos
Leia mais
Dados e análise
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 85
Baixar agora
Baixar para ler offline
Recomendados
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
Nagi Teramo
階層ベイズとWAIC
階層ベイズとWAIC
Hiroshi Shimizu
正準相関分析
正準相関分析
Akisato Kimura
顕著性マップの推定手法
顕著性マップの推定手法
Takao Yamanaka
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
Deep Learning Lab(ディープラーニング・ラボ)
QgisとRで野生動物の追跡結果を解析してみよう
QgisとRで野生動物の追跡結果を解析してみよう
NozomiIriomote
重回帰分析で交互作用効果
重回帰分析で交互作用効果
Makoto Hirakawa
PRML輪読#8
PRML輪読#8
matsuolab
Recomendados
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
Nagi Teramo
階層ベイズとWAIC
階層ベイズとWAIC
Hiroshi Shimizu
正準相関分析
正準相関分析
Akisato Kimura
顕著性マップの推定手法
顕著性マップの推定手法
Takao Yamanaka
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
Deep Learning Lab(ディープラーニング・ラボ)
QgisとRで野生動物の追跡結果を解析してみよう
QgisとRで野生動物の追跡結果を解析してみよう
NozomiIriomote
重回帰分析で交互作用効果
重回帰分析で交互作用効果
Makoto Hirakawa
PRML輪読#8
PRML輪読#8
matsuolab
深層生成モデルと世界モデル
深層生成モデルと世界モデル
Masahiro Suzuki
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection
Deep Learning JP
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Toshihiro Kamishima
Stan超初心者入門
Stan超初心者入門
Hiroshi Shimizu
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Daisuke Yoneoka
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Satoshi Kato
幾何を使った統計のはなし
幾何を使った統計のはなし
Toru Imai
一般化線形混合モデル入門の入門
一般化線形混合モデル入門の入門
Yu Tamura
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
wada, kazumi
Stanコードの書き方 中級編
Stanコードの書き方 中級編
Hiroshi Shimizu
Rの高速化
Rの高速化
弘毅 露崎
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
logics-of-blue
3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布
Junya Saito
Rで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定
logics-of-blue
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
Shiga University, RIKEN
グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向
ohken
点群深層学習 Meta-study
点群深層学習 Meta-study
Naoya Chiba
ResNetの仕組み
ResNetの仕組み
Kota Nagasato
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
Mais conteúdo relacionado
Mais procurados
深層生成モデルと世界モデル
深層生成モデルと世界モデル
Masahiro Suzuki
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection
Deep Learning JP
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Toshihiro Kamishima
Stan超初心者入門
Stan超初心者入門
Hiroshi Shimizu
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Daisuke Yoneoka
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Satoshi Kato
幾何を使った統計のはなし
幾何を使った統計のはなし
Toru Imai
一般化線形混合モデル入門の入門
一般化線形混合モデル入門の入門
Yu Tamura
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
wada, kazumi
Stanコードの書き方 中級編
Stanコードの書き方 中級編
Hiroshi Shimizu
Rの高速化
Rの高速化
弘毅 露崎
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
logics-of-blue
3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布
Junya Saito
Rで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定
logics-of-blue
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
Shiga University, RIKEN
グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向
ohken
点群深層学習 Meta-study
点群深層学習 Meta-study
Naoya Chiba
ResNetの仕組み
ResNetの仕組み
Kota Nagasato
Mais procurados
(20)
深層生成モデルと世界モデル
深層生成モデルと世界モデル
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
Stan超初心者入門
Stan超初心者入門
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
幾何を使った統計のはなし
幾何を使った統計のはなし
一般化線形混合モデル入門の入門
一般化線形混合モデル入門の入門
Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
Stanコードの書き方 中級編
Stanコードの書き方 中級編
Rの高速化
Rの高速化
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
3分でわかる多項分布とディリクレ分布
3分でわかる多項分布とディリクレ分布
Rで階層ベイズモデル
Rで階層ベイズモデル
2 4.devianceと尤度比検定
2 4.devianceと尤度比検定
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
グラフィカルモデル入門
グラフィカルモデル入門
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向
点群深層学習 Meta-study
点群深層学習 Meta-study
ResNetの仕組み
ResNetの仕組み
Semelhante a Rを用いたGIS
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
Prosym2012
Prosym2012
MITSUNARI Shigeo
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
Kohei KaiGai
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
Kohei KaiGai
KETpic できれいな図を書こう
KETpic できれいな図を書こう
Yoshitomo Akimoto
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
NTT DATA OSS Professional Services
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
Toru Tamaki
DTrace for biginners part(2)
DTrace for biginners part(2)
Shoji Haraguchi
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
Toru Tamaki
RでGISハンズオンセッション
RでGISハンズオンセッション
arctic_tern265
KMLとR言語
KMLとR言語
文彦 牧山
HiRoshimaR3_IntroR
HiRoshimaR3_IntroR
SAKAUE, Tatsuya
Python で munin plugin を書いてみる
Python で munin plugin を書いてみる
ftnk
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
android sola
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
Yuya Matsumura
ggplot2 110129
ggplot2 110129
Takashi Minoda
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
さくらインターネット株式会社
Intoroduction of Pandas with Python
Intoroduction of Pandas with Python
Atsushi Hayakawa
Open dronemapハンズオン
Open dronemapハンズオン
Mizutani Takayuki
Semelhante a Rを用いたGIS
(20)
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Prosym2012
Prosym2012
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
20181212 - PGconf.ASIA - LT
20181212 - PGconf.ASIA - LT
KETpic できれいな図を書こう
KETpic できれいな図を書こう
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
DTrace for biginners part(2)
DTrace for biginners part(2)
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
RでGISハンズオンセッション
RでGISハンズオンセッション
KMLとR言語
KMLとR言語
HiRoshimaR3_IntroR
HiRoshimaR3_IntroR
Python で munin plugin を書いてみる
Python で munin plugin を書いてみる
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
ggplot2 110129
ggplot2 110129
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
Intoroduction of Pandas with Python
Intoroduction of Pandas with Python
Open dronemapハンズオン
Open dronemapハンズオン
Mais de Mizutani Takayuki
FOSS4G Hokkaido2016 LT資料
FOSS4G Hokkaido2016 LT資料
Mizutani Takayuki
自然環境調査におけるUAVの利用例
自然環境調査におけるUAVの利用例
Mizutani Takayuki
環境アセスにおけるクローズドデータによる問題
環境アセスにおけるクローズドデータによる問題
Mizutani Takayuki
カッパ(妖怪)の生息適地マップ作成入門
カッパ(妖怪)の生息適地マップ作成入門
Mizutani Takayuki
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
Mizutani Takayuki
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
Mizutani Takayuki
植生タイルの作り方
植生タイルの作り方
Mizutani Takayuki
自然環境保全のためのデータの地図化・分析手法のご紹介
自然環境保全のためのデータの地図化・分析手法のご紹介
Mizutani Takayuki
Mais de Mizutani Takayuki
(8)
FOSS4G Hokkaido2016 LT資料
FOSS4G Hokkaido2016 LT資料
自然環境調査におけるUAVの利用例
自然環境調査におけるUAVの利用例
環境アセスにおけるクローズドデータによる問題
環境アセスにおけるクローズドデータによる問題
カッパ(妖怪)の生息適地マップ作成入門
カッパ(妖怪)の生息適地マップ作成入門
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
植生タイルの作り方
植生タイルの作り方
自然環境保全のためのデータの地図化・分析手法のご紹介
自然環境保全のためのデータの地図化・分析手法のご紹介
Rを用いたGIS
1.
Rを用いたGIS 水谷貴行(株式会社エコリス) 2017.11.15版
2.
配布データ ダウンロード https://drive.google.com/open?id=1O4qfhMenwtMoBBFCu-uutdf5jHSRm-a- 「R_GIS_data」を解凍してデスクトップに置いてください。 (ユーザー名が日本語の場合は、C:UsersPublicの中に入れてください。) ※日本語のファイル名やパス名はトラブルの元なので使用しません。 内容物 ● データの取得元.txt ● Rスクリプト R_GIS_tutorial.R 2
3.
事前準備の確認 ● Windows OS
>= 8 ● R >= 3.4.1 ● RStudio >= 1.0 ● パッケージのインストール 3 install.packages(c("sf", "dplyr", "tidyr","ggplot2", "raster", "mapview", "jpndistrict", "maptools"),dependencies=T) library(sf) library(dplyr) library(tidyr) library(raster) library(mapview) library(jpndistrict) library(maptools) library(ggplot2)
4.
事前準備の確認 質問. 1. GISを知ってますか? 2. ArcGISやQGISなどを使ったことがありますか? 3.
Rで位置情報を操作したことがありますか? 4
5.
本日の流れ 前半: ● GISの基礎 ● 基本編(ベクタ処理、ラスタ処理) 後半: ●
応用編(色々な処理の組み合わせ) ● 質問等 5
6.
GISの基礎 6
7.
なぜRでGISなのか? ● 一括処理 → すべての処理をスクリプトで記述 ● 再現性 → 処理手順はすべてスクリプトに保存 ●
再利用可能 → 既存のスクリプトを修正、変更 ● 統計処理との連携 → Rの機能をフル活用 ※ 最近では、ArcGISやQGISでもRと連携できたり、処理内容を記述して一括処理できる 7
8.
データ形式 ● ベクタデータ(ESRI Shapefile、CSV、KML、GeoJSONなど) ○
ポイント ○ ライン ○ ポリゴン →ジオメトリー(形状)と属性表 ● ラスタデータ(GeoTIFFなど) →値を持ったグリッドセルの集合 出典:GIS Cookbook for LGUs (http://www.cookbook.hlurb.gov.ph/) 8
9.
地理座標(緯度、経度) ● 位置座標を緯度、経度で表す方法を地理座標と言う ● 緯度、経度は図のように定める ●
楕円体は長半径6,378,137m、扁平率1/298.257222101 ● 楕円体の重心が原点に位置し、地球の回転軸が Z軸と重 なりXY平面が赤道と一致する座標系を使用 ● これらの決まりを測地系と言う 出典:「統計・防災・環境情報がひと目でわかる地図の作り方」(p16-17) 9
10.
投影座標 ● 投影座標は、楕円体を平面上に投影し、その平面を基準とした座標 ● 日本の場合、平面直角座標系もしくは
UTM座標系が主に利用される ● 平面直角座標系とUTM座標系は「ガウス・クリューゲル図法」と呼ばれる投影法を使用 ● 地域ごとに、投影原点と投影範囲が決まっている 出典:国土地理院 測量に関するミニ知識 (http://www.gsi.go.jp/chubu/minichishiki23.html) 出典:「統計・防災・環境情報がひと目でわかる地図の作り方」(p16-17) 10
11.
空間参照系とEPSGコード ● 位置座標は、測地系と地理座標 /投影座標の組み合わせで定義される ●
その組み合わせを空間参照系と言う ● 空間参照系に識別番号を振ったものが EPSGコード ※EPSGコードはJGD2000のものです。新たにデータを作成する場合はJGD2011のEPSGコードを参照ください。 11
12.
平面直角座標系の適用区域とEPSGコード ※EPSGコードはJGD2000のものです。新たにデータを作成する場合はJGD2011のEPSGコードを参照ください。 12
13.
UTM座標系の適用ゾーンとEPSGコード ゾーン EPSG 区域 51
3097 東経120-126 52 3098 東経126-132 53 3099 東経132-138 54 3100 東経138-144 55 3101 東経144-150 ※EPSGコードはJGD2000のものです。新たにデータを作成する場合は JGD2011のEPSGコードを参照ください。 13
14.
基本編 14
15.
Rの基本操作 以下の操作で検索や入力がスムーズにできるので利用しましょう。 ● 関数の詳細 ?関数名 ●
コマンドの実行 Ctrl+Enter ● パイプの入力 Ctrl+Shif+M 15
16.
RStudioでプロジェクト作成 1. RStudio起動 2. File→NewProject...→Existing
Directory→Browse→「R_GIS_data」選択→ 「Create Project」ボタン 3. ファイルの一覧から「 R_GIS_tutorial.R」をクリックして開く 16
17.
ベクタ処理 パッケージの読み込み ベクタ処理に必要なパッケージを読み込みます。 ● ベクタ処理
→ sfパッケージ(spパッケージは説明しません) ● インタラクティブな地図表示 → mapviewパッケージ ● 属性テーブルの処理 → dplyr、tidyrパッケージ library(sf) library(mapview) library(dplyr) library(tidyr) R_GIS_tutorial.Rの実行したい行で Ctrl + Enter 17
18.
ベクタデータの読み込み、確認、表示1 ひとまず実行 data(wrld_simpl,package="maptools") #データの読み込み wld<-st_as_sf(wrld_simpl) #sp形式からsf形式に変換 class(wld) #クラスの確認 head(wld)
#データの中身 str(wld) #データの情報 names(wld) #データの属性名 summary(wld) #属性値のサマリー st_crs(wld) #データの空間参照系 st_bbox(wld) #データの範囲 plot(wld) #地図表示(各属性を主題として ) plot(wld["NAME"]) #地図表示(NAME属性のみ) mapview(wld) #インタラクティブな地図表示 1行ずつCtrl+Enter 出力結果を確認します maptoolsの世界地図データを確認、表示してみます。 18
19.
ベクタデータの読み込み、確認、表示2 ひとまず実行 1行ずつCtrl+Enter 出力結果を確認します library(jpndistrict) #国土数値情報の行政界データ( R用にデータ変換されたもの) ibaraki<-spdf_jpn_pref(admin_name="茨城県")
#茨城県を読み込み class(ibaraki) #クラスを確認 head(ibaraki,n=3) #データの中身 str(ibaraki) #データの情報 names(ibaraki) #データの属性名 summary(ibaraki) #属性値のサマリー st_crs(ibaraki) #データの空間参照系 st_bbox(ibaraki) #データの範囲 plot(ibaraki) #地図表示(各属性を主題として ) plot(ibaraki["city_name"]) #地図表示(city_name属性のみ) mapview(ibaraki) #インタラクティブな地図表示 国土数値情報の行政界データを確認、表示してみます。 19
20.
ベクタデータの読み込み、確認、表示3 ひとまず実行 農研機構の土壌図Shapefileデータを確認、表示してみます。 f <- tempfile(fileext
= ".zip") url<-"http://soil-inventory.dc.affrc.go.jp/download/Shape20/%E8%8C%A8%E5%9F%8E_20.zip" download.file(url,f) mydir<-"./soil" unzip(f, exdir = mydir) #日本語ファイル名をアルファベットに変化 for(fi in list.files(mydir,full.names=TRUE)){ file.rename(fi,gsub("茨城", "ibaraki", fi)) } ibaraki_soil<-read_sf(mydir,options=c("ENCODING=CP932")) #データの読み込み。日本語エンコーディングを指定 str(ibaraki_soil) #データの情報 st_crs(ibaraki_soil) #データの空間参照系 st_bbox(ibaraki_soil) #データの範囲 plot(ibaraki_soil["SoilName"]) #データの読み込み 20
21.
ひと息 属性テーブルの簡単表示 21 Environmentパネルの「表ボタン」を押 すと属性テーブルを表形式で簡単に確 認できます。 コマンドからView関数を呼び出しても OKです。 これはRStudioの機能のようです。 参考 :https://support.rstudio.com/hc/en-us /articles/205175388-Using-the-Data- Viewer
22.
ベクタデータの作成 関数一覧 sfgクラス、sfcクラス、sfクラスのデータを作成します。 ● st_point: ポイントの作成 ●
st_linestring: ラインの作成 ● st_polygon: ポリゴンの作成 ● st_multipoint: マルチポイントの作成 ● st_multilinestring: マルチラインの作成 ● st_multipolygon: マルチポリゴンの作成 ● st_geometrycollection: ジオメトリコレクションの作成 ● st_sfc: sfgクラスからsfcクラスを作成 ● st_sf: sfcからsfクラスを作成 22
23.
sf、sfc、sfgクラス ● sf(Simple feature)
属性とジオメトリを持った data.frame ● sfc(Simple feature geometry list-column) ジオメトリのリスト ● sfg(Simple feature geometry) 1レコード分のジオメトリ Simple feature collection with 100 features and 6 fields geometry type: MULTIPOLYGON dimension: XY bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965 epsg (SRID): 4267 proj4string: +proj=longlat +datum=NAD27 +no_defs First 3 features: BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79 geometry 1 1091 1 10 1364 0 19 MULTIPOLYGON (((-81.4727554... 2 487 0 10 542 3 12 MULTIPOLYGON (((-81.2398910... 3 3188 5 208 3616 6 260 MULTIPOLYGON (((-80.4563446... Simple feature Simple feature geometry list-column Simple feature geometry 23
24.
ひと息 spパッケージとsfパッケージの比較 sp sf 2003年~ 2017年~ S4クラス
data.frameを拡張 多くのGIS関連パッケージが依存 dplyr、ggplot2が対応中 地理データの標準仕様に未対応 地理データの標準仕様に対応 sp←→sf の相互変換は可能 参考:http://notchained.hatenablog.com/entry/2017/01/06/213333 24
25.
ベクタデータの作成 実行 ポイントデータを作成してみます。 #ポイント p1<-st_point(c(1,2)) #ポイントデータを作成 (sfgクラス) head(p1)
#データの確認 class(p1) #クラスの確認 p2<-st_point(c(2,1)) #ポイントデータを作成 (sfgクラス) geom<-st_sfc(p1,p2) #p1,p2からなるジオメトリデータを作成 (sfcクラス) head(geom) #データの確認 class(geom) #クラスの確認 name <- c("point1","point2") #属性値を入力 point_f<-st_sf(name=name,geom) #ジオメトリと属性を設定してデータを作成 (sfクラス) class(point_f) #クラスを確認 head(point_f) #データを確認 plot(point_f) #地図表示 25
26.
ベクタデータの作成 実行 ポリゴンデータを作成してみます。 #ポリゴン b0 = st_polygon(list(rbind(c(-1,-1),
c(1,-1), c(1,1), c(-1,1), c(-1,-1)))) #ポリゴンデータを作成 (sfgクラス) b1 = b0 + st_point(c(2,0)) #b0のポリゴンのX座標を2ずらしたポリゴンを作成 b2 = b0 * 0.5 + st_point(c(0,1.5)) #b0のポリゴンを縮小して Y座標を1.5ずらしたポリゴンを作成 geom<-st_sfc(b0,b1,b2) #b0,b1,b2からなるジオメトリデータを作成 (sfcクラス) class(geom) #クラスの確認 a<-data.frame(number=c(1,2,3),species=c("dog","cat","cat")) #属性データを作成 poly_f<-st_sf(a,geom) #ジオメトリと属性を設定してデータを作成 (sfクラス) class(poly_f) #クラスの確認 head(poly_f) #データの確認 plot(poly_f) #地図表示 26
27.
空間参照系の確認、設定、変換 関数一覧 ベクタデータの空間参照系を確認、設定、変換します。 ● st_crs: 空間参照系の取得、設定 ●
st_set_crs: 空間参照系の設定 ● st_transform: 空間参照系の変換 ● st_proj_info: 投影法、楕円体、座標系の確認 27
28.
空間参照系の確認、設定、変換 実行 茨城県行政界データの空間参照系を確認、変換してみます。 st_crs(ibaraki) #空間参照系の確認 st_set_crs(ibaraki,4612) #空間参照系の設定
(EPSGコード) ibaraki_latlon<-st_set_crs(ibaraki,4612) #空間参照系をJGD2000緯度経度に設定して変数に代入 ibaraki_zone9<-st_transform(ibaraki_latlon,2451) #緯度経度から平面直角座標系 9系に投影変換 ibaraki_UTM54<-st_transform(ibaraki_latlon,3100) #緯度経度からUTM座標系ゾーン54に投影変換 st_crs(ibaraki_latlon) #空間参照系の確認 st_crs(ibaraki_zone9) #空間参照系の確認 st_crs(ibaraki_UTM54) #空間参照系の確認 st_geometry(ibaraki_latlon) #ジオメトリの座標値確認 st_geometry(ibaraki_zone9) #ジオメトリの座標値確認 st_geometry(ibaraki_UTM54) #ジオメトリの座標値確認 28
29.
ひと息 パイプ %>% ● パイプ左側の関数の出力結果をパイプ右側の関数の第一引数にする ●
h(g(f(x), y), z)は、f(x) %>% g(y) %>% h(z) と書ける ● 処理を順に書けるので、コードが見やすくなる ● magrittrパッケージ で利用できるが、dplyrやtidyrから自動的にロードされる 29
30.
空間参照系の確認、設定、変換 パイプを使って実行 空間参照系をパイプを使って確認、変換してみます。 library(dplyr) ibaraki_latlon<-ibaraki %>% st_set_crs(4612)
#行政界データの空間参照系を EPSGコード4612に設定 ibaraki_zone9<-ibaraki %>% st_set_crs(4612) %>% st_transform(2451) #EPSG4612に設定した後、EPSG2451に変換 ibaraki_UTM54<-ibaraki %>% st_set_crs(4612) %>% st_transform(3100) #EPSG4612に設定した後、EPSG3100に変換 ibaraki_latlon %>% st_crs() #空間参照系の確認 ibaraki_zone9 %>% st_crs() #空間参照系の確認 ibaraki_UTM54 %>% st_crs() #空間参照系の確認 ibaraki_latlon %>% st_geometry() #ジオメトリの座標値確認 ibaraki_zone9 %>% st_geometry() #ジオメトリの座標値確認 ibaraki_UTM54 %>% st_geometry() #ジオメトリの座標値確認 30
31.
関数ヘルプのExamplesを実行 1. Consoleで ?関数名 と入力 2.
HelpのExamplesを選択してコピー 3. Rスクリプトに貼り付け 4. Ctrl + R でスクリプトを実行 1 2 3、4 すべての関数は説明できないので、 ヘルプを読んで理解しましょう。 31
32.
面積、長さ、距離の計測 関数一覧 面積や長さ、地物間の距離を計測します。 ● st_area: 面積の算出 ●
st_length: 長さの算出 ● st_distance: 地物間の距離 32
33.
面積、長さ、距離の計測 実行 st_distanceのExamplesを実行してみます。 ?st_distance dist_vincenty = function(p1,
p2, a, f) geosphere::distVincentyEllipsoid(p1, p2, a, a * (1-f), f) #楕円体の定義 line = st_sfc(st_linestring(rbind(c(30,30), c(40,40))), crs = 4326) #ラインのジオメトリ st_length(line) #ラインの長さ st_length(line, dist_fun = dist_vincenty) #ラインの長さ(楕円体を自分で定義) p = st_sfc(st_point(c(0,0)), st_point(c(0,1)), st_point(c(0,2))) #ポイントのジオメトリ st_distance(p, p) #ポイント間の距離のマトリクス st_distance(p, p, by_element = TRUE) #1番目同士の距離、 2番目同士の距離、 3番目同士の距離 33
34.
属性検索、集計、追加、結合 関数一覧 属性テーブルを使った操作をします。 ● filter: 行検索 ●
select: 列選択 ● mutate: 列追加 ● transmute: 列を追加し、他を削除 ● group_by: グループ化 ● summarise: 集計 ● gather: 横長のデータを縦長に変換 ● spread: 縦長のデータを横長に変換 ● inner_join: 内部結合 ● left_join: 外部結合 ● right_join: 外部結合 ● full_join: 完全結合 34
35.
属性検索、集計、追加、結合 実行 filterのExamplesを実行してみます。(一部だけ抜粋) ?filter.sf #sfクラスのfilter関数を指定(?filterの後に、Helpでsfの方を選択しても OK) library(dplyr) nc
= st_read(system.file("shape/nc.shp", package="sf")) #nc.shpの読み込み nc %>% filter(AREA > .1) %>% plot() #AREAが0.1以上の地域をプロット # plot 10 smallest counties in grey: st_geometry(nc) %>% plot() #ジオメトリだけをプロット #AREA列を選択して、昇順に並び替え、上から 10番目をグレーで重ね合わせ(面積が小さい地域) nc %>% select(AREA) %>% arrange(AREA) %>% slice(1:10) %>% plot(add = TRUE, col = 'grey') title("the ten counties with smallest area") #タイトル追加 35
36.
空間検索、結合 関数一覧 地物の空間検索や空間結合をします。 ● st_intersects: touch
or overlap ● st_disjoint: !intersects ● st_touches: touch ● st_crosses: cross (don't touch) ● st_within: within ● st_contains: contains ● st_overlaps: overlaps ● st_covers: cover ● st_covered_by: covered by ● st_equals: equals ● st_equals_exact: equals, with some fuzz ● st_join: 空間結合 36
37.
空間検索、結合 実行 st_intersectsのExamplesを実行してみます。(一部だけ抜粋) ?st_intersects pts = st_sfc(st_point(c(.5,.5)),
st_point(c(1.5, 1.5)), st_point(c(2.5, 2.5))) #ポイントを作成 pol = st_polygon(list(rbind(c(0,0), c(2,0), c(2,2), c(0,2), c(0,0)))) #ポリゴンを作成 (lst = st_intersects(pts, pol)) #ポイントとポリゴンが交差するかどうかをリストで返す (mat = st_intersects(pts, pol, sparse = FALSE)) #ポイントとポリゴンが交差するかどうかをマトリックスで返す #追加 プロットで確認 plot(pts) plot(pol,add=T) 37
38.
空間演算 関数一覧その1 空間演算を行いジオメトリから別のジオメトリを作成します。 ● st_centroid: 地物の重心を作成 ●
st_boundary: 地物の領域を作成 ● st_buffer: バッファーを作成 ● st_voronoi: ボロノイポリゴンを作成 ● st_triangulate: ドローネ三角形を作成 (not constrained) ● st_convex_hull: 凸包ポリゴンを作成 ● st_make_grid: グリッドメッシュを作成 ● st_sample: ランダムポイントを作成 ● st_segmentize: ライン上にポイントを作成 ● st_line_merge: ラインを結合 ● st_split: ポリゴンをラインで分割 ● st_polygonize: 閉じたラインからポリゴンを作成 38
39.
空間演算 関数一覧その2 空間演算を行いジオメトリから別のジオメトリを作成します。 ● st_simplify: 地物を簡素化 ●
st_make_valid: ジオメトリを修正(requires lwgeom) ● st_union: 地物を結合 ● st_intersection: 地物が交差する部分を作成 ● st_difference: 地物が交差しない片方の部分を作成 ● st_sym_difference: 地物の交差しない両方の部分を作成 ● st_interpolate_aw: ポリゴンへの面積加重補間 39
40.
空間演算 実行 st_voronoiのExamplesを実行してみます。(一部だけ抜粋) ?st_voronoi set.seed(1) #乱数のシードを設定 x =
st_multipoint(matrix(runif(10),,2)) #乱数から5地点分のマルチポイントを作成 box = st_polygon(list(rbind(c(0,0),c(1,0),c(1,1),c(0,1),c(0,0)))) #長さ1の四角形ポリゴンを作成 if (sf_extSoftVersion()["GEOS"] >= "3.5.0") { v = st_sfc(st_voronoi(x, st_sfc(box))) #ポイントからボロノイ図を作成(四角形の範囲で) plot(v, col = 0, border = 1, axes = TRUE) #ボロノイ図を表示 plot(box, add = TRUE, col = 0, border = 1) #四角形を表示(四角形の範囲でボロノイ図が作成されていない) plot(x, add = TRUE, col = 'red', cex=2, pch=16) #ポイントを表示 plot(st_intersection(st_cast(v), box)) #クラスを変換して、四角形の範囲で切り取り、表示 plot(x, add = TRUE, col = 'red', cex=2, pch=16) #ポイントを表示 } #追加 クラスを確認 class(v) st_cast(v) %>% class 40
41.
データ変換 関数一覧 データのジオメトリタイプ、クラス、フォーマットの変換をおこないます。 ● st_agr: 属性テーブルの値のジオメトリとの関係性を取得、設定します。 ●
st_zm: Z値とM値を追加、削除 ● st_coordinates: 座標をマトリックス形式で表示 ● st_geometry: ジオメトリをsfcクラスで取得、設定 ● st_is: ジオメトリのタイプを確認 ● st_is: ジオメトリのタイプを確認 ● as(x, "Spatial"): spクラスに変換 ● st_as_sf: spクラスからsfクラスに変換 ● st_as_sfc: spクラスからsfcクラスに変換 ● st_as_text: sfg、sfc、crsクラスからWKT形式に変換 ● st_as_binary: sfcクラスからWKB形式に変換 ● st_as_grob: sfクラスからgrob形式に変換 41
42.
ベクタデータの読み込み、書き出し 関数一覧 ベクタデータのファイル読み込みと書き出しをします。 ● st_read: 読み込み ●
read_sf: stringsAsFactors = FALSEで読み込み ● st_write: 書き出し ● write_sf: delete_layer = TRUEで書き出し 42
43.
地図表示 sfパッケージのplot関数の他に、以下のライブラリなどでも地図表示ができます。 ● mapview ● leaflet ●
ggplot2(現時点ではdeveloperバージョンのみ) ● tmap ● sp 43
44.
ラスタ処理 パッケージの読み込み ラスタ処理に必要なパッケージを読み込みます。 library(raster) ※ rasterパッケージでベクタデータを扱う場合は、
sfクラスを扱えないので spパッ ケージのクラスに変換する必要があります。 44
45.
ラスタデータの読み込み、確認、表示1 ひとまず実行 Worldclimの気候データを確認、表示してみます。データの詳細 : http://www.worldclim.org/bioclim climate<-getData('worldclim',
var='bio', res=10) #データのダウンロード #ダウンロードはできるが読み込みはエラーになるので自分で読み込み ※修正されたかも files<-list.files("./wc10",pattern="bil$",full.names=TRUE) #wc10フォルダ内のファイルリストを取得 (bil形式) climate<-stack(files,native=TRUE) #ファイルの読み込み class(climate) #クラスの確認 climate #データの情報 names(climate) #スタックレイヤ名 bio1<-raster(climate,layer=1) #ラスタレイヤを取得(年平均気温 *10) plot(bio1) #地図表示 bio1_deg<-bio1/10 #ラスタの値を年平均気温に変換 zoom(bio1_deg) #ズーム(範囲の始点と終点をクリック) click(bio1_deg) #値の取得(クリック、 Escで終了) s<-raster::select(bio1_deg) #範囲を選択して変数に代入(範囲の始点と終点をクリック) plot(s) #地図表示 hist(s) #値の分布のヒストグラム表示 density(s) #値の分布の密度表示 45
46.
ラスタデータの読み込み、確認、表示2 ひとまず実行 地球地図日本の標高データを確認、表示してみます。 データの詳細: http://www.gsi.go.jp/kankyochiri/gm_jpn.html #データのダウンロード f <-
tempfile(fileext = ".zip") url<-"http://www1.gsi.go.jp/geowww/globalmap-gsi/download/data/gm-japan/gm-jpn-el_u_1_1.zip" download.file(url,f) unzip(f, exdir = ".") f<-"gm-jpn-el_u_1_1/jpn/el.tif" dem<-raster(f) #データの読み込み dem #データの情報 plot(dem) #地図表示 crs(dem) #空間参照系の確認 hist(dem) #値の分布のヒストグラム表示 density(dem) #値の分布の密度表示 46
47.
ラスタデータの作成 関数一覧 RasterLayer、RasterStack、RasterBrickクラスのラスタデータを作成します。 ● raster: RasterLayerを作成 ●
stack: RasterStackを作成 ● brick: RasterBrickを作成 ● subset: RasterStack、RasterBrickからレイヤを取り出し ● addLayer: レイヤを追加 ● dropLayer: レイヤを削除 ● unstack: RasterStackからレイヤのリストを作成 47
48.
RasterLayer、RasterStack、RasterBrick クラス ● RasterLayer
シングルレイヤーのラスタデータ ● RasterStack マルチレイヤーのラスタデータ。レイヤは同範囲、同解像度。 ● RasterBrick マルチレイヤーのラスタデータ。レイヤは同範囲、同解像度。データはすべてメモリ内に 読み込む。 48
49.
ラスタデータの作成 実行 (r<-raster()) #ラスタデータを作成(範囲と解像度はデフォルト値) class(r) #クラスを確認 (r<-raster(ncol=10,nrow=10))
#列数10、行数10のラスタデータを作成(範囲はデフォルト値) (r<-raster(ncol=36,nrow=18,xmn=-1000,xmx=1000,ymn=-100,ymx=900)) #列数、行数、範囲を指定してラスタデータ作成 res(r)<-100 #解像度を100に変更 r #データの情報を表示 hasValues(r) #ラスタ値があるか確認 set.seed(0) values(r)<-runif(ncell(r)) #乱数をラスタの値に代入 plot(r) #地図表示 r1<-r2<-r3<- raster(nrow=10,ncol=10) #列数10、行数10のラスタデータを作成 values(r1) <- 1:ncell(r1) #ラスタ値に1~セル数の値を代入 values(r2) <- runif(ncell(r2)) #乱数をラスタの値に代入 r3 <- r1*r2 #ラスタ演算(セルの値同士を掛け算) (s<- stack(r1,r2,r3)) #RasterStackを作成 plot(s) #地図表示 (b<-brick(r1,r2,r3)) #RasterBrickを作成 r<-raster(b,layer=3) #ラスタレイヤを取り出し plot(r) #地図表示 49
50.
空間参照系の確認、設定、変換 関数一覧 ラスタデータの空間参照系を確認、設定、変換します。 ● crs: 空間参照系を確認、設定 ●
projection: 空間参照系を確認、設定 ● projectRaster: 空間参照系を変換 50
51.
空間参照系の確認、設定、変換 実行 気候データの空間参照系を確認、変換してみます。 bio1<-raster(climate,layer=1) #気候データから RasterLayerを読み込み crs(bio1)
#空間参照系を確認 crs(bio1)<-CRS("+init=epsg:4326") #空間参照系を設定 bio1 #データを確認 plot(bio1) #地図表示 bio1_crop<-crop(bio1,extent(138,144,33,45)) #範囲を指定して切り抜き plot(bio1_crop) #地図表示 bio1_UTM54 <- projectRaster(bio1_crop, crs=CRS("+init=epsg:3100")) #UTM54に投影変換 bio1_UTM54 #データを確認 options(scipen = 10) #軸の指数表記をやめる plot(bio1_UTM54) #地図表示 51
52.
値の取得、集計 関数一覧その1 ラスタの値を取得、集計します。 ● getValues: ラスタ値を取得 ●
getValuesBlock: 範囲の値を取得 ● getValuesFocal: セルのフォーカル値を取得 ● minValue: 最小値を取得 ● maxValue: 最大値を取得 ● as.matrix: セルの値をmatrixに変換 ● extract: ラスタの値をポイント、ライン、ポリゴンに抽出 52
53.
値の取得、集計 関数一覧 ラスタの値を取得、集計します。 ● sampleRandom: ラスタ値をランダムに抽出 ●
sampleRegular: ラスタ値を規則的に抽出 ● cellStats: セル全体の統計値を計算 ● summary: セル全体のサマリーを計算 ● freq: ラスタ値の頻度を計算 ● crosstab: 2つのラスタレイヤの値をクロス集計 ● unique: ユニーク値を取得 ● zonal: ゾーンごとにラスタ値を集計 53
54.
値の取得、集計 実行 getValuesのExamplesを実行してみます。 ?getValues r <- raster(system.file("external/test.grd",
package="raster")) #ラスタデータ読み込み r #データの情報確認 v <- getValues(r) #ラスタ値の取得 length(v) #値リストの長さ head(v) #値の表示 getValues(r, row=10) #行数を指定してラスタ値を取得 #追加 地図表示 plot(r) 54
55.
ラスタの結合・切り抜き、範囲・解像度の変更 関数一覧その1 複数のラスタを結合、切り抜きます。また、ラスタの範囲や解像度を変更します。 ● merge: データの結合(上のレイヤが優先) ●
mosaic: データのモザイク(重ねる方法を指定) ● crop: データの切り抜き ● extend: 範囲の拡張 ● trim: 範囲外側のNAなどの値を除外 ● aggregate: 大きいセルに値を集約したラスタを作成 ● disaggrigate: 小さいセルに値を補間したラスタを作成 ● resample: 異なるラスタ間で値をリサンプリング 55
56.
ラスタの結合・切り抜き、範囲・解像度の変更 関数一覧その2 複数のラスタを結合、切り抜きます。また、ラスタの範囲や解像度を変更します。 ● shift: データをシフト ●
flip: データを上下、左右入れ替え ● rotate: 経度の範囲を-180~180に変換する ● t: データの縦横を入れ替える 56
57.
ラスタの結合・切り抜き、範囲・解像度の変更 実行 mosicのExamplesを実行してみます。(一部だけ抜粋) ?mosaic r <- raster(ncol=100,
nrow=100) #ラスタデータの作成 r1 <- crop(r, extent(-10, 11, -10, 11)) #範囲を指定して切り出し r2 <- crop(r, extent(0, 20, 0, 20)) #範囲を指定して切り出し r3 <- crop(r, extent(9, 30, 9, 30)) #範囲を指定して切り出し r1[] <- 1:ncell(r1) #ラスタ値を代入 r2[] <- 1:ncell(r2) #ラスタ値を代入 r3[] <- 1:ncell(r3) #ラスタ値を代入 m1 <- mosaic(r1, r2, r3, fun=mean) #モザイクラスタを作成 #追加 plot(r1) #地図表示 plot(m1) #モザイクラスタを地図表示 57
58.
ラスタ演算 関数一覧その1 ラスタ演算をして、新たなラスタデータを作成します。 ● calc: ラスタの演算 ●
overlay: 複数のラスタ間の演算 ● cover: NA値を他のラスタで置換 ● mask: 値をマスクしてラスタを作成 ● cut: カット値で値を再分類 ● subs: データフレームの値でラスタ値を置換する ● reclassify: 値の範囲でラスタ値を再分類する ● init: ラスタ値を初期化する ● stackApply: レイヤ間でのラスタ演算 ● stackSelect: 複数レイヤの値を選択してラスタ作成 ● distance: ラスタ値がNA以外までの最短距離 ● gridDistance: NAでないセルを通過する距離 58
59.
ラスタ演算 関数一覧その2 ラスタ演算をして、新たなラスタデータを作成します。 ● distanceFromPoints: ポイントからの距離 ●
direction: ラスタ値がNA以外からの方角 ● focal: フォーカル演算 ● localFun: レイヤ間でのフォーカル演算 ● boundaries: ラスタ値の境界を作成 ● clump: パッチを作成 ● adjacent: 隣接するセルを検索 ● area: 緯度経度のセルのおおよその面積をラスタ値にする ● terrain: 標高データから傾斜、斜面方位、 TPI、TRI、roughness、flowdirを作成 ● hillShade: 陰影起伏図を作成 ● flowPath: 流路を作成 ● Moran: 空間自己相関の指標 Moran's I、Geary's C を計算 59
60.
ラスタ演算 実行 calcのExamplesを実行してみます。(一部だけ抜粋) ?calc r <- raster(ncols=36,
nrows=18) #ラスタデータの作成 r[] <- 1:ncell(r) #ラスタ値を代入 fun <- function(x) { x * 10 } #ラスタ値を引数とする関数を定義 rc1 <- calc(r, fun) #関数を適用 60
61.
予測、補間 関数一覧 モデル式からラスタ値を予測、補間します。 ● predict: モデル式からラスタ値を予測 ●
interpolate: モデル式からラスタ値を補間 61
62.
データ変換 関数一覧 データの変換をします。 ● raster: SpatialGridクラスからRasterLayerクラスに変換 ●
rasterize: spクラスのポイント、ライン、ポリゴンからラスタに変換 ● rasterToPoints: ラスタからポイントの matrixに変換 ● rasterToPolygons: ラスタからSpatialPolygonsDataFrameのポリゴンを変換 ● rasterToContour: ラスタからSpatialLinesDataFrameのコンターを作成 ● rasterFromXYZ: matrixからラスタを作成 ● rasterFromCells: セル番号からラスタを作成 ● as(x, 'SpatialGridDataFrame'): RasterLayerクラスからSpatialGridクラスに変換 62
63.
ラスタデータの読み込み、書き出し 関数一覧 ラスタデータの読み込みと書き出しをします。 ● raster: ファイルから読み込み ●
stack: ファイルリストから読み込み ● brick:ファイルリストから読み込み ● writeRaster: ファイルに書き出し ● KML: KMLファイルに書き出し 63
64.
地図表示 rasterパッケージのplot関数、plotRGB関数の他に、以下のライブラリなどでも地図表示ができます。 ● mapview ● leaflet ●
ggplot2 ● tmap ● sp 64
65.
応用編 65
66.
陰影段彩図を作成してみる SRTMの標高データから陰影段彩図を作成します。 データの詳細:http://srtm.csi.cgiar.org/ 1. getData関数でSRTMの標高データをダウンロード 2. データの中身を確認 3.
範囲を指定 4. 傾斜、斜面方位を作成 5. 陰影起伏を作成 6. 陰影起伏に標高を重ねて表示 7. histとdensityで値の分布を確認 8. 傾斜データをGeoTIFF形式で書き出し 66
67.
陰影段彩図を作成してみる 実行 alt <- getData('alt',
country='JP',mask=TRUE,path="./alt") #標高データの読み込み class(alt) #クラスの確認 alt #データの情報 alt <- crop(alt,extent(137,141,34.5,38)) #範囲を指定して切り抜き slope = terrain(alt, opt='slope') #傾斜の作成(ラジアン) aspect = terrain(alt, opt='aspect') #斜面方位の作成(ラジアン 北が0で時計回り) hill = hillShade(slope, aspect) #陰影起伏の作成 plot(hill, col=grey(0:100/100), legend=FALSE, main='陰影段彩図') #陰影起伏を表示 plot(alt,col=terrain.colors(10, alpha=0.35),zlim=c(0,1500), add=TRUE) #標高を重ね合わせ x <- terrain(alt, opt=c('slope', 'aspect'), unit='degrees') #傾斜、斜面方位を RasterStackで作成(度数) hist(x) #分布表示 density(x) #分布表示 writeRaster(slope,"slope.tif",format="GTiff",overwrite=TRUE) #GeoTIFFに書き出し 67
68.
正距方位図法を作成してみる 実行 世界地図のデータを正距方位図法で表示します。 1. 世界地図のデータを取得 2. データ形式の変換 3.
投影法の変換 4. ポイントの作成 5. バッファーの作成 6. 地図の表示 68
69.
正距方位図法を作成してみる 実行その1 data(wrld_simpl,package="maptools") #世界地図の読み込み wld<-wrld_simpl %>%
st_as_sf() %>% st_geometry() #SpatialPolygonクラスを一旦sfクラスに変換して、 sfcクラスに変換 #パイプを使わない場合 #wld.sf<-st_as_sf(wrld_simpl) #wld<-st_geometry(wld.sf) aeqd_proj <- '+proj=aeqd +lat_0=39.036694 +lon_0=125.764559' #中心座標を指定して正距方位図法の定義を指定 wld_aeqd <- wld %>% st_transform(aeqd_proj) #投影変換 #表示範囲を指定し地図表示。経緯度図郭線も表示 plot(wld_aeqd, col = 'grey80',graticule = st_crs(4326),axes = TRUE,xlim=c(-2000000,2000000),ylim=c(-3000000,3000000),lon = seq(80,180,by=10),main="正距方位図法で表示 ") #中心位置のポイントを緯経度で作成し投影変換 p<-st_sf(name="平壌",geom=st_sfc(st_point(c(125.764559,39.036694))), crs=4326) %>% st_transform(aeqd_proj) #ポイントを赤色で重ね合わせて表示 plot(p,col="red",pch=20,cex=2,add=T) 69
70.
正距方位図法を作成してみる 実行その2 p_geom<-p %>% st_transform(aeqd_proj)
%>% st_geometry() #sfcに変換(st_transformはしなくて良い) cent<-p_geom[[1]] #中心点のsfgを取得 dist.sfc <- lapply(10^6 * 1:4, function(x) st_buffer(cent,x)) %>% st_sfc() #多重のバッファー sfcを作成 dist.sf <- st_sf(name=c("1000km","2000km","3000km","4000km"),geom=dist.sfc,crs=aeqd_proj) #sfクラスに変換 plot(dist.sf,border="red",col=NA,add=T) #バッファーを重ねて表示 text(data.frame(x=10^6*1:4,y=0*1:4), labels=dist.sf$name, cex = 0.8) #ラベルを表示 p_guam<-st_sf(name="グアム",geom=st_sfc(st_point(c(144.7631,13.4521))), crs=4326) %>% st_transform(aeqd_proj) #別のポイントを作成 plot(p_guam,col="blue",pch=20,cex=2,add=T) #ポイントを青色で重ねて表示 #正距円筒図法で表示(横方向の等距離は歪む) plot(wld, col = 'grey80',graticule = st_crs(4326),axes = TRUE,xlim=c(100,160),ylim=c(10,60),lon = seq(80,180,by=10),main="正距円筒図法で表示 ") plot(st_transform(p,4326),col="red",pch=20,cex=2,add=T) plot(st_transform(p_guam,4326),col="blue",pch=20,cex=2,add=T) plot(st_transform(dist.sf,4326),border="red",col=NA,add=T) 70
71.
土壌図を編集してみる 農研機構の土壌図を編集してみます。 1. 土壌図を読み込み 2. 全域を統合 3.
同じ土壌を融合 4. マルチポリゴンをポリゴンに変換 5. 投影変換して面積計算 6. agrを設定 7. 土壌を抽出して表示 8. 土壌面積をグラフ化 9. ファイルに書き出し 71
72.
土壌図を編集してみる 実行その1 #読み込み、表示 mydir<-"./soil" #ファイル名を指定しても OK ibaraki_soil<-read_sf(mydir,options=c("ENCODING=CP932"))
#読み込み plot(ibaraki_soil["SoilName"]) #属性を指定して表示 #全域を統合(統合して、簡素化) dojyou_area<- st_union(ibaraki_soil) %>% st_simplify(preserveTopology = FALSE,dTolerance = 0.003) plot(dojyou_area) #同じ土壌を融合 soil_union<-ibaraki_soil %>% group_by(SoilName) %>% summarise(do_union=T) #マルチポリゴンをポリゴンにして、投影変換して、面積を計算 soil_UTM54<-soil_union %>% st_cast() %>% st_cast("POLYGON") %>% st_transform(3100) %>% mutate(AREA=st_area(.)) st_agr(soil_UTM54)<-c("identity","aggregate") #集計時の挙動を指定。定数か、集約できる値か、特定値か st_agr(soil_UTM54) #融合した土壌図を表示 plot(soil_UTM54["SoilName"],border=NA,col=rainbow(17,alpha=0.8)) 72
73.
土壌図を編集してみる 実行その2 #抽出 SoilName列を抽出し、特定の土壌のみを表示 soil_UTM54 %>%
dplyr::select("SoilName") %>% filter(SoilName=="褐色森林土") %>% plot(main="褐色森林土") soil_UTM54 %>% dplyr::select("SoilName") %>% filter(grepl("アロフェン",SoilName)) %>% plot(col=rainbow(4,alpha=0.5),border=NA,main="アロフェン") #アロフェンとつくものすべてを表示 soil_UTM54 %>% transmute(AREA_NO_UNIT=as.numeric(AREA)) %>% filter(AREA_NO_UNIT<10000000) %>% plot(border=NA,main="SMALL AREA") #面積が小さいものを表示 filterでUNITに対応していない #データフレーム library(ggplot2) df<-soil_UTM54 %>% as.data.frame() %>% dplyr::select(-geometry) #データフレームに変換してジオメトリ列を削除 df2<-df %>% group_by(SoilName) %>% summarise(TOTALAREA=as.numeric(sum(AREA))) %>% arrange(desc(TOTALAREA)) %>% mutate(SoilName = factor(SoilName, SoilName)) #土壌ごとに面積を集計したものを、降順に並び替え、 factorもその順番にする df2<-df2 %>% mutate(TOTALAREA=TOTALAREA/1000000) #面積を平方キロに変換 ggplot(df2,aes(x=SoilName,y=TOTALAREA))+geom_bar(stat = "identity",fill="lightblue") + labs(title="茨城県の土壌面積 ", x="", y="面積(km^2)")+ theme(axis.text.x = element_text(angle = 90, hjust = 1)) #グラフ表示 #ファイルに書き出し write_sf(soil_UTM54,"soil_UTM54.shp",layer_options="ENCODING=CP932") 73
74.
衛星データをダウンロードして表示してみる Landsat8のデータを表示してみます。 データの詳細:http://sentinel-pds.s3-website.eu-central-1.amazonaws.com/image-browser/ 1. landsatの衛星データをダウンロード 2. ダウンロードしたファイルの一覧を取得 3.
ファイルすべてをstack関数で読み込み 4. データの中身を確認 5. plotで地図表示 74
75.
衛星データをダウンロードして表示してみる 実行 #ダウンロードする場合(今回は実行しない) url<-"http://landsat-pds.s3.amazonaws.com/L8/107/035/LC81070352015218LGN00/" flist<-c("LC81070352015218LGN00_B2.TIF","LC81070352015218LGN00_B3.TIF","LC81070352015218LGN00_B4.TIF","LC81070352015218LGN00_B5.TIF") mydir<-"./landsat" #ここだけ実行 dir.create(mydir, showWarnings =
FALSE) for(fi in flist){ f<-paste(url,fi,sep="") dest<-paste(mydir,fi,sep="/") if(!file.exists(dest)) download.file(f,dest,mode="wb") } #ここから files<-list.files(mydir,pattern="TIF$",full.names=TRUE) #フォルダの中のファイル名一覧を取得 landsat_org<-stack(files) #RasterStackを作成 class(landsat_org) #クラスの確認 landsat_org #データ情報の確認 names(landsat_org) #レイヤ名の表示 nlayers(landsat_org) #レイヤ数の表示 dim(landsat_org) #サイズ、レイヤ数の表示 crs(landsat_org) #空間参照の表示 plot(landsat_org,1,col=gray.colors(30)) #レイヤ番号を指定して表示 75
76.
衛星データを切り抜いてカラーで表示してみる Landsat8のデータを必要な範囲で切り抜いて、 TrueColorとFalseColorで表示します。 1. 行政境データから必要な範囲を算出 2.
衛星データを範囲で切り抜き 3. plotRGB関数でバンドを指定し TrueColorで表示 4. plotRGB関数でバンドを指定し FalseColorで表示 76
77.
衛星データを切り抜いてカラーで表示してみる 実行 ibaraki<-spdf_jpn_pref(admin_name="茨城県") #茨城県の境界データを読み込み ibaraki_UTM54<-ibaraki %>%
st_transform(32654) #UTM54に投影変換 ibaraki_cities<-ibaraki_UTM54 %>% filter(grepl("つくば市|つくばみらい市|常総市",city_name)) #3市を抽出 #plot(ibaraki_cities) bbox<-ibaraki_cities %>% st_bbox() %>% as.vector() #領域を取得 landsat<-crop(landsat_org,extent(bbox[1],bbox[3],bbox[2],bbox[4])) #衛星画像を3市の範囲で切り抜き #landsat<-crop(landsat,extent(400000,430000,3980000,4000000)) #RasterStackからレイヤ番号で指定 plotRGB(landsat, r = 3, g = 2, b = 1, axes = TRUE, stretch = "lin", main = "Landsat8 True Color Composite") #トゥルーカラーで表示(自然な色合い) plotRGB(landsat, r = 4, g = 3, b = 2, axes = TRUE, stretch = "lin", main = "Landsat8 False Color Composite") #フォルスカラーで表示(植物を赤色で強調) plot(ibaraki_cities,border="white",lwd=2,col=NA,add=T) #3市の境界を重ね合わせ 77
78.
衛星データから植生地域と水域を抽出してみる Landsat8のデータから植生指標 NDVIを算出します。 1. 衛星データからNDVIを算出 2.
閾値で植生地域と思われる場所を抽出 3. 衛星データのバンドの値から k-mean法で教師なし分類 4. 水域と思われるカテゴリを抽出 5. 地図表示して確認 植生指標は植生の有無・活性度を表す指標 -1~1の値で、大きい値ほど植生の活性度が高い 78
79.
衛星データから植生地域と水域を抽出してみる 実行 NIR<-raster(landsat,4) #近赤外バンドのラスタデータ Red<-raster(landsat,3) #赤色バンドのラスタデータ ndvi
<- (NIR-Red)/(NIR + Red) #植生指標NDVIを計算 plot(ndvi, col = rev(terrain.colors(30)), main = 'NDVI from landsat8') #地図表示 veg <- ndvi >= 0.4 #植生の活性度が大きい場所を抽出 #値を残したい場合はこちら #veg <- calc(ndvi, function(x){x >= 0.4}) plot(veg,legend=FALSE,main = '植生地域を抽出 ') #地図表示 #教師なし分類 values(landsat) %>% head #追加 値の確認 km <- kmeans(values(landsat), centers=5, iter.max=500, nstart=3, algorithm="Lloyd") #クラスター分類 kmr <- setValues(ndvi, km$cluster) #クラスター分類の結果からラスターデータを作成 plot(kmr,main='ランドサット画像の教師なし分類 ') #地図表示 water<-kmr==1 #水に分類されたクラスターを抽出( 1じゃないかもしれない) plot(water,col=c("white","blue"),main = '水域を抽出') #地図表示 79
80.
土壌と地形の関係を調べてみる 農研機構の土壌データと地球地図の標高データを使って、土壌と地形の関係を調べてみます。 1. 標高データを読み込み、空間参照を設定 2. 土壌エリアで標高データを切り取り 3.
起伏と傾斜を作成し表示 4. 土壌データをラスタ化 5. 土壌エリアを投影変換して、ランダムポイントを作成 6. 標高、傾斜、斜面方位、土壌の値をランダムポイントに抽出 7. 傾斜と標高、斜面方位、土壌のモデルを作成し、予測 80
81.
土壌と地形の関係を調べてみる 実行その1 #標高を読み込み f<-"gm-jpn-el_u_1_1/jpn/el.tif" dem<-raster(f) dem crs(dem)<-CRS("+init=epsg:4612") #土壌エリアでdemを切り取る bbox<-dojyou_area %>% st_bbox()
%>% as.vector() dem_crop<-crop(dem,extent(bbox[1],bbox[3],bbox[2],bbox[4])) plot(dem_crop) plot(dojyou_area,col=NA,add=T) #起伏と傾斜の作成 dem_UTM54 <- projectRaster(dem_crop, crs=CRS("+init=epsg:3100"),method="bilinear") #標高データの投影変換 slope = terrain(dem_UTM54, opt='slope') #傾斜の作成 aspect = terrain(dem_UTM54, opt='aspect') #斜面方位の作成 hill = hillShade(slope, aspect) #陰影起伏の作成 plot(hill, col=grey(0:100/100), legend=FALSE, main='陰影段彩図') #陰影起伏の作成(タイトル間違い) plot(slope*180/pi) #傾斜をラジアンから度に変換して表示 plot(aspect*180/pi,col=rainbow(8)) #斜面方位をラジアンから度に変換して表示 81
82.
土壌と地形の関係を調べてみる 実行その2 ##土壌データのラスタ化 plot(soil_UTM54) #ベクタデータの表示 soil.sp<-as(soil_UTM54,"Spatial") #sfクラスからSpatialPolygonsDataFrameクラスに変換(spパッケージ) soil.sp$SoilName<-as.factor(soil.sp$SoilName)
#SoilNameをfactorに変換 levels(soil.sp$SoilName) #factorを確認 soil<-rasterize(soil.sp,dem_UTM54,"SoilName",fun="last") #SoilNameのfactor値をラスタ化。dem_UTM54の範囲と解像 度を使用。1セルに複数のポリゴンがある場合は最後のものを使用。 plot(soil,breaks=1:17,col=rainbow(17)) #ラスタ化した土壌図を表示 plot(soil_UTM54,col=NA,add=T) #土壌の境界ポリゴンを表示 #ランダムポイント作成 dojyou_area_UTM54<-dojyou_area %>% st_transform(3100) #土壌範囲のベクタデータを投影変換 pnt<-st_sample(dojyou_area_UTM54,10000) #範囲内に1万点をランダムに作成 plot(dojyou_area_UTM54) #範囲の地図表示 plot(pnt,pch=".",add=T) #ランダム点の表示 82
83.
土壌と地形の関係を調べてみる 実行その3 #ラスタから値を抽出 envs<-stack(dem_UTM54,slope,aspect,soil) #標高、傾斜、斜面方位、土壌の RasterStackを作成 names(envs)<-c("elev","slope","aspect","soil")
#RasterStackのレイヤ名を変更 envs #データの確認 pnt.sp<-as(pnt,"Spatial") #SpatialPointsクラスに変換 ex<-raster::extract(envs,pnt.sp,df=TRUE) #ランダムポイントの位置の RasterStackの値を抽出 head(ex) #抽出した値の確認 #モデル作成と予測 ex$soil<-as.factor(ex$soil) #土壌データはfactorに変換 pairs(ex[,2:5],cex=0.1) #ペアプロット m<-glm(slope~elev+aspect+soil,data=ex) #傾斜の決定要因をモデル化 summary(m) #モデルの概要(モデルは出鱈目です) result<-predict(envs,m) #モデルを全域に適用 par(mfrow=c(1,2)) #追加(プロットを2列表示) plot(result) #予測した傾斜の結果を地図表示 slope_mask<-mask(slope,soil) #土壌の範囲で傾斜データをマスク(周辺部分を消す) plot(slope_mask) #実際の傾斜を表示 83
84.
参考URL ベクタ ● https://cran.r-project.org/web/packages/sf/index.html ● https://cran.r-project.org/web/packages/sf/vignettes/sf1.html ●
https://cran.r-project.org/web/packages/sf/vignettes/sf2.html ● https://cran.r-project.org/web/packages/sf/vignettes/sf3.html ● https://cran.r-project.org/web/packages/sf/vignettes/sf4.html ● https://cran.r-project.org/web/packages/jpndistrict/index.html ラスタ ● https://www.rdocumentation.org/packages/raster/versions/2.5-8/topics/raster-package ● https://cran.r-project.org/web/packages/raster/index.html 全般 ● http://rspatial.org/index.html ● https://edzer.github.io/UseR2017/ ● http://ooooooha.hatenablog.com/ ● http://uribo.hatenablog.com/ ● http://notchained.hatenablog.com/ ● https://www.karada-good.net/ ● https://suryu.me/ 84
85.
以上、お疲れ様でした。 85
Baixar agora