SlideShare ist ein Scribd-Unternehmen logo
1 von 79
Downloaden Sie, um offline zu lesen
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
カッパ(妖怪)の生息適地 
マップ作成入門 
株式会社エコリス 水谷貴行 
1
2 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
この資料は以下の本から 
[オープンデータ+QGIS] 
統計・防災・環境情報がひと目でわかる地図 
の作り方 
ハンズオン用にスピンオフした内容になってい 
ます。ぜひ、本書もあわせてご覧いただければ 
と思います。 
技術評論社サイト 
http://gihyo.jp/book/2014/978-4-7741-6913-2 
Amazonサイト 
http://www.amazon.co.jp/dp/4774169137
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
内容 
入門編(前半): 14:00~15:30 
 カッパの生息適地マップの作成 
   オープンデータなどの公開されているデータを利用して、カッパの生息適地を 
   QGISで可視化してみます。 
~10分休憩~ 
応用編(後半): 15:40~17:00 
 カッパの生息適地マップの分析 
   カッパの生息適地をGDAL、Python、GRASS、Rを連携して分析してみます。 
3
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
事前準備 
•Windowsパソコン(7以降)を使用します。 
•OSGeo4Wで、QGIS2.4、GRASS6.4をインストールします。 
•Python、GDALはOSGeo4Wでインストールされるものを利用します。 
•R 3.1をインストールします。 
•配布したデータ「kappadata」フォルダは、デスクトップに保存します。 
4
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
使用データ 
本ハンズオンでは、岩手県遠野市周辺 2次メッシュ 「594104」のデータを使用します。 
kappadata¥dataの中にあらかじめダウンロードしておいたデータが入っています。 
・国土数値情報(http://nlftp.mlit.go.jp/ksj/) 
「河川」データ [W05-07_03_GML.zip] 
・自然環境情報GIS(http://www.vegetation.biodic.go.jp/) 
「1/25,000植生図」GISデータ [shp594104.zip] 
・基盤地図情報(http://www.gsi.go.jp/kiban/) 
「数値標高モデル」10mメッシュデータ [FG-GML-5941b-DEM10B.zip] 
・エコリス(http://www.ecoris.co.jp) 
「カッパ確認位置」データ(未公開) 
5
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データについて 
ご注意! 
・基盤地図情報「数値標高モデル」のデータは、今回の講習のためだけの「一時的な資料とし 
て利用する」ものとして、あらかじめ国土地理院のサイトからダウンロードしておいたものを 
配布しています。 
・講習終了後、「数値標高モデル」のデータおよび「数値標高モデル」を利用して作成した 
データは、速やかに破棄してください。 
・家で復習したい場合は、国土地理院のサイトでアカウントを取得し、自分でデータを 
ダウンロードしてください。 
・その他のデータは、出典の明示をすることで再配布可能なデータとなっているので、その規 
約に従ってご利用ください。 
6
生息適地 
生息適地推定とは 
環境データ 
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
(地形、植生、気候など) 
生物データ 
(生態情報、確認位置など) 
7 
地形、植生、気候などの環境データと、 
生物の生息環境や確認位置などの情報か 
ら、その生物が生息するのに適している 
場所を推測して可視化する手法を生息適 
地推定と言います。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編 
 カッパの生息適地マップの作成 
8
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
カッパの生態について 
 川や池に生息し、陸上も移動する 
 胡瓜を主食とする 
 頭上の皿の乾燥に極めて弱い 
参考文献:Yanagida(1910). Tono monogatari 
予備知識 
「カッパ淵」 
画像出典:wikipedia 
9
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編の流れ 
1. 河川データから河川からの距離図を作成 
2. 植生データから畑地面積率図を作成 
3. 標高データから日射量図を作成 
4. データを組み合わせて生息適地マップを作成 
10 
 川や池に生息し、陸上も移動する 
 胡瓜を主食とする 
 頭上の皿の乾燥に極めて弱い
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編 
1. 
河川データから 
河川からの距離図を作成する 
11
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データのダウンロード国土数値情報から「河川」データを 
ダウンロードします。 
JPGIS2.1→河川→岩手を選択座標系がJGD2000になっているのを確認 
12
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データの読み込み 
ダウンロードした河川データを 
QGISに読み込みます。 
「W05-07_03-g_Stream.shp」を 
ドラッグアンドドロップ 
※「data¥W05-07_03_GML」の中に入っ 
ています。 
ダウンロードしたデータの中にはprjファイル 
がないため空間参照システム(測地系や投影 
法)が自動判別できません。 
そのため「空間参照システム選択」ウインドウ 
でデータの空間参照システムを定義します。 
「CRSが設定されていません」とメッセージが 
出る場合は、レイヤを右クリックして「レイヤ 
CRSを設定する」を選択します。 
次ページ参照 
13
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
空間参照の定義 
レイヤを右クリック→「レイヤCRSを設定 
する」 
データの空間参照システム(測地系や 
投影法)を定義します。 
フィルターにJGD2000と入力して、 
EPSG:4612を選択 
14
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データの切り出し 
データを2次メッシュ594104の範囲で切り出し 
て保存します。 
レイヤを右クリック→「名前をつけて保存」 
「形式」→ESRI Shapefile 
「名前をつけて保存」→ブラウズ「kasen.shp」 
ファイルの保存先は、デスクトップの中の 
「kappadata¥mydata」を指定してください。 
「領域」をチェック→以下を入力 
北 39.41666667 南 39.3333333 
西 141.5 東 141.625 
15 
「エンコーディング」→Shift_JIS 
「保存されたファイルを地図に追加する」を 
チェック
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
投影法の変換 
投影法をUTMゾーン54のデータに変換します。 
「kasen」レイヤを右クリック→「名前をつけて 
保存」 
「形式」→ESRI Shapefile 
「名前をつけて保存」→ブラウズ 
「kasen_UTM54.shp」 
「CRS」→ブラウズ→ 
JGD2000/UTM zone54N(EPSG:3100)を選択 
16 
注意 
ファイル名やパス名に日本語があると、このあと利用す 
るプロセッシングが上手く動作しない場合があるので、 
本ハンズオンでは日本語ファイル名は使用しません。 
ファイルの保存先は、デスクトップの中の 
「kappadata¥mydata」を指定してください。 
※キャプチャ画像の保存先が違っている場合があります 
が、読み変えてください。 次ページ以降も同じ。 
「エンコーディング」→Shift_JIS
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ラスタデータに変換 
セルサイズが10m✕10mで川の部分のラスタ値が1の 
GeoTIFFファイルを作成します。 
「kasen_UTM54.shp」を読み込み 
メニュー→ラスタ→変換→ラスタ化 を選択 
「出力ファイル」を指定「kasen.tif」 
「地図の単位ピクセルでのラスタ解像度」を選択 
「水平」「垂直」に10を入力 
  を押して、 
gdal_rasterizeのあとに -burn 1 と入力 
17 
メニュー→プロジェクト→新規 を選択
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ラスタデータの確認 
レイヤを右クリック→プロパティ→スタイル 
→バンド表示→最大→1と入力 
スタイルを変更してラスタデータを確認します。 
河川部分が白く表示されるのを確認 
18
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
距離を計算 
メニュー→ラスタ→解析→プロキシミティ 
を選択 
河川ラスタからの距離を計算します。 
「出力ファイル」を指定「kasen_distance.tif」 
 ※ファイルの種類でGeoTIFFを選択のこと! 
プロキシミティは、ラスタ値が0以外の場所か 
らの距離を計算します。(距離を計算するらラ 
スタ値を指定することも可能です) 
19
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
河川からの距離図距離を算出したレイヤにスタイルを設定して、距離に 
より色分けした「河川からの距離図」を作成します。 
レイヤを右クリック→プロパティ→スタイル 
河川からの距離で色分けされているのを確認 
レンダータイプ→単バンド疑似カラー 
新規カラーマップを作成→Spectral 
最小 0、最大1000と入力→分類 
20 
既定スタイルとして保存しておく
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編 
2. 
植生データから 
畑地面積率図を作成する 
21
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データのダウンロード自然環境情報GISから「1/25,000 植生図」 
GISデータをダウンロードします。 
「Shapeデータダウンロード」→「植生調査情 
報提供ホームページへ」を選択 
2次メッシュ(594104)の 
1/25,000植生図GISデータをダウンロード 
22
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データの読み込みダウンロードした植生データを 
QGISに読み込みます。 
メニュー→「レイヤ」→「ベクタレイヤの追加」 
ドラッグアンドドロップで読み込むと属性テーブルの 
エンコードが判別できず日本語の属性テーブルが文字 
化けする場合があります。 
「エンコーディング」→「Shift_JIS」を選択 
「データセット」→「p594104.shp」を選択 
※「data¥shp594104」の中に入っていま 
す。 
23 
QGISでメニュー→プロジェクト→新規 を選択
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
空間参照の定義データの空間参照システム(測地系や 
投影法)を定義します。 
フィルターにJGD2000と入力して、 
EPSG:4612を選択 
ダウンロードしたデータの中にはprjファイルが 
ないため空間参照システム(測地系や投影法) 
が自動判別できません。 
そのため「空間参照システム選択」ウインドウ 
でデータの空間参照システムを定義します。 
「CRSが設定されていません」とメッセージが 
出る場合は、レイヤを右クリックして「レイヤ 
植生データのREADMEファイルに世界測地系のCRSを設定する」を選択します。 
緯度経度のデータだと書かれています。 
24
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
畑地の選択植生データから畑地雑草群落を選択します。 
式に ”HANREI_N” = ’畑地雑草群落’ 
と入力して「選択」 
レイヤを右クリック→「属性テーブルを開く」 
「条件を使った地物選択」ボタンを押す 
25
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
畑地データの保存 
レイヤを右クリック→名前をつけて保存 
選択した畑地雑草群落のみをシェープファイル 
に保存します。同時に投影法もUTMゾーン54に 
変換します。 
「形式」→ESRI Shapefile 
「名前をつけて保存」→「hatati.shp」 
「CRS」→ブラウズ→ 
JGD2000/UTM zone54N(EPSG:3100)を選択 
「選択された地物のみを保存する」にチェック 
26
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ラスタデータに変換 
セルサイズが10m✕10mで畑地の部分のラスタ値が 
100のGeoTIFFファイルを作成します。 
メニュー→プロジェクト→新規 を選択 
メニュー→ラスタ→変換→ラスタ化を選択 
「出力ファイル」を指定「hatati.tif」 
「地図の単位ピクセルでのラスタ解像度」を選択 
「水平」「垂直」に10を入力 
  を押して、 
gdal_rasterizeのあとに -burn 100 と入力 
27 
「hatati.shp」を読み込み
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
プロセッシング設定 
メニュー→プロセッシング→オプションと構成 
畑地面積率はプロセッシングツールボックス 
のGRASSコマンドを利用します。はじめ 
に、プロセッシングの設定を確認します。 
メニュー→プロセッシング→ツールボックス 
からツールボックスを開く 
プロバイダ→GRASS commandsの設定を確認 
28
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
畑地面積率を計算 
ツールボックスから 
「GRASS commands」→「Rater」→「r.neighbors」 
※ツールボックス下部のリストボックスを「Advanced Interface」 
に変更しておく。 
畑地ラスタから1km圏内の畑地面積率をGRASSの 
r.neighborsを使って計算します。 
「Neiborhood operation」→average 
「Neiborhood size」→101 
※ Neiborhood sizeは奇数のみ 
「Use circular neighborhood」→Yes 
「Output layer」を指定「hatati1km.tif」 
29 
「Input raster layer」→hatati
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
畑地面積率の解説r.neighborsを使った畑地面積率の算出方法を 
説明します。 
r.neighborsは、中心セルから指定範囲内を計 
算対象セルとしてラスタ値の平均や合計などを 
計算します。その計算を中心セルを移動させな 
がらラスタデータ全域で行います。 
「Neighborhood size(1辺のセル数)」は101 
セルで、ラスタ解像度は10mなので、 
10m✕101セル=1010m が1辺の長さとなりま 
す。そして、「circular neighborhood」を指定 
しているので、1010mを直径とする円内のセル 
が計算対象セルとなります。 
「Neighborhood operation」はaverageなの 
で、計算対象セルのラスタ値の平均を計算しま 
す。今、ある場所が畑地であれば、そのラスタ値 
は100、そうでなければ0なので、計算対象セル 
全域が畑地であれば、その平均は100、半分なら 
50、なければ0となります。 
よって、r.neighborsにより 
約1km圏内の畑地面積率(0~100)がラスタ全域で 
計算できます。 
※近傍解析、フォーカル統計と言ったりもします。 
30
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
畑地面積率図算出した畑地面積率レイヤにスタイルを設定して、色 
分けした「畑地面積率図」を作成します。 
1km圏の畑地面積率(0~100)で色分けさ 
れているのを確認 
レイヤを右クリック→プロパティ→スタイル 
レンダータイプ→単バンド疑似カラー 
新規カラーマップを作成→Spectral 
最小 0、最大100と入力→反転に 
チェック→分類 
31 
既定スタイルとして保存しておく
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編 
3. 
標高データから 
日射量図を作成する 
32
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データのダウンロード基盤地図情報から「数値標高モデル」データ 
をダウンロードします。 
国土地理院のアカウントを取得してログイン 
数値標高モデル JPGIS(GML)形式を選択 
10mメッシュの 
「594104FG-GML-5941b-DEM10B.zip」 
をダウンロード 
33
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
GMLデータの変換ダウンロードした標高GMLデータを 
GeoTIFF形式に変換します。 
エコリス「基盤地図情報 標高DEMデータ変換 
ツール」をダウンロード 
※今回は、programの中に入っています。 
「変換結合.vbs」をダブルクリック 
投影法は緯度経度 →0 を入力 
陰影起伏図を作成しますか?→はい 
フォルダ選択→「data¥FG-GML-5941b- 
DEM10B」 
海域の標高→はい(0) 
「変換終了しました」のメッセージで完了 
選択フォルダの中に「merge.tif」があればOK 
34
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データの読み込み 
GeoTIFF形式に変換した標高データを 
QGISに読み込みます。 
「data¥FG-GML-5941b-DEM10B 
¥merge.tif」をドラッグアンドドロッ 
プ 
35 
メニュー→プロジェクト→新規 を選択
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
投影法の変換 
標高ラスタデータの投影法をUTMゾーン54に 
変換します。 
メニュー→「ラスタ」→「投影法」→「ワー 
プ」を選択 
入力ファイル→merge 
「出力ファイル」→選択 
「iwate_demUTM54.tif」 
「ソースSRS」→JGD2000(EPSG:4612)を選択 
「ターゲットSRS」→ 
JGD2000/UTM zone54N(EPSG:3100)を選択 
36 
「リサンプリングメソッド」→双線型
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
日射量の解説日射量の計算はプロセッシングツールボック 
スのGRASSコマンドr.sunを使用します。 
r.sunによる日射量の算出方法を説明します。 
日射には、直達日射、反射日射、散乱日射が 
あります。 
総日射は、直達日射+反射日射+散乱日射に 
なります。 
総日射量は、1日分の総日射の合計値です。 
単位は、[Wh・㎡・1day]です。 
日射量の計算には、あらかじめ用意しておい 
た、標高、傾斜、傾斜方位のデータを使用 
し、GRASSのr.sunのコマンドを利用します。 
37 
詳細は、GRASS GISの r.sunの マニュアルを 
参照ください。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
傾斜角度の計算 
標高データから傾斜角度を計算します。 
メニュー→ラスタ→解析→DEM を選択 
「出力ファイル」→選択「slope.tif」 
「モード」→傾斜 
38 
メニュー→プロジェクト→新規 を選択 
「iwate_demUTM54.tif」を読み込み 
「入力ファイル」→「iwate_demUTM54」
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
傾斜方位の計算 
傾斜と同様に標高データから傾斜方位を計算します。 
メニュー→ラスタ→解析→DEM を選択 
「入力ファイル」→「iwate_demUTM54」 
「出力ファイル」→選択「aspect.tif」 
「モード」→傾斜方位 
39 
「三角法角度を返す」→ チェック 
「平地の値に0を返す」→チェック 
「三角法角度を返す」により傾斜方位が東0°、北 
90°、西180°、南270°となります。 
「平地の値に0を返す」により、傾斜のない平坦地 
が0°となります。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
傾斜方位の確認 
レイヤを右クリック→プロパティ→スタイル 
スタイルを変更して斜面方位を確認します。 
斜面方位によって色分けされるのを確認 
40 
レンダータイプ→単バンド疑似カラー 
  を押して、↑のように値と色を追加
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
日射量を計算標高、傾斜、傾斜方位のデータから日射量を計算します。 
「Elevation layer」→「iwate_demUTM54」(標高) 
41 
ツールボックスから 
「GRASS commands」→「Rater」→「r.sun」 
「Aspect layer」→「aspect」(傾斜方位) 
「Name of the input slope raster map」→「slope」(傾斜) 
「No. of day of the year」→172 
※1月1日から数えて172日目(夏至のあたり)を計算 
「Output global(total) irradiance/irradiation layer」 
→「irradiation.tif」(総日射量) 
その他の「Open output file after running algorithm」の 
チェックを外す
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
日射量図レイヤのスタイルを設定して、日射量により色分けし 
た「日射量図」を作成します。 
レイヤを右クリック→プロパティ→スタイル日射量で色分けされているのを確認 
レンダータイプ→単バンド疑似カラー 
最小/最大にチェック→読み込み 
新規カラーマップを作成→Spectral 
反転にチェック→分類 
42 
既定スタイルとして保存しておく
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編 
4. 
データを組み合わせて 
生息適地マップを作成 
43
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
生息適地の計算 
これまで作成したラスタデータを組み合わせて 
カッパの生息適地をラスタ計算機で算出します。 
メニュー→ラスタ→ラスタ計算機 を選択 
「ラスタバンド」の畑地を選択→カレントレイヤ 
の領域 を押す 
ラスタ演算式に次の式を入力(コピペでもOK) 
44 
メニュー→プロジェクト→新規 を選択 
「kasen_distance.tif」「hatati1km.tif」 
「irradiation.tif」を読み込み 
「出力レイヤ」→選択「kappa.tif」※.tifも入力 
((("kasen_distance@1" < 100) * 100 + (100 <= 
"kasen_distance@1") * ("kasen_distance@1" < 500) * 
50 + ("kasen_distance@1" >= 500) * 10) * 
"hatati1km@1" * (100 - "irradiation@1" / 100)) ^ 
0.33333 
↑ダブルクリック 
で演算式↓に追加
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ラスタ演算式の解説1 ラスタ演算式の意味を説明します。 
※「河川からの距離」がkasen_distance、「畑地面積率」がhatati1km、 
「日射量」がirradiationという名前のラスタレイヤになっています。 
( 
( ("kasen_distance@1"<100)*100 + (100<="kasen_distance@1")*("kasen_distance@1"<500)*50 + ("kasen_distance@1">= 500)*10 ) * 
"hatati1km@1" * 
(100 - "irradiation@1" / 100) 
) ^ 0.33333 
最初のカッコの部分は、kasen_distanceのラスタ値が100より小 
さければ1、そうでなければ0を返すという条件式です。 
45 
("kasen_distance@1" < 100) 
(100 <= "kasen_distance@1") * ("kasen_distance@1" < 500) * 50 
次の部分は、kasen_distanceが100以上であれば1を返す部分と、 
kasen_distanceが500より小さければ1を返す部分を掛けています。 
つまり、kasen_distanceが100以上かつ500より小さければ1を返し、 
そうでなければ0を返します。また、最後にそれに対して50を掛けて 
いるので、この式の部分は河川からの距離が100mから500mの場所 
はその値を50にするという意味になります。 
ここまでの説明からkasen_distanceを含む 
1段目の式は、以下の表のようにラスタ値を 
変更するという意味になります。 
つまり、川に近いと良い場所(100点)、遠 
いと悪い場所(10点)になります。 
演算式全体 
演算式の説明1 
演算式の説明2 
演算式の説明3 
河川までの距離ラスタの値 
0~100m 100 
100~500m 50 
500m~ 10
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ラスタ演算式の解説2 ラスタ演算式の意味を説明します。 
※「河川からの距離」がkasen_distance、「畑地面積率」がhatati1km、 
「日射量」がirradiationという名前のラスタレイヤになっています。 
( 
( ("kasen_distance@1"<100)*100 + (100<="kasen_distance@1")*("kasen_distance@1"<500)*50 + ("kasen_distance@1">= 500)*10 ) * 
"hatati1km@1" * 
(100 - "irradiation@1" / 100) 
) ^ 0.33333 
2段目のhatati1kmの部分は、なにも変更せず0~100の畑地面積 
率の値をそのまま使います。 
46 
"hatati1km@1" 
(100 - "irradiation@1" / 100) 
3段目のirradiationの部分は、切片が100で傾きが-1/100の直線式となって 
います。なので、日射量が0(Wh.㎡.1day)だとラスタ値が100で、日射 
量が10000(Wh.㎡.1day)だと0になるように変換されます。 
つまり、日射量が少ないと良い場所(100 点)、多いと悪い場所(0点) 
になります。 
最後に、kasen_distance、hatati1km、irradiationの 
部分を掛けあわせて、それを0.33333乗しています。 
これは各ラスタレイヤを0~100になるように変換し 
た上で、その相乗平均をとることを意味します。 
つまり、ラスタレイヤの内1つでも0だと全体が0にな 
り、すべてのレイヤが100であれば100になります。 
演算式全体 
演算式の説明4 
演算式の説明5 
演算式の説明6 
まとめ 
総合すると、河川までの距離が近く、畑地が多く、 
日射量が少ない場所が、カッパが出没しやすい場所 
(100点)、反対に河川までの距離が遠く、畑地が少 
なく、日射量が多い場所はカッパが出没しにくい場 
所(0点)となるようにラスタ値を変換する式になっ 
ています。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
生息適地マップレイヤのスタイルを設定して、生息適地の得点により 
色分けした「カッパ生息適地マップ」を作成します。 
レイヤを右クリック→プロパティ→スタイル生息適地としての得点で色分けされているの 
を確認 
レンダータイプ→単バンド疑似カラー 
最小/最大にチェック→読み込み 
新規カラーマップを作成→Spectral 
反転にチェック→分類 
47 
既定スタイルとして保存しておく
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
生息適地マップ色々なレイヤを重ねたり、スタイルを変更したりして 
「カッパ生息適地マップ」を仕上げてみましょう! 
48
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
応用編 
 カッパの生息適地マップの分析 
49
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
入門編のおさらい 
生息適地を推定するための地図データをQGISで変換&作成しました。 
◯ データを見ながら操作できる 
✕ やり直し、繰り返しが面倒 
生息適地を「それっぽい演算式」で推定しました。 
◯ それっぽい地図が作成できる 
✕ 演算式の根拠が弱い 
50
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
応用編の流れ 
★ やり直し、繰り返しが簡単 
GDAL&GRASSコマンドで 
地図データ作成 
★ 演算式を分析的に構築 
Rで生息適地マップの分析・作成 
51 
応用編の内容は、ここで完全に理解できなくても大丈夫です。コマン 
ドを使ったGISデータの扱いがどんな感じなのか雰囲気を掴んでもらえ 
ればOKです。各ソフトの習得法も紹介しますので、今後の独学のため 
のステップとしてもらえればと思います。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
応用編 
GDAL&GRASSコマンドで 
地図データ作成・変換 
52 
入門編で作成したデータ(河川からの距離、畑地面積率、日射量、生 
息適地)を、GDALとGRASSコマンドを組み合わせて作成します。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
GDALとは最初にGDALについて簡単な説明をします。 
・GISデータ変換のためのプログラムライ 
ブラリ 
・GDAL Utility ProgramsというGISデー 
タ変換のための便利なコマンド集を提供し 
ている 
・ GDALは多くのソフトでGISデータ変換 
のために利用されている 
GDALを利用しているソフト 
53 
ArcGIS
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
GDALコマンドGDAL Utility Programsで提供されている 
コマンドについて説明します。 
54 
ラスタ用ベクタ用 
ラスタ情報表示 
ファイル形式変換 
投影法変換とか 
標高関連、傾斜とか 
タイル地図作成 
べクタ→ラスタ変換 
距離ラスタ作成 
ラスタ→ベクタ変換 
ラスタ計算機 
ベクタ情報表示 
投影変換、ファイル形式変換 
GDALコマンドを使えば、GISデータをいろいろ 
操作できます。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
GDALコマンド例GDALコマンドの例を紹介します。 
55 
౎ژḱᴨḩὟᾛᾜᾤὥᾫᾠᾝὠ᷂ḀͨΌӭಐࣈὟᾪᾟᾘᾛᾜὥᾫᾠᾝὠḉ܂᷐ࣶḂ 
gdaldem hillshade dem.tif shade.tif 
౎ژḱᴨḩᷥЖঢ૷ḉὬὧᾤ✕Ὤὧᾤᷢ೅ٯ᷐Ḃ 
gdalwarp -r bilinear -tr 50 50 dem.tif dem50.tif 
͆૷׊૷ᷥḡḑᴨṁḿḋḎṕḉᾌᾋᾄᷢ೅ҙ᷐Ḃ 
ogr2ogr -t_srs epsg:3100 data_utm.shp data.shp 
これをOSGeo4Wコンソールに打ち込むだけ
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
OSGeo4Wの起動OSGeo4Wを起動して、簡単なコマンド操作をして 
みます。 
OSgeo4W Shellのアイコン 
をダブルクリックして起動。 
もしくは、スタート→すべてのプログラム 
→OSGeo4W→OSGeo4W Shell 
56 
コマンドを打って以下の操作を実行します。 
•kappadataフォルダに移動 
•kappadataの中のファイル一覧を表示 
•mydataフォルダをmydata_qgisに名前を変更 
•新たに空のmydataフォルダを作成 
άά὚܂դḿḓṕḪᷢ̈́ବ 
>cd kappadata 
άά὚ḿḋḎṕḉ͔ฅ౓ݸ 
>dir 
άά὚ḿḓṕḪ൮ᷥ೅ٯ 
>mv mydata mydata_qgis 
άά὚ࢡ᷎ᶻḿḓṕḪᷥ܂ࣶ 
>mkdir mydata 
ファイル名の途中でtabを押すと補完できます。 
↑↓ボタンを押すと、コマンド履歴が表示できます。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
河川からの距離河川からの距離図をコマンドで作成してみます。 
57 
άάὗ὚὾ύὸᾃᷥधપ᷏᷁᷵ᷡᶻᴮṋṌṔѦଔุᷝᷟ୸മلḒṝḝᴨḱḍṝḚᷥ݊પᴯ 
set GDAL_CACHEMAX=1024 
set GDAL_FILENAME_IS_UTF8=NO 
set SHAPE_ENCODING=CP932 
άάὗ὚ϳशḱᴨḩḉ݊પఇ̷ᷞḙṔḭṁ᷎ᷝଈΌೳḉ೅ҙ 
ogr2ogr -clipsrc 141.5 39.3333333 141.625 39.4166667 -s_srs epsg:4612 -t_srs epsg:3100 
mydatakasen_UTM54.shp dataW05-07_03_GMLW05-07_03-g_Stream.shp 
άάὗ὚Жঢ૷Ὠὧᾤ✕Ὠὧᾤᷞϳशಊಠ᷃Ὠᷥṓḣḩᷢ೅ҙ 
gdal_rasterize -burn 1 -tr 10 10 -l kasen_UTM54 mydatakasen_UTM54.shp mydatakasen.tif 
άάὗ὚ṓḣḩਯ᷃Ὠ᷂ḀᷥԵฑḉבܭ 
gdal_proximity -distunits GEO -values 1 mydatakasen.tif mydatakasen_distance.tif 
άάὗ὚ḱᴨḩᷥѐ஁ᴮṓḣḩᴯ 
gdalinfo mydatakasen_distance.tif 
άάὗ὚ḱᴨḩᷥѐ஁ᴮṃḙḩᴯ 
ogrinfo -al -so mydatakasen_UTM54.shp 
άάὗ὚ᾈ὾ᾀᾊᷞѐ஁ 
qgis mydatakasen_distance.tif 
kappadata¥生息適地コマンド.txtを開く 
コマンドを選択してコピー→コンソール 
で右クリック→貼り付け 
::はコメント行なので無視される
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
GDALコマンドの 
習得法 
最初からコマンドを自在に組み立てるのは難しいです。 
そこでGDALコマンドをどうやったら習得できるのかを 
紹介します。 
58 
コマンドのマニュアルを調べる(WEB) 
キーワードでググる→ブログやメーリン 
グリストを参考に真似する 
本を見る(GDALに関する情報は多くあ 
りません) 
とにかくコマンドを打って試行錯誤する
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
1km圏畑地面積の計算で利用する 
GRASSとは1km圏畑地面積をGDALとGRASSコマンドで作成 
しますが、その前にGRASSについて説明します。 
59 
GRASSの習得法 
ハンズオンに参加する 
マニュアルを調べる(WEB) 
本を見る 
・1984年から公開されているオープンソース 
のGISソフトウェア 
・もともとはコマンド操作を基本としていた 
が、今はGUIもある 
・ラスタ形式、ベクタ形式ともにサポート 
し、豊富な解析コマンドがある。 
今回はGRASSをコマンドからバッチ処理的な方法で 
利用します。通常のように対話的な操作方法ではあり 
ませんが、GRASSコマンドの使い方は同じです。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
1km圏畑地面積1km圏畑地面積をGDALとGRASSコマンドで作成し 
てみます。(GDAL部分の説明は同じなので省略) 
60 
άάὗ὚὾ᾉὸᾊᾊҤՉ೅᷏ࣞ᷁᷵ᷡᶻᴮޒڊҤՉᷥḻḣᴖḱᴨḩ೑়रᴖधપḿḋḎṕᷥ݊પᴯ 
set GISBASE=%OSGEO4W_ROOT%appsgrassgrass-6.4.4 
set LD_LIBRARY_PATH=%GISBASE%lib;%LD_LIBRARY_PATH% 
set PATH=%GISBASE%bin;%GISBASE%etc;%GISBASE%etcpython;%GISBASE%lib;%GISBASE% 
extralib;%OSGEO4W_ROOT%appsmsysbin;%PATH% 
set PYTHONPATH=%GISBASE%etcpython 
set GISDBASE=%HOME%Desktopkappadatagrassdata 
←今回はここを指定 
set GISRC=%HOME%Desktopkappadatahandson.grassrc 
άάὗ὚ଈΌೳḉ݊પ᷎ᷝṗḛᴨḡṑṝḿḓṕḪḉ܂ࣶᴖḕṖṝḲṈḭṁḥḭḲḉधપḿḋḎṕᷢӫຉ 
g.gisenv.exe set="MAPSET=PERMANENT" 
g.gisenv.exe set="LOCATION_NAME=temp" 
g.gisenv.exe set="GISDBASE=%GISDBASE%" 
g.gisenv.exe set="GRASS_GUI=text" 
g.proj -c epsg=3100 location=temp 
άάὗ὚ḱᴨḩḉ὾ᾉὸᾊᾊᷢ୅᷶ڴ᷶ᴖבܭฺ͐ḉधપᴖᾩὥᾥᾜᾠᾞᾟᾙᾦᾩᾪḉޒڊᴖḱᴨḩḉࠟ᷄߾᷎ 
r.in.gdal --overwrite -o -e input=mydatahatati.tif output=tmp 
g.region rast=tmp 
r.neighbors --overwrite -c input=tmp output=tmp_neighbors method=average size=101 
r.out.gdal -c createopt="TFW=YES,COMPRESS=LZW" input=tmp_neighbors output=mydata 
hatati1km.tif 
άάὗ὚ࠖซߘวؽᴖṗḛᴨḡṑṝḿḓṕḪḉ܃ࠪ 
rm -r %GISDBASE%temp 
←epsgはデータによって変更 
↓GRASSコマンドの主要な部分
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
日射量日射量をGDALとGRASSコマンドで作成してみます。 
61 
άάὗ὚὾ᾉὸᾊᾊҤՉ೅᷏ࣞ᷁᷵ᷡᶻᴮޒڊҤՉᷥḻḣᴖḱᴨḩ೑়रᴖधપḿḋḎṕᷥ݊પᴯ 
同じなので省略 
άάὗ὚ଈΌೳḉ݊પ᷎ᷝṗḛᴨḡṑṝḿḓṕḪḉ܂ࣶᴖḕṖṝḲṈḭṁḥḭḲḉधપḿḋḎṕᷢӫຉ 
同じなので省略 
άάὗ὚ḱᴨḩḉ὾ᾉὸᾊᾊᷢ୅᷶ڴ᷶ᴖבܭฺ͐ḉधપᴖᾩὥᾪᾬᾥḉޒڊᴖḱᴨḩḉࠟ᷄߾᷎ 
r.in.gdal --overwrite -o -e input=mydataiwate_demUTM54.tif output=dem 
r.in.gdal --overwrite -o -e input=mydataaspect.tif output=aspect 
r.in.gdal --overwrite -o -e input=mydataslope.tif output=slope 
g.region rast=dem 
r.sun elevin=dem aspin=aspect slopein=slope day="172" glob_rad=globrad --overwrite 
r.out.gdal -c createopt="TFW=YES,COMPRESS=LZW" input=globrad output=mydata/ 
irradiation.tif 
άάὗ὚ࠖซߘวؽṗḛᴨḡṑṝḿḓṕḪḉ܃ࠪ 
同じなので省略
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
生息適地の計算生息適地の計算をGDALコマンドで実行してみます。 
(QGISで実施した演算式による手法) 
62 
άάὗ὚ᾟᾘᾫᾘᾫᾠὨᾢᾤὥᾫᾠᾝ᷂ḀḱᴨḩḒṔḌḉݸ᷐ṇṔḞṝᾘᾩᾜᾘὥᾪᾟᾧḉ܂ࣶ 
gdaltindex mydataarea.shp mydatahatati1km.tif 
άάὗ὚ᾢᾘᾪᾜᾥᾖᾛᾠᾪᾫᾘᾥᾚᾜᴖᾟᾘᾫᾘᾫᾠὨᾢᾤᴖᾠᾩᾩᾘᾛᾠᾘᾫᾠᾦᾥᷥḱᴨḩḉ᷐ᷰᷝᾘᾩᾜᾘὥᾪᾟᾧᷥఇ̷ᷢᷔḄᶿḂᴗ 
gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline 
-cutline mydataarea.shp mydatahatati1km.tif mydatar_hatati1km.tif 
gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline 
-cutline mydataarea.shp mydatakasen_distance.tif mydatar_kasen_distance.tif 
gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline 
-cutline mydataarea.shp mydatairradiation.tif mydatar_irradiation.tif 
άάὗ὚ᾞᾛᾘᾣᾖᾚᾘᾣᾚᷞṓḣḩίܭḉޒڊ᷐Ḃ 
gdal_calc --overwrite -A mydatar_kasen_distance.tif -B mydatar_hatati1km.tif -C mydata 
r_irradiation.tif --outfile=mydatakappa.tif --calc="pow(((A < 100) * 100 + (100 <= A) * 
(A < 500) * 50 + (A >= 500) * 10) * B * (100 - C / 100),0.33333)" 
άάὗ὚ḱᴨḩᷥѐ஁ 
gdalinfo mydatakappa.tif 
qgis mydatakappa.tif 
gdal_calcで使用するラスタはすべて、同じ解像度、同じ範囲、同 
じ投影法にそろえておく必要があります。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
コマンドの利点GDALやGRASSコマンドでデータを作成することによ 
る利点を説明します。 
63 
GISの処理をテキストに保存しておける 
手順の再現、再利用が可能 
プログラムと連携、バッチ処理ができる 
宿題 
•500m圏畑地面積率を計算してみましょう 
•冬至の日射量を計算してみましょう 
•演算式を変更して生息適地を計算してみましょう 
→少し数値を変えてコピペするだけ 
※最近ではGISの処理をグラフィカ 
ルに作成・保存できる「モデル」や 
「モデルビルダー」が利用できるよ 
うになってきています。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
おまけPythonとの連携PythonからGRASSを呼び出す方法を紹介します。 
参考程度なので興味があれば調べてみてください。 
64 
# -*- coding: utf-8 -*- 
import os,sys 
import grass.script as grass 
import grass.script.setup as gsetup 
import binascii 
὚ଈΌೳḉ݊પ᷎ᷝṗḛᴨḡṑṝḿḓṕḪḉ܂ࣶᴖḕṖṝḲṈḭṁḥḭḲḉधપḿḋḎṕᷢӫຉ 
epsg = 3100 
gisrc = os.environ['GISRC'] 
gisbase = os.environ['GISBASE'] 
gisdb = os.environ['GISDBASE'] 
location = binascii.hexlify(os.urandom(16)) 
mapset="PERMANENT" 
grass.run_command("g.gisenv.exe",set="GISDBASE="+gisdb) 
grass.run_command("g.gisenv.exe",set="LOCATION_NAME="+location) 
grass.run_command("g.gisenv.exe",set="MAPSET="+mapset) 
grass.run_command("g.gisenv.exe",set="GRASS_GUI=text") 
grass.run_command("g.proj",epsg=epsg,location=location,flags="c") 
gsetup.init(gisbase, gisdb, location, mapset) 
὚ᾩὥᾥᾜᾠᾞᾟᾙᾦᾩᾪᷥࠖซ 
input=sys.argv[1] 
output=sys.argv[2] 
size=sys.argv[3] 
grass.run_command("r.in.gdal", input = input , output = "tmp",flags="oe", overwrite=True) 
grass.run_command('g.region', rast="tmp", flags='ap') 
grass.run_command("r.neighbors", input = "tmp", output = "tmp_neighbors" , method = "average",size=size, flags="c",overwrite=True) 
grass.run_command("r.out.gdal", input = "tmp_neighbors", output = output,flags="c") 
άά὚ࡱӫᷥᾧᾰᾫᾟᾦᾥḣḙṔṁḲḉޒڊᴮὪᾢᾤױᷞבܭ᷐Ḃ᷿ᶽᷢࣞ͢ḉ݊પᴯ 
>python neighbors.py mydata¥hatati.tif mydata¥hatati3km.tif 301 
GRASS環境変数は設定しておく
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
Rで使用する 
データの準備 
Rで生息適地マップを分析する際に使用する 
データの作成と確認をしておきます。 
άάὗ὚ᾉᷞܺෟ᷐ḂṈḣḙᴖͨΌࣈᷥ܂ࣶ 
gdal_rasterize -a_nodata -9999 -tr 10 10 -burn 1 dataecorisplan.shp mydataplan.tif 
gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline 
-cutline mydataarea.shp mydataplan.tif mydatamask.tif 
gdaldem hillshade mydataiwate_demUTM54.tif mydatashade.tif 
άάὗ὚ᾉᷞܺෟ᷐Ḃḕḭḻᷥѐ஁਱૞ᴖੴێఇ̷ᷥѐ஁ 
ᾨᾞᾠᾪὗᾤᾰᾛᾘᾫᾘᾶᾪᾟᾘᾛᾜὥᾫᾠᾝὗᾛᾘᾫᾘᾶᾜᾚᾦᾩᾠᾪᾶᾧᾣᾘᾥὥᾪᾟᾧὗᾛᾘᾫᾘᾶᾜᾚᾦᾩᾠᾪᾶᾢᾘᾧᾧᾘὥᾪᾟᾧ 
65
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
応用編 
Rで生息適地マップの分析・作成 
66 
Rに現地調査結果のデータと、GDALとGRASSコマンドで作成した 
データ(河川からの距離、畑地面積率、日射量)を読み込み、その関 
係性を分析します。そのあと、生息適地の演算式を統計モデリングを 
利用して作成し、その結果を地図データとして出力します。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
Rとは最初にRについて簡単な説明をします。 
67 
• 統計解析のためのオープンソースのプログ 
ラム言語 
• きれいな図やグラフを表示、出力できる 
• パッケージ(ライブラリ)を追加すること 
で機能を拡張することができる。 
• 地図データを扱うパッケージを追加するこ 
とでラスタ、ベクタデータを読み込み、統 
計分析することができる
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
Rのパッケージ 
インストール 
Rを起動して地図データを扱うために必要な 
パッケージをインストールします。 
パッケージ→ローカルにあるzipファイルからの 
パッケージのインストール を選択 
68 
kappadata¥program¥R_libraryのすべての 
ファイルを選択してインストール 
※「personal libraryにインストールするか?」 
というメッセージが出る場合はYesを選択 
今回の分析では、dismo、rgdal、raster、ggplot2ライブラ 
リを利用します。そのライブラリを利用するために必要な 
パッケージファイルをインストールします。 
通常は、ネットワークを利用してインストールしますが、 
今回は回線の都合のためあらかじめ用意しておいたパッ 
ケージファイルからインストールします。
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
スクリプトの読み込みあらかじめ用意しておいたRのスクリプト 
ファイルを読み込みます。 
ファイル→スクリプトを開く を選択 
69 
kappadata¥kappa.R を選択 
コンソール(コマンド実行、結果を表示) スクリプト(コマンドをまとめたもの)
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
Rの基礎Rコンソールで簡単な操作をしてみます。 
70 
὚܂դḱḍṖḙḲṔᷥ౓ݸᴮᾉᷢ᷁᷈ḂḝṋṝḲڊᷦ὚ᴯ 
> getwd() 
[1] "C:/Users/mizutani/Documents" 
὚܂դḱḍṖḙḲṔᷥ೅ٯὟքढḁᷦᴭὦᴭᴖᾫᾘᾙᷞ೘Ґὠ 
> setwd("C:/Users/mizutani/Desktop/kappadata/") 
὚Ҫਓᷡבܭ 
> 1+2 
[1] 3 
὚בܭץϰḉ೅ࣞᾘᷢ৩୺Ὗ৩୺ᷢᷦὗέὤὗᷟᶻᶽӫڜḉܺᶽὠ 
> a<-2*3 
὚೅ࣞᷥਯḉ౓ݸ 
> a 
[1] 6 
὚೅ࣞᷥਯḉܺᷚᷝבܭ᷎ᴖᶹḀᷖᷡ೅ࣞᷢ৩୺ᴗבܭץϰḉ౓ݸᴗ 
> b<-a+4 
> b 
[1] 10 
このほかRについて最低限知っておか 
なければならないことは色々あります 
が、ここでは説明しません。 
・データ形式(スカラー、ベクトル、 
行列、データフレーム、リスト) 
・制御構文(if、forなど) 
・関数など
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
地図データ読み込みRに地図データを読み込んで表示してみます。 
71 
὚ṓḎṀṓṔᷥ୅᷶ڴ᷶ᴮḻḭḛᴨḢᷦḎṝḣḲᴨṕۥ᷶ᴯ 
library(rgdal) 
library(raster) 
library(dismo) 
library(ggplot2) 
#GDAL設定おまじない(日本語エンコーディングの指定) 
setCPLConfigOption("GDAL_FILENAME_IS_UTF8","NO") 
setCPLConfigOption("SHAPE_ENCODING","cp932") 
#ラスタデータの読み込み(河川からの距離、畑地面積率、日射量) 
kasen_distance<-raster("mydata/r_kasen_distance.tif") 
hatati1km<-raster("mydata/r_hatati1km.tif") 
irradiation<-raster("mydata/r_irradiation.tif") 
shade<- raster("mydata/shade.tif") 
#地図表示 
plot(kasen_distance) 
plot(hatati1km) 
plot(irradiation,col=cm.colors(12)) 
plot(shade,col=grey(1:100/100)) 
#ベクタデータの読み込み(カッパの確認地点、調査範囲) 
kappa <- readOGR("data/ecoris/kappa.shp","kappa") 
plan <- readOGR("data/ecoris/plan.shp","plan") 
#地図表示 
plot(kappa) 
plot(plan) 
#地図の重ね合わせ 
plot(shade,col=grey(1:100/100)) 
plot(plan,add=T) 
points(kappa,col="red",cex=0.7,pch=20) 
スクリプトウインドウでCtrl+Rを 
押すと、その行を実行します。 
(複数行選択→実行も可)
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ラスタ値の抽出 
カッパの確認地点における各ラスタ値を抽出し、調査 
範囲内からランダムに作成したバックグラウンドデー 
タにおいてもラスタ値を抽出します。これらを合わせ 
て分析に使用するデータセットを作成します。 
72 
#説明変数としてラスタレイヤをまとめる 
predictors<-stack(kasen_distance,hatati1km,irradiation) 
#バックグラウンドデータ作成(maskデータ内のランダムなポイントデータ10000点) 
mask <- raster("mydata/mask.tif") 
set.seed(0) 
backg<-randomPoints(mask,n=10000) 
#地図表示 
plot(mask,ext=extent(546817,551330,4354006,4358079)) 
points(backg,cex=0.05,pch=20) 
#カッパ確認地点とバックグラウンドデータのラスタ値を抽出する 
datapres <- extract(predictors,kappa) 
databackg <- extract(predictors,backg) 
#データ確認 
head(datapres) 
head(databackg) 
#データセットを作成する(pa列にカッパ確認地点は1,バックグラウンドデータは0を入れる) 
pa<-c(rep(1,nrow(datapres)),rep(0,nrow(databackg))) 
data_rbind<-rbind(datapres,databackg) 
data_cbind<-cbind(pa,data_rbind) 
envdata<-data.frame(data_cbind) 
colnames(envdata)<-c("pa","川からの距離","1km圏畑地面積率","日射量") 
#データ確認 
head(envdata) 
tail(envdata)
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データ分析① 作成したデータセットから単変量解析をしてみます。 
73 
#データ要約(pa==0はバックグラウンド、pa==1はカッパ確認地点) 
summary(envdata[envdata$pa==0,]) 
summary(envdata[envdata$pa==1,]) 
#ヒストグラムの表示 
hist(envdata[envdata$pa==0,"川からの距離"],col="#ff00ff40") 
hist(envdata[envdata$pa==1,"川からの距離"],col="#0000ff40") 
hist(envdata[envdata$pa==0,"1km圏畑地面積率"],col="#ff00ff40") 
hist(envdata[envdata$pa==1,"1km圏畑地面積率"],col="#0000ff40") 
hist(envdata[envdata$pa==0,"日射量"],col="#ff00ff40") 
hist(envdata[envdata$pa==1,"日射量"],col="#0000ff40",add=T) 
#ggplot2でヒストグラム図作成(くわしく説明しませんがカッコイイ図を作成できます。) 
xval<-c("川からの距離","1km圏畑地面積率","日射量") 
windowsFonts(Meiryo=windowsFont("メイリオ")) 
for(i in 1:3){ 
#種データ情報と表示位置 
mindata<-min(envdata[envdata$pa==1,xval[i]]) 
maxdata<-max(envdata[envdata$pa==1,xval[i]]) 
mediandata<-median(envdata[envdata$pa==1,xval[i]]) 
str<-paste(xval[i],"(確認地点)n","最小値:",sprintf("%2.2f",mindata),"n") 
str<-paste(str,"最大値:",sprintf("%2.2f",maxdata),"n") 
str<-paste(str,"中央値:",sprintf("%2.2f",mediandata),"n") 
xpos<-min(na.omit(envdata[envdata$pa==0,xval[i]])) 
pafactor<-as.factor(envdata$pa) 
p<-ggplot(envdata,aes_string(x=xval[i],fill="pafactor"))+ 
theme_grey(base_size=12,base_family="Meiryo")+ 
ylab("count(log_10)") + 
theme(legend.position=c(1,1),legend.justification=c(1,1),axis.title.x=element_blank()) + 
geom_histogram(position="identity",alpha=0.4) + 
guides(fill=guide_legend(title=NULL)) + 
 scale_fill_discrete(labels=c("バックグラウンドデータ","確認地点データ")) + 
scale_y_log10()+ 
coord_cartesian(ylim = c(10^0, 10^4)) + 
annotate("text",x=xpos,y=8000,label=str,size=4,family="Meiryo",hjust=0,vjust=1) 
ggsave(paste("mydata/",xval[i],"分布.png",sep=""), p, width = 16, height = 16,unit="cm",dpi=300) 
}
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
データ分析② 作成したデータセットから二変量解析をしてみます。 
74 
#説明変数間の相関係数 
cor(envdata[envdata$pa==0,2:4]) 
#説明変数間の散布図 
plot(envdata[envdata$pa==0,2:4],pch=".") 
#相関ペアプロット用関数 
panel.cor<- function(x,y,digits=2,prefix="",cex.cor,...){ 
usr<-par("usr") 
on.exit(par(usr)) 
par(usr=c(0,1,0,1)) 
r<-abs(cor(x,y,use="complete.obs")) 
txt<-format(c(r,0.123456789),digits=digits)[1] 
txt<-paste(prefix,txt,sep="") 
if(missing(cex.cor)) cex.cor<-0.8/strwidth(txt) 
text(0.5,0.5,txt,cex=cex.cor*(1+r)/2) 
} 
panel.hist <- function(x,...){ 
usr<-par("usr") 
on.exit(par(usr)) 
par(usr=c(usr[1:2],0,1.5)) 
h<-hist(x,plot=FALSE) 
breaks<-h$breaks 
nB<-length(breaks) 
y<-h$counts 
y<-y/max(y) 
rect(breaks[-nB],0,breaks[-1],y,col="white",...) 
} 
#相関ペアプロット図 
ppi=300 
png(file="mydata/相関ペアプロット.png", width=16/2.54*ppi, height=16/2.54*ppi,res=ppi) 
pairs(envdata[envdata 
$pa==0,2:4],pch=".",upper.panel=panel.cor,diag.panel=panel.hist,lower.panel=panel.smooth) 
dev.off()
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
統計モデリング統計モデリングにより生息適地を推定してみます。 
※統計モデリングについては説明しません。 
75 
#統計モデルを作成(glmを利用) 
colnames(envdata)<-c("pa","r_kasen_distance","r_hatati1km","r_irradiation") 
fit<- glm(pa~ . + I(r_kasen_distance^2) + I(r_hatati1km^2) + 
I(r_irradiation^2),family=binomial(link="logit"),data=envdata) 
fit 
fit<-step(fit) 
summary(fit) 
#モデルの評価(AUC、閾値、ROC曲線、予測値の分布比較) 
e<-evaluate(p=envdata[envdata$pa==1,],a=envdata[envdata$pa==0,],fit,type="response") 
e 
threshold(e) 
plot(e,"ROC") 
density(e) 
boxplot(e,col=c("blue","red")) 
#モデルにより生息適地を計算、表示、データ書き出し 
pg<-predict(predictors,fit,type='response') 
plot(pg) 
plot(plan,add=T) 
points(kappa,col='red',pch='+') 
tr<-threshold(e,'kappa') 
plot(pg>tr) 
writeRaster(pg, filename="mydata/カッパ生息確率.tif", format="GTiff", overwrite=TRUE)
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
応答曲線の作成説明変数の変化が生息適地にどのような影響を及ぼす 
かを示す応答曲線を作成してみます。 
※詳しくは説明しません。 
76 
#glm応答曲線用関数 
predictvals <- function(model,xvar,data,...){ 
f <- sapply(data, is.factor) 
notf <- !f 
m <- matrix(nrow=1, ncol=ncol(data)) 
if (sum(notf) > 0) m[notf] <- as.numeric(apply(subset(data[,notf,drop=FALSE],pa==1), 2, mean)) 
if (sum(f) > 0 ) m[f] <- as.numeric(apply(subset(data[,f,drop=FALSE],pa==1), 2, modal)) 
m <- matrix(m, nrow=nrow(data), ncol=length(m), byrow=TRUE) 
colnames(m) <- names(data) 
m<-data.frame(m) 
m[f]<-sapply(m[,f,drop=FALSE],factor) 
v<-data[,xvar] 
if (!is.factor(v)) { 
xrange<-range(v) 
m[,xvar]<-seq(xrange[1],xrange[2],length.out=nrow(data)) 
}else{ 
m[,xvar]<-v 
} 
m['pa']<-predict(model,m,type='response') 
m 
} 
#応答曲線 
for(i in 1:3){ 
xval<-c("r_kasen_distance","r_hatati1km","r_irradiation") 
xlabel<-c("川からの距離","1km圏畑地面積","日射量") 
rn<-range(envdata[,xval[i]]) 
xpos<-(rn[1]+rn[2])/2 
gml_predicted <-predictvals(fit,xval[i],envdata) 
res<-ggplot(envdata,aes_string(x=xval[i],y="pa")) + geom_line(data=gml_predicted,color="red") + 
xlab(xlabel[i])+ylab("生息適地確率") + geom_line(y=tr,color="blue",size=1,linetype="dashed") + 
annotate("text",x=xpos,y=0.07,label="生息適地閾値(Cohhen's Kappa)") 
ggsave(paste("mydata/",xlabel[i],"応答曲線",".png",sep=''),res, width = 16, height =16,unit="cm",dpi=300) 
}
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
ggplot2で地図作成ggplot2で生息適地マップを作成してみます 
※詳しくは説明しません。 
77 
#ggplot2で生息適地マップ作成 
windowsFonts(Meiryo=windowsFont("メイリオ")) 
en<-crop(pg,extent(546620,551600,4354300,4358100)) 
hs<-crop(shade,extent(546620,551600,4354300,4358100)) 
hdf <- rasterToPoints(hs) 
hdf <- data.frame(hdf) 
colnames(hdf) <- c("X","Y","Hill") 
edf <- rasterToPoints(en) 
edf <- data.frame(edf) 
colnames(edf) <- c("X","Y","Environment") 
adf<-fortify(plan) 
colnames(adf)[1:2] <- c("X","Y") 
sdf<-data.frame(kappa@coords) 
colnames(sdf)[1:2] <- c("X","Y") 
g<-ggplot(NULL, aes(X, Y)) + 
theme_grey(base_size=13,base_family="Meiryo")+ 
geom_raster(data = edf, aes(fill = Environment)) + 
geom_raster(data = hdf, aes(alpha = Hill)) + 
scale_alpha(range = c(0.5, 0), guide = "none") + 
scale_x_continuous(breaks=NULL,limits=c(546620,551600),expand=c(0,0)) + 
scale_y_continuous(breaks=NULL,limits=c(4354300,4358100),expand=c(0,0)) + 
geom_path(data= adf,aes(group=group),colour = "#333333", size = 0.5) + 
geom_point(data=sdf,aes(x=X,y=Y,colour="black"),size=1.5,alpha=0.8) + 
scale_colour_manual(guide=guide_legend(title=NULL),name = '確認地点', values = 'black', labels = '確認地点') + 
coord_equal() + 
theme(legend.position=c(1,1),legend.justification=c(1,1),axis.title.x=element_blank(),axis.title.y=element_blank()) 
g<-g+scale_fill_gradientn(name="生息適地",colours = c("white","green","yellow","orange","red")) 
ggsave("mydata/カッパ生息適地マップ.png", g, width = 16, height = 16,unit="cm",dpi=300) 
plot(g)
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
地図データを扱うための 
Rの習得法 
Rで地図データを分析出力するには「統計」「コマン 
ド」「グラフィックス」の知識が必要です。そこで地図 
データを扱うためにRをどうやったら習得できるのかを 
紹介します。 
78 
本を見る(Rは情報が多い) 
とにかくコマンドを打って試行錯誤する 
キーワードでググる (Rは情報が多い) 
「統計」はあきらめて勉強する 
生息適地推定については↓のPDFがお薦め
2014/10/31 FOSS4G Tokyo 2014 ハンズオン 
お疲れ様でした。 
上手くいったのは皆様のおかげ。 
失敗したのは、妖怪のせい。 
79 
e-mail: mizutani.takayuki+handson@gmail.com 
twitter: @tmizu23

Weitere ähnliche Inhalte

Was ist angesagt?

CS立体図を自作して公開してみた
CS立体図を自作して公開してみたCS立体図を自作して公開してみた
CS立体図を自作して公開してみたKouichi Kita
 
CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)
CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)
CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)OSgeo Japan
 
08遺跡景観の分析〜可視領域を調べる〜
08遺跡景観の分析〜可視領域を調べる〜08遺跡景観の分析〜可視領域を調べる〜
08遺跡景観の分析〜可視領域を調べる〜Junpei Ishii
 
QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)IWASAKI NOBUSUKE
 
05QGISで地図印刷
05QGISで地図印刷05QGISで地図印刷
05QGISで地図印刷Junpei Ishii
 
QGIS講習会【印刷編】
QGIS講習会【印刷編】QGIS講習会【印刷編】
QGIS講習会【印刷編】Kosuke Asahi
 
PythonとQGISで簡単処理
PythonとQGISで簡単処理PythonとQGISで簡単処理
PythonとQGISで簡単処理Kazutaka ishizaki
 
02ラスタデータを利用した地形指標の作成と地図表現
02ラスタデータを利用した地形指標の作成と地図表現02ラスタデータを利用した地形指標の作成と地図表現
02ラスタデータを利用した地形指標の作成と地図表現Junpei Ishii
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介miyanegi
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料Fujimoto Keisuke
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類Yoshitaka HARA
 
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)Yu Imai
 
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法についてオープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法についてRyousuke Wayama
 
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)Yoh Fukuda
 
Sift特徴量について
Sift特徴量についてSift特徴量について
Sift特徴量についてla_flance
 
QGIS2.18 GNSS編
QGIS2.18 GNSS編QGIS2.18 GNSS編
QGIS2.18 GNSS編Jyun Tanaka
 
Qgisを考古学で使う
Qgisを考古学で使うQgisを考古学で使う
Qgisを考古学で使うJunpei Ishii
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日Kitsukawa Yuki
 

Was ist angesagt? (20)

CS立体図を自作して公開してみた
CS立体図を自作して公開してみたCS立体図を自作して公開してみた
CS立体図を自作して公開してみた
 
CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)
CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)
CS立体図を用いた地形判読(FOSS4G 2017 Tokyoハンズオン)
 
08遺跡景観の分析〜可視領域を調べる〜
08遺跡景観の分析〜可視領域を調べる〜08遺跡景観の分析〜可視領域を調べる〜
08遺跡景観の分析〜可視領域を調べる〜
 
QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)QGISセミナー中級編(V2.4)
QGISセミナー中級編(V2.4)
 
Rを用いたGIS
Rを用いたGISRを用いたGIS
Rを用いたGIS
 
05QGISで地図印刷
05QGISで地図印刷05QGISで地図印刷
05QGISで地図印刷
 
QGIS講習会【印刷編】
QGIS講習会【印刷編】QGIS講習会【印刷編】
QGIS講習会【印刷編】
 
PythonとQGISで簡単処理
PythonとQGISで簡単処理PythonとQGISで簡単処理
PythonとQGISで簡単処理
 
QGIS初級編
QGIS初級編QGIS初級編
QGIS初級編
 
02ラスタデータを利用した地形指標の作成と地図表現
02ラスタデータを利用した地形指標の作成と地図表現02ラスタデータを利用した地形指標の作成と地図表現
02ラスタデータを利用した地形指標の作成と地図表現
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介
 
LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類
 
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
オープンデータを使って地図を作ろう|QGIS 活用講座(初級編)
 
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法についてオープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
オープンデータとオープンソースGisを用いたweb上でのインタラクティブ可視化手法について
 
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
QGIS初級編 さわってみようQGIS (for ver. 2.8.2 at FOSS4G 2015 Hokkaido)
 
Sift特徴量について
Sift特徴量についてSift特徴量について
Sift特徴量について
 
QGIS2.18 GNSS編
QGIS2.18 GNSS編QGIS2.18 GNSS編
QGIS2.18 GNSS編
 
Qgisを考古学で使う
Qgisを考古学で使うQgisを考古学で使う
Qgisを考古学で使う
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 

Mehr von Mizutani Takayuki

Open dronemapハンズオン
Open dronemapハンズオンOpen dronemapハンズオン
Open dronemapハンズオンMizutani Takayuki
 
FOSS4G Hokkaido2016 LT資料
FOSS4G Hokkaido2016 LT資料FOSS4G Hokkaido2016 LT資料
FOSS4G Hokkaido2016 LT資料Mizutani Takayuki
 
自然環境調査におけるUAVの利用例
自然環境調査におけるUAVの利用例自然環境調査におけるUAVの利用例
自然環境調査におけるUAVの利用例Mizutani Takayuki
 
環境アセスにおけるクローズドデータによる問題
環境アセスにおけるクローズドデータによる問題環境アセスにおけるクローズドデータによる問題
環境アセスにおけるクローズドデータによる問題Mizutani Takayuki
 
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライドMizutani Takayuki
 
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)Mizutani Takayuki
 
自然環境保全のためのデータの地図化・分析手法のご紹介
自然環境保全のためのデータの地図化・分析手法のご紹介自然環境保全のためのデータの地図化・分析手法のご紹介
自然環境保全のためのデータの地図化・分析手法のご紹介Mizutani Takayuki
 

Mehr von Mizutani Takayuki (8)

Open dronemapハンズオン
Open dronemapハンズオンOpen dronemapハンズオン
Open dronemapハンズオン
 
FOSS4G Hokkaido2016 LT資料
FOSS4G Hokkaido2016 LT資料FOSS4G Hokkaido2016 LT資料
FOSS4G Hokkaido2016 LT資料
 
自然環境調査におけるUAVの利用例
自然環境調査におけるUAVの利用例自然環境調査におけるUAVの利用例
自然環境調査におけるUAVの利用例
 
環境アセスにおけるクローズドデータによる問題
環境アセスにおけるクローズドデータによる問題環境アセスにおけるクローズドデータによる問題
環境アセスにおけるクローズドデータによる問題
 
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
 
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
地図タイルを作成・公開してみて わかった108個のこと(foss4g tokyo 2013発表資料)
 
植生タイルの作り方
植生タイルの作り方植生タイルの作り方
植生タイルの作り方
 
自然環境保全のためのデータの地図化・分析手法のご紹介
自然環境保全のためのデータの地図化・分析手法のご紹介自然環境保全のためのデータの地図化・分析手法のご紹介
自然環境保全のためのデータの地図化・分析手法のご紹介
 

Kürzlich hochgeladen

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 

Kürzlich hochgeladen (7)

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 

カッパ(妖怪)の生息適地マップ作成入門

  • 1. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン カッパ(妖怪)の生息適地 マップ作成入門 株式会社エコリス 水谷貴行 1
  • 2. 2 2014/10/31 FOSS4G Tokyo 2014 ハンズオン この資料は以下の本から [オープンデータ+QGIS] 統計・防災・環境情報がひと目でわかる地図 の作り方 ハンズオン用にスピンオフした内容になってい ます。ぜひ、本書もあわせてご覧いただければ と思います。 技術評論社サイト http://gihyo.jp/book/2014/978-4-7741-6913-2 Amazonサイト http://www.amazon.co.jp/dp/4774169137
  • 3. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 内容 入門編(前半): 14:00~15:30  カッパの生息適地マップの作成    オープンデータなどの公開されているデータを利用して、カッパの生息適地を    QGISで可視化してみます。 ~10分休憩~ 応用編(後半): 15:40~17:00  カッパの生息適地マップの分析    カッパの生息適地をGDAL、Python、GRASS、Rを連携して分析してみます。 3
  • 4. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 事前準備 •Windowsパソコン(7以降)を使用します。 •OSGeo4Wで、QGIS2.4、GRASS6.4をインストールします。 •Python、GDALはOSGeo4Wでインストールされるものを利用します。 •R 3.1をインストールします。 •配布したデータ「kappadata」フォルダは、デスクトップに保存します。 4
  • 5. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 使用データ 本ハンズオンでは、岩手県遠野市周辺 2次メッシュ 「594104」のデータを使用します。 kappadata¥dataの中にあらかじめダウンロードしておいたデータが入っています。 ・国土数値情報(http://nlftp.mlit.go.jp/ksj/) 「河川」データ [W05-07_03_GML.zip] ・自然環境情報GIS(http://www.vegetation.biodic.go.jp/) 「1/25,000植生図」GISデータ [shp594104.zip] ・基盤地図情報(http://www.gsi.go.jp/kiban/) 「数値標高モデル」10mメッシュデータ [FG-GML-5941b-DEM10B.zip] ・エコリス(http://www.ecoris.co.jp) 「カッパ確認位置」データ(未公開) 5
  • 6. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データについて ご注意! ・基盤地図情報「数値標高モデル」のデータは、今回の講習のためだけの「一時的な資料とし て利用する」ものとして、あらかじめ国土地理院のサイトからダウンロードしておいたものを 配布しています。 ・講習終了後、「数値標高モデル」のデータおよび「数値標高モデル」を利用して作成した データは、速やかに破棄してください。 ・家で復習したい場合は、国土地理院のサイトでアカウントを取得し、自分でデータを ダウンロードしてください。 ・その他のデータは、出典の明示をすることで再配布可能なデータとなっているので、その規 約に従ってご利用ください。 6
  • 7. 生息適地 生息適地推定とは 環境データ 2014/10/31 FOSS4G Tokyo 2014 ハンズオン (地形、植生、気候など) 生物データ (生態情報、確認位置など) 7 地形、植生、気候などの環境データと、 生物の生息環境や確認位置などの情報か ら、その生物が生息するのに適している 場所を推測して可視化する手法を生息適 地推定と言います。
  • 8. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編  カッパの生息適地マップの作成 8
  • 9. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン カッパの生態について  川や池に生息し、陸上も移動する  胡瓜を主食とする  頭上の皿の乾燥に極めて弱い 参考文献:Yanagida(1910). Tono monogatari 予備知識 「カッパ淵」 画像出典:wikipedia 9
  • 10. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編の流れ 1. 河川データから河川からの距離図を作成 2. 植生データから畑地面積率図を作成 3. 標高データから日射量図を作成 4. データを組み合わせて生息適地マップを作成 10  川や池に生息し、陸上も移動する  胡瓜を主食とする  頭上の皿の乾燥に極めて弱い
  • 11. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編 1. 河川データから 河川からの距離図を作成する 11
  • 12. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データのダウンロード国土数値情報から「河川」データを ダウンロードします。 JPGIS2.1→河川→岩手を選択座標系がJGD2000になっているのを確認 12
  • 13. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データの読み込み ダウンロードした河川データを QGISに読み込みます。 「W05-07_03-g_Stream.shp」を ドラッグアンドドロップ ※「data¥W05-07_03_GML」の中に入っ ています。 ダウンロードしたデータの中にはprjファイル がないため空間参照システム(測地系や投影 法)が自動判別できません。 そのため「空間参照システム選択」ウインドウ でデータの空間参照システムを定義します。 「CRSが設定されていません」とメッセージが 出る場合は、レイヤを右クリックして「レイヤ CRSを設定する」を選択します。 次ページ参照 13
  • 14. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 空間参照の定義 レイヤを右クリック→「レイヤCRSを設定 する」 データの空間参照システム(測地系や 投影法)を定義します。 フィルターにJGD2000と入力して、 EPSG:4612を選択 14
  • 15. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データの切り出し データを2次メッシュ594104の範囲で切り出し て保存します。 レイヤを右クリック→「名前をつけて保存」 「形式」→ESRI Shapefile 「名前をつけて保存」→ブラウズ「kasen.shp」 ファイルの保存先は、デスクトップの中の 「kappadata¥mydata」を指定してください。 「領域」をチェック→以下を入力 北 39.41666667 南 39.3333333 西 141.5 東 141.625 15 「エンコーディング」→Shift_JIS 「保存されたファイルを地図に追加する」を チェック
  • 16. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 投影法の変換 投影法をUTMゾーン54のデータに変換します。 「kasen」レイヤを右クリック→「名前をつけて 保存」 「形式」→ESRI Shapefile 「名前をつけて保存」→ブラウズ 「kasen_UTM54.shp」 「CRS」→ブラウズ→ JGD2000/UTM zone54N(EPSG:3100)を選択 16 注意 ファイル名やパス名に日本語があると、このあと利用す るプロセッシングが上手く動作しない場合があるので、 本ハンズオンでは日本語ファイル名は使用しません。 ファイルの保存先は、デスクトップの中の 「kappadata¥mydata」を指定してください。 ※キャプチャ画像の保存先が違っている場合があります が、読み変えてください。 次ページ以降も同じ。 「エンコーディング」→Shift_JIS
  • 17. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ラスタデータに変換 セルサイズが10m✕10mで川の部分のラスタ値が1の GeoTIFFファイルを作成します。 「kasen_UTM54.shp」を読み込み メニュー→ラスタ→変換→ラスタ化 を選択 「出力ファイル」を指定「kasen.tif」 「地図の単位ピクセルでのラスタ解像度」を選択 「水平」「垂直」に10を入力   を押して、 gdal_rasterizeのあとに -burn 1 と入力 17 メニュー→プロジェクト→新規 を選択
  • 18. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ラスタデータの確認 レイヤを右クリック→プロパティ→スタイル →バンド表示→最大→1と入力 スタイルを変更してラスタデータを確認します。 河川部分が白く表示されるのを確認 18
  • 19. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 距離を計算 メニュー→ラスタ→解析→プロキシミティ を選択 河川ラスタからの距離を計算します。 「出力ファイル」を指定「kasen_distance.tif」  ※ファイルの種類でGeoTIFFを選択のこと! プロキシミティは、ラスタ値が0以外の場所か らの距離を計算します。(距離を計算するらラ スタ値を指定することも可能です) 19
  • 20. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 河川からの距離図距離を算出したレイヤにスタイルを設定して、距離に より色分けした「河川からの距離図」を作成します。 レイヤを右クリック→プロパティ→スタイル 河川からの距離で色分けされているのを確認 レンダータイプ→単バンド疑似カラー 新規カラーマップを作成→Spectral 最小 0、最大1000と入力→分類 20 既定スタイルとして保存しておく
  • 21. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編 2. 植生データから 畑地面積率図を作成する 21
  • 22. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データのダウンロード自然環境情報GISから「1/25,000 植生図」 GISデータをダウンロードします。 「Shapeデータダウンロード」→「植生調査情 報提供ホームページへ」を選択 2次メッシュ(594104)の 1/25,000植生図GISデータをダウンロード 22
  • 23. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データの読み込みダウンロードした植生データを QGISに読み込みます。 メニュー→「レイヤ」→「ベクタレイヤの追加」 ドラッグアンドドロップで読み込むと属性テーブルの エンコードが判別できず日本語の属性テーブルが文字 化けする場合があります。 「エンコーディング」→「Shift_JIS」を選択 「データセット」→「p594104.shp」を選択 ※「data¥shp594104」の中に入っていま す。 23 QGISでメニュー→プロジェクト→新規 を選択
  • 24. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 空間参照の定義データの空間参照システム(測地系や 投影法)を定義します。 フィルターにJGD2000と入力して、 EPSG:4612を選択 ダウンロードしたデータの中にはprjファイルが ないため空間参照システム(測地系や投影法) が自動判別できません。 そのため「空間参照システム選択」ウインドウ でデータの空間参照システムを定義します。 「CRSが設定されていません」とメッセージが 出る場合は、レイヤを右クリックして「レイヤ 植生データのREADMEファイルに世界測地系のCRSを設定する」を選択します。 緯度経度のデータだと書かれています。 24
  • 25. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 畑地の選択植生データから畑地雑草群落を選択します。 式に ”HANREI_N” = ’畑地雑草群落’ と入力して「選択」 レイヤを右クリック→「属性テーブルを開く」 「条件を使った地物選択」ボタンを押す 25
  • 26. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 畑地データの保存 レイヤを右クリック→名前をつけて保存 選択した畑地雑草群落のみをシェープファイル に保存します。同時に投影法もUTMゾーン54に 変換します。 「形式」→ESRI Shapefile 「名前をつけて保存」→「hatati.shp」 「CRS」→ブラウズ→ JGD2000/UTM zone54N(EPSG:3100)を選択 「選択された地物のみを保存する」にチェック 26
  • 27. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ラスタデータに変換 セルサイズが10m✕10mで畑地の部分のラスタ値が 100のGeoTIFFファイルを作成します。 メニュー→プロジェクト→新規 を選択 メニュー→ラスタ→変換→ラスタ化を選択 「出力ファイル」を指定「hatati.tif」 「地図の単位ピクセルでのラスタ解像度」を選択 「水平」「垂直」に10を入力   を押して、 gdal_rasterizeのあとに -burn 100 と入力 27 「hatati.shp」を読み込み
  • 28. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン プロセッシング設定 メニュー→プロセッシング→オプションと構成 畑地面積率はプロセッシングツールボックス のGRASSコマンドを利用します。はじめ に、プロセッシングの設定を確認します。 メニュー→プロセッシング→ツールボックス からツールボックスを開く プロバイダ→GRASS commandsの設定を確認 28
  • 29. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 畑地面積率を計算 ツールボックスから 「GRASS commands」→「Rater」→「r.neighbors」 ※ツールボックス下部のリストボックスを「Advanced Interface」 に変更しておく。 畑地ラスタから1km圏内の畑地面積率をGRASSの r.neighborsを使って計算します。 「Neiborhood operation」→average 「Neiborhood size」→101 ※ Neiborhood sizeは奇数のみ 「Use circular neighborhood」→Yes 「Output layer」を指定「hatati1km.tif」 29 「Input raster layer」→hatati
  • 30. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 畑地面積率の解説r.neighborsを使った畑地面積率の算出方法を 説明します。 r.neighborsは、中心セルから指定範囲内を計 算対象セルとしてラスタ値の平均や合計などを 計算します。その計算を中心セルを移動させな がらラスタデータ全域で行います。 「Neighborhood size(1辺のセル数)」は101 セルで、ラスタ解像度は10mなので、 10m✕101セル=1010m が1辺の長さとなりま す。そして、「circular neighborhood」を指定 しているので、1010mを直径とする円内のセル が計算対象セルとなります。 「Neighborhood operation」はaverageなの で、計算対象セルのラスタ値の平均を計算しま す。今、ある場所が畑地であれば、そのラスタ値 は100、そうでなければ0なので、計算対象セル 全域が畑地であれば、その平均は100、半分なら 50、なければ0となります。 よって、r.neighborsにより 約1km圏内の畑地面積率(0~100)がラスタ全域で 計算できます。 ※近傍解析、フォーカル統計と言ったりもします。 30
  • 31. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 畑地面積率図算出した畑地面積率レイヤにスタイルを設定して、色 分けした「畑地面積率図」を作成します。 1km圏の畑地面積率(0~100)で色分けさ れているのを確認 レイヤを右クリック→プロパティ→スタイル レンダータイプ→単バンド疑似カラー 新規カラーマップを作成→Spectral 最小 0、最大100と入力→反転に チェック→分類 31 既定スタイルとして保存しておく
  • 32. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編 3. 標高データから 日射量図を作成する 32
  • 33. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データのダウンロード基盤地図情報から「数値標高モデル」データ をダウンロードします。 国土地理院のアカウントを取得してログイン 数値標高モデル JPGIS(GML)形式を選択 10mメッシュの 「594104FG-GML-5941b-DEM10B.zip」 をダウンロード 33
  • 34. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン GMLデータの変換ダウンロードした標高GMLデータを GeoTIFF形式に変換します。 エコリス「基盤地図情報 標高DEMデータ変換 ツール」をダウンロード ※今回は、programの中に入っています。 「変換結合.vbs」をダブルクリック 投影法は緯度経度 →0 を入力 陰影起伏図を作成しますか?→はい フォルダ選択→「data¥FG-GML-5941b- DEM10B」 海域の標高→はい(0) 「変換終了しました」のメッセージで完了 選択フォルダの中に「merge.tif」があればOK 34
  • 35. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データの読み込み GeoTIFF形式に変換した標高データを QGISに読み込みます。 「data¥FG-GML-5941b-DEM10B ¥merge.tif」をドラッグアンドドロッ プ 35 メニュー→プロジェクト→新規 を選択
  • 36. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 投影法の変換 標高ラスタデータの投影法をUTMゾーン54に 変換します。 メニュー→「ラスタ」→「投影法」→「ワー プ」を選択 入力ファイル→merge 「出力ファイル」→選択 「iwate_demUTM54.tif」 「ソースSRS」→JGD2000(EPSG:4612)を選択 「ターゲットSRS」→ JGD2000/UTM zone54N(EPSG:3100)を選択 36 「リサンプリングメソッド」→双線型
  • 37. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 日射量の解説日射量の計算はプロセッシングツールボック スのGRASSコマンドr.sunを使用します。 r.sunによる日射量の算出方法を説明します。 日射には、直達日射、反射日射、散乱日射が あります。 総日射は、直達日射+反射日射+散乱日射に なります。 総日射量は、1日分の総日射の合計値です。 単位は、[Wh・㎡・1day]です。 日射量の計算には、あらかじめ用意しておい た、標高、傾斜、傾斜方位のデータを使用 し、GRASSのr.sunのコマンドを利用します。 37 詳細は、GRASS GISの r.sunの マニュアルを 参照ください。
  • 38. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 傾斜角度の計算 標高データから傾斜角度を計算します。 メニュー→ラスタ→解析→DEM を選択 「出力ファイル」→選択「slope.tif」 「モード」→傾斜 38 メニュー→プロジェクト→新規 を選択 「iwate_demUTM54.tif」を読み込み 「入力ファイル」→「iwate_demUTM54」
  • 39. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 傾斜方位の計算 傾斜と同様に標高データから傾斜方位を計算します。 メニュー→ラスタ→解析→DEM を選択 「入力ファイル」→「iwate_demUTM54」 「出力ファイル」→選択「aspect.tif」 「モード」→傾斜方位 39 「三角法角度を返す」→ チェック 「平地の値に0を返す」→チェック 「三角法角度を返す」により傾斜方位が東0°、北 90°、西180°、南270°となります。 「平地の値に0を返す」により、傾斜のない平坦地 が0°となります。
  • 40. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 傾斜方位の確認 レイヤを右クリック→プロパティ→スタイル スタイルを変更して斜面方位を確認します。 斜面方位によって色分けされるのを確認 40 レンダータイプ→単バンド疑似カラー   を押して、↑のように値と色を追加
  • 41. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 日射量を計算標高、傾斜、傾斜方位のデータから日射量を計算します。 「Elevation layer」→「iwate_demUTM54」(標高) 41 ツールボックスから 「GRASS commands」→「Rater」→「r.sun」 「Aspect layer」→「aspect」(傾斜方位) 「Name of the input slope raster map」→「slope」(傾斜) 「No. of day of the year」→172 ※1月1日から数えて172日目(夏至のあたり)を計算 「Output global(total) irradiance/irradiation layer」 →「irradiation.tif」(総日射量) その他の「Open output file after running algorithm」の チェックを外す
  • 42. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 日射量図レイヤのスタイルを設定して、日射量により色分けし た「日射量図」を作成します。 レイヤを右クリック→プロパティ→スタイル日射量で色分けされているのを確認 レンダータイプ→単バンド疑似カラー 最小/最大にチェック→読み込み 新規カラーマップを作成→Spectral 反転にチェック→分類 42 既定スタイルとして保存しておく
  • 43. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編 4. データを組み合わせて 生息適地マップを作成 43
  • 44. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 生息適地の計算 これまで作成したラスタデータを組み合わせて カッパの生息適地をラスタ計算機で算出します。 メニュー→ラスタ→ラスタ計算機 を選択 「ラスタバンド」の畑地を選択→カレントレイヤ の領域 を押す ラスタ演算式に次の式を入力(コピペでもOK) 44 メニュー→プロジェクト→新規 を選択 「kasen_distance.tif」「hatati1km.tif」 「irradiation.tif」を読み込み 「出力レイヤ」→選択「kappa.tif」※.tifも入力 ((("kasen_distance@1" < 100) * 100 + (100 <= "kasen_distance@1") * ("kasen_distance@1" < 500) * 50 + ("kasen_distance@1" >= 500) * 10) * "hatati1km@1" * (100 - "irradiation@1" / 100)) ^ 0.33333 ↑ダブルクリック で演算式↓に追加
  • 45. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ラスタ演算式の解説1 ラスタ演算式の意味を説明します。 ※「河川からの距離」がkasen_distance、「畑地面積率」がhatati1km、 「日射量」がirradiationという名前のラスタレイヤになっています。 ( ( ("kasen_distance@1"<100)*100 + (100<="kasen_distance@1")*("kasen_distance@1"<500)*50 + ("kasen_distance@1">= 500)*10 ) * "hatati1km@1" * (100 - "irradiation@1" / 100) ) ^ 0.33333 最初のカッコの部分は、kasen_distanceのラスタ値が100より小 さければ1、そうでなければ0を返すという条件式です。 45 ("kasen_distance@1" < 100) (100 <= "kasen_distance@1") * ("kasen_distance@1" < 500) * 50 次の部分は、kasen_distanceが100以上であれば1を返す部分と、 kasen_distanceが500より小さければ1を返す部分を掛けています。 つまり、kasen_distanceが100以上かつ500より小さければ1を返し、 そうでなければ0を返します。また、最後にそれに対して50を掛けて いるので、この式の部分は河川からの距離が100mから500mの場所 はその値を50にするという意味になります。 ここまでの説明からkasen_distanceを含む 1段目の式は、以下の表のようにラスタ値を 変更するという意味になります。 つまり、川に近いと良い場所(100点)、遠 いと悪い場所(10点)になります。 演算式全体 演算式の説明1 演算式の説明2 演算式の説明3 河川までの距離ラスタの値 0~100m 100 100~500m 50 500m~ 10
  • 46. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ラスタ演算式の解説2 ラスタ演算式の意味を説明します。 ※「河川からの距離」がkasen_distance、「畑地面積率」がhatati1km、 「日射量」がirradiationという名前のラスタレイヤになっています。 ( ( ("kasen_distance@1"<100)*100 + (100<="kasen_distance@1")*("kasen_distance@1"<500)*50 + ("kasen_distance@1">= 500)*10 ) * "hatati1km@1" * (100 - "irradiation@1" / 100) ) ^ 0.33333 2段目のhatati1kmの部分は、なにも変更せず0~100の畑地面積 率の値をそのまま使います。 46 "hatati1km@1" (100 - "irradiation@1" / 100) 3段目のirradiationの部分は、切片が100で傾きが-1/100の直線式となって います。なので、日射量が0(Wh.㎡.1day)だとラスタ値が100で、日射 量が10000(Wh.㎡.1day)だと0になるように変換されます。 つまり、日射量が少ないと良い場所(100 点)、多いと悪い場所(0点) になります。 最後に、kasen_distance、hatati1km、irradiationの 部分を掛けあわせて、それを0.33333乗しています。 これは各ラスタレイヤを0~100になるように変換し た上で、その相乗平均をとることを意味します。 つまり、ラスタレイヤの内1つでも0だと全体が0にな り、すべてのレイヤが100であれば100になります。 演算式全体 演算式の説明4 演算式の説明5 演算式の説明6 まとめ 総合すると、河川までの距離が近く、畑地が多く、 日射量が少ない場所が、カッパが出没しやすい場所 (100点)、反対に河川までの距離が遠く、畑地が少 なく、日射量が多い場所はカッパが出没しにくい場 所(0点)となるようにラスタ値を変換する式になっ ています。
  • 47. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 生息適地マップレイヤのスタイルを設定して、生息適地の得点により 色分けした「カッパ生息適地マップ」を作成します。 レイヤを右クリック→プロパティ→スタイル生息適地としての得点で色分けされているの を確認 レンダータイプ→単バンド疑似カラー 最小/最大にチェック→読み込み 新規カラーマップを作成→Spectral 反転にチェック→分類 47 既定スタイルとして保存しておく
  • 48. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 生息適地マップ色々なレイヤを重ねたり、スタイルを変更したりして 「カッパ生息適地マップ」を仕上げてみましょう! 48
  • 49. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 応用編  カッパの生息適地マップの分析 49
  • 50. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 入門編のおさらい 生息適地を推定するための地図データをQGISで変換&作成しました。 ◯ データを見ながら操作できる ✕ やり直し、繰り返しが面倒 生息適地を「それっぽい演算式」で推定しました。 ◯ それっぽい地図が作成できる ✕ 演算式の根拠が弱い 50
  • 51. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 応用編の流れ ★ やり直し、繰り返しが簡単 GDAL&GRASSコマンドで 地図データ作成 ★ 演算式を分析的に構築 Rで生息適地マップの分析・作成 51 応用編の内容は、ここで完全に理解できなくても大丈夫です。コマン ドを使ったGISデータの扱いがどんな感じなのか雰囲気を掴んでもらえ ればOKです。各ソフトの習得法も紹介しますので、今後の独学のため のステップとしてもらえればと思います。
  • 52. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 応用編 GDAL&GRASSコマンドで 地図データ作成・変換 52 入門編で作成したデータ(河川からの距離、畑地面積率、日射量、生 息適地)を、GDALとGRASSコマンドを組み合わせて作成します。
  • 53. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン GDALとは最初にGDALについて簡単な説明をします。 ・GISデータ変換のためのプログラムライ ブラリ ・GDAL Utility ProgramsというGISデー タ変換のための便利なコマンド集を提供し ている ・ GDALは多くのソフトでGISデータ変換 のために利用されている GDALを利用しているソフト 53 ArcGIS
  • 54. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン GDALコマンドGDAL Utility Programsで提供されている コマンドについて説明します。 54 ラスタ用ベクタ用 ラスタ情報表示 ファイル形式変換 投影法変換とか 標高関連、傾斜とか タイル地図作成 べクタ→ラスタ変換 距離ラスタ作成 ラスタ→ベクタ変換 ラスタ計算機 ベクタ情報表示 投影変換、ファイル形式変換 GDALコマンドを使えば、GISデータをいろいろ 操作できます。
  • 55. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン GDALコマンド例GDALコマンドの例を紹介します。 55 ౎ژḱᴨḩὟᾛᾜᾤὥᾫᾠᾝὠ᷂ḀͨΌӭಐࣈὟᾪᾟᾘᾛᾜὥᾫᾠᾝὠḉ܂᷐ࣶḂ gdaldem hillshade dem.tif shade.tif ౎ژḱᴨḩᷥЖঢ૷ḉὬὧᾤ✕Ὤὧᾤᷢ೅ٯ᷐Ḃ gdalwarp -r bilinear -tr 50 50 dem.tif dem50.tif ͆૷׊૷ᷥḡḑᴨṁḿḋḎṕḉᾌᾋᾄᷢ೅ҙ᷐Ḃ ogr2ogr -t_srs epsg:3100 data_utm.shp data.shp これをOSGeo4Wコンソールに打ち込むだけ
  • 56. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン OSGeo4Wの起動OSGeo4Wを起動して、簡単なコマンド操作をして みます。 OSgeo4W Shellのアイコン をダブルクリックして起動。 もしくは、スタート→すべてのプログラム →OSGeo4W→OSGeo4W Shell 56 コマンドを打って以下の操作を実行します。 •kappadataフォルダに移動 •kappadataの中のファイル一覧を表示 •mydataフォルダをmydata_qgisに名前を変更 •新たに空のmydataフォルダを作成 άά὚܂դḿḓṕḪᷢ̈́ବ >cd kappadata άά὚ḿḋḎṕḉ͔ฅ౓ݸ >dir άά὚ḿḓṕḪ൮ᷥ೅ٯ >mv mydata mydata_qgis άά὚ࢡ᷎ᶻḿḓṕḪᷥ܂ࣶ >mkdir mydata ファイル名の途中でtabを押すと補完できます。 ↑↓ボタンを押すと、コマンド履歴が表示できます。
  • 57. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 河川からの距離河川からの距離図をコマンドで作成してみます。 57 άάὗ὚὾ύὸᾃᷥधપ᷏᷁᷵ᷡᶻᴮṋṌṔѦଔุᷝᷟ୸മلḒṝḝᴨḱḍṝḚᷥ݊પᴯ set GDAL_CACHEMAX=1024 set GDAL_FILENAME_IS_UTF8=NO set SHAPE_ENCODING=CP932 άάὗ὚ϳशḱᴨḩḉ݊પఇ̷ᷞḙṔḭṁ᷎ᷝଈΌೳḉ೅ҙ ogr2ogr -clipsrc 141.5 39.3333333 141.625 39.4166667 -s_srs epsg:4612 -t_srs epsg:3100 mydatakasen_UTM54.shp dataW05-07_03_GMLW05-07_03-g_Stream.shp άάὗ὚Жঢ૷Ὠὧᾤ✕Ὠὧᾤᷞϳशಊಠ᷃Ὠᷥṓḣḩᷢ೅ҙ gdal_rasterize -burn 1 -tr 10 10 -l kasen_UTM54 mydatakasen_UTM54.shp mydatakasen.tif άάὗ὚ṓḣḩਯ᷃Ὠ᷂ḀᷥԵฑḉבܭ gdal_proximity -distunits GEO -values 1 mydatakasen.tif mydatakasen_distance.tif άάὗ὚ḱᴨḩᷥѐ஁ᴮṓḣḩᴯ gdalinfo mydatakasen_distance.tif άάὗ὚ḱᴨḩᷥѐ஁ᴮṃḙḩᴯ ogrinfo -al -so mydatakasen_UTM54.shp άάὗ὚ᾈ὾ᾀᾊᷞѐ஁ qgis mydatakasen_distance.tif kappadata¥生息適地コマンド.txtを開く コマンドを選択してコピー→コンソール で右クリック→貼り付け ::はコメント行なので無視される
  • 58. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン GDALコマンドの 習得法 最初からコマンドを自在に組み立てるのは難しいです。 そこでGDALコマンドをどうやったら習得できるのかを 紹介します。 58 コマンドのマニュアルを調べる(WEB) キーワードでググる→ブログやメーリン グリストを参考に真似する 本を見る(GDALに関する情報は多くあ りません) とにかくコマンドを打って試行錯誤する
  • 59. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 1km圏畑地面積の計算で利用する GRASSとは1km圏畑地面積をGDALとGRASSコマンドで作成 しますが、その前にGRASSについて説明します。 59 GRASSの習得法 ハンズオンに参加する マニュアルを調べる(WEB) 本を見る ・1984年から公開されているオープンソース のGISソフトウェア ・もともとはコマンド操作を基本としていた が、今はGUIもある ・ラスタ形式、ベクタ形式ともにサポート し、豊富な解析コマンドがある。 今回はGRASSをコマンドからバッチ処理的な方法で 利用します。通常のように対話的な操作方法ではあり ませんが、GRASSコマンドの使い方は同じです。
  • 60. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 1km圏畑地面積1km圏畑地面積をGDALとGRASSコマンドで作成し てみます。(GDAL部分の説明は同じなので省略) 60 άάὗ὚὾ᾉὸᾊᾊҤՉ೅᷏ࣞ᷁᷵ᷡᶻᴮޒڊҤՉᷥḻḣᴖḱᴨḩ೑়रᴖधપḿḋḎṕᷥ݊પᴯ set GISBASE=%OSGEO4W_ROOT%appsgrassgrass-6.4.4 set LD_LIBRARY_PATH=%GISBASE%lib;%LD_LIBRARY_PATH% set PATH=%GISBASE%bin;%GISBASE%etc;%GISBASE%etcpython;%GISBASE%lib;%GISBASE% extralib;%OSGEO4W_ROOT%appsmsysbin;%PATH% set PYTHONPATH=%GISBASE%etcpython set GISDBASE=%HOME%Desktopkappadatagrassdata ←今回はここを指定 set GISRC=%HOME%Desktopkappadatahandson.grassrc άάὗ὚ଈΌೳḉ݊પ᷎ᷝṗḛᴨḡṑṝḿḓṕḪḉ܂ࣶᴖḕṖṝḲṈḭṁḥḭḲḉधપḿḋḎṕᷢӫຉ g.gisenv.exe set="MAPSET=PERMANENT" g.gisenv.exe set="LOCATION_NAME=temp" g.gisenv.exe set="GISDBASE=%GISDBASE%" g.gisenv.exe set="GRASS_GUI=text" g.proj -c epsg=3100 location=temp άάὗ὚ḱᴨḩḉ὾ᾉὸᾊᾊᷢ୅᷶ڴ᷶ᴖבܭฺ͐ḉधપᴖᾩὥᾥᾜᾠᾞᾟᾙᾦᾩᾪḉޒڊᴖḱᴨḩḉࠟ᷄߾᷎ r.in.gdal --overwrite -o -e input=mydatahatati.tif output=tmp g.region rast=tmp r.neighbors --overwrite -c input=tmp output=tmp_neighbors method=average size=101 r.out.gdal -c createopt="TFW=YES,COMPRESS=LZW" input=tmp_neighbors output=mydata hatati1km.tif άάὗ὚ࠖซߘวؽᴖṗḛᴨḡṑṝḿḓṕḪḉ܃ࠪ rm -r %GISDBASE%temp ←epsgはデータによって変更 ↓GRASSコマンドの主要な部分
  • 61. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 日射量日射量をGDALとGRASSコマンドで作成してみます。 61 άάὗ὚὾ᾉὸᾊᾊҤՉ೅᷏ࣞ᷁᷵ᷡᶻᴮޒڊҤՉᷥḻḣᴖḱᴨḩ೑়रᴖधપḿḋḎṕᷥ݊પᴯ 同じなので省略 άάὗ὚ଈΌೳḉ݊પ᷎ᷝṗḛᴨḡṑṝḿḓṕḪḉ܂ࣶᴖḕṖṝḲṈḭṁḥḭḲḉधપḿḋḎṕᷢӫຉ 同じなので省略 άάὗ὚ḱᴨḩḉ὾ᾉὸᾊᾊᷢ୅᷶ڴ᷶ᴖבܭฺ͐ḉधપᴖᾩὥᾪᾬᾥḉޒڊᴖḱᴨḩḉࠟ᷄߾᷎ r.in.gdal --overwrite -o -e input=mydataiwate_demUTM54.tif output=dem r.in.gdal --overwrite -o -e input=mydataaspect.tif output=aspect r.in.gdal --overwrite -o -e input=mydataslope.tif output=slope g.region rast=dem r.sun elevin=dem aspin=aspect slopein=slope day="172" glob_rad=globrad --overwrite r.out.gdal -c createopt="TFW=YES,COMPRESS=LZW" input=globrad output=mydata/ irradiation.tif άάὗ὚ࠖซߘวؽṗḛᴨḡṑṝḿḓṕḪḉ܃ࠪ 同じなので省略
  • 62. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 生息適地の計算生息適地の計算をGDALコマンドで実行してみます。 (QGISで実施した演算式による手法) 62 άάὗ὚ᾟᾘᾫᾘᾫᾠὨᾢᾤὥᾫᾠᾝ᷂ḀḱᴨḩḒṔḌḉݸ᷐ṇṔḞṝᾘᾩᾜᾘὥᾪᾟᾧḉ܂ࣶ gdaltindex mydataarea.shp mydatahatati1km.tif άάὗ὚ᾢᾘᾪᾜᾥᾖᾛᾠᾪᾫᾘᾥᾚᾜᴖᾟᾘᾫᾘᾫᾠὨᾢᾤᴖᾠᾩᾩᾘᾛᾠᾘᾫᾠᾦᾥᷥḱᴨḩḉ᷐ᷰᷝᾘᾩᾜᾘὥᾪᾟᾧᷥఇ̷ᷢᷔḄᶿḂᴗ gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline -cutline mydataarea.shp mydatahatati1km.tif mydatar_hatati1km.tif gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline -cutline mydataarea.shp mydatakasen_distance.tif mydatar_kasen_distance.tif gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline -cutline mydataarea.shp mydatairradiation.tif mydatar_irradiation.tif άάὗ὚ᾞᾛᾘᾣᾖᾚᾘᾣᾚᷞṓḣḩίܭḉޒڊ᷐Ḃ gdal_calc --overwrite -A mydatar_kasen_distance.tif -B mydatar_hatati1km.tif -C mydata r_irradiation.tif --outfile=mydatakappa.tif --calc="pow(((A < 100) * 100 + (100 <= A) * (A < 500) * 50 + (A >= 500) * 10) * B * (100 - C / 100),0.33333)" άάὗ὚ḱᴨḩᷥѐ஁ gdalinfo mydatakappa.tif qgis mydatakappa.tif gdal_calcで使用するラスタはすべて、同じ解像度、同じ範囲、同 じ投影法にそろえておく必要があります。
  • 63. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン コマンドの利点GDALやGRASSコマンドでデータを作成することによ る利点を説明します。 63 GISの処理をテキストに保存しておける 手順の再現、再利用が可能 プログラムと連携、バッチ処理ができる 宿題 •500m圏畑地面積率を計算してみましょう •冬至の日射量を計算してみましょう •演算式を変更して生息適地を計算してみましょう →少し数値を変えてコピペするだけ ※最近ではGISの処理をグラフィカ ルに作成・保存できる「モデル」や 「モデルビルダー」が利用できるよ うになってきています。
  • 64. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン おまけPythonとの連携PythonからGRASSを呼び出す方法を紹介します。 参考程度なので興味があれば調べてみてください。 64 # -*- coding: utf-8 -*- import os,sys import grass.script as grass import grass.script.setup as gsetup import binascii ὚ଈΌೳḉ݊પ᷎ᷝṗḛᴨḡṑṝḿḓṕḪḉ܂ࣶᴖḕṖṝḲṈḭṁḥḭḲḉधપḿḋḎṕᷢӫຉ epsg = 3100 gisrc = os.environ['GISRC'] gisbase = os.environ['GISBASE'] gisdb = os.environ['GISDBASE'] location = binascii.hexlify(os.urandom(16)) mapset="PERMANENT" grass.run_command("g.gisenv.exe",set="GISDBASE="+gisdb) grass.run_command("g.gisenv.exe",set="LOCATION_NAME="+location) grass.run_command("g.gisenv.exe",set="MAPSET="+mapset) grass.run_command("g.gisenv.exe",set="GRASS_GUI=text") grass.run_command("g.proj",epsg=epsg,location=location,flags="c") gsetup.init(gisbase, gisdb, location, mapset) ὚ᾩὥᾥᾜᾠᾞᾟᾙᾦᾩᾪᷥࠖซ input=sys.argv[1] output=sys.argv[2] size=sys.argv[3] grass.run_command("r.in.gdal", input = input , output = "tmp",flags="oe", overwrite=True) grass.run_command('g.region', rast="tmp", flags='ap') grass.run_command("r.neighbors", input = "tmp", output = "tmp_neighbors" , method = "average",size=size, flags="c",overwrite=True) grass.run_command("r.out.gdal", input = "tmp_neighbors", output = output,flags="c") άά὚ࡱӫᷥᾧᾰᾫᾟᾦᾥḣḙṔṁḲḉޒڊᴮὪᾢᾤױᷞבܭ᷐Ḃ᷿ᶽᷢࣞ͢ḉ݊પᴯ >python neighbors.py mydata¥hatati.tif mydata¥hatati3km.tif 301 GRASS環境変数は設定しておく
  • 65. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン Rで使用する データの準備 Rで生息適地マップを分析する際に使用する データの作成と確認をしておきます。 άάὗ὚ᾉᷞܺෟ᷐ḂṈḣḙᴖͨΌࣈᷥ܂ࣶ gdal_rasterize -a_nodata -9999 -tr 10 10 -burn 1 dataecorisplan.shp mydataplan.tif gdalwarp -overwrite -r near -tr 10 10 -dstnodata -9999 -t_srs epsg:3100 -crop_to_cutline -cutline mydataarea.shp mydataplan.tif mydatamask.tif gdaldem hillshade mydataiwate_demUTM54.tif mydatashade.tif άάὗ὚ᾉᷞܺෟ᷐Ḃḕḭḻᷥѐ஁਱૞ᴖੴێఇ̷ᷥѐ஁ ᾨᾞᾠᾪὗᾤᾰᾛᾘᾫᾘᾶᾪᾟᾘᾛᾜὥᾫᾠᾝὗᾛᾘᾫᾘᾶᾜᾚᾦᾩᾠᾪᾶᾧᾣᾘᾥὥᾪᾟᾧὗᾛᾘᾫᾘᾶᾜᾚᾦᾩᾠᾪᾶᾢᾘᾧᾧᾘὥᾪᾟᾧ 65
  • 66. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 応用編 Rで生息適地マップの分析・作成 66 Rに現地調査結果のデータと、GDALとGRASSコマンドで作成した データ(河川からの距離、畑地面積率、日射量)を読み込み、その関 係性を分析します。そのあと、生息適地の演算式を統計モデリングを 利用して作成し、その結果を地図データとして出力します。
  • 67. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン Rとは最初にRについて簡単な説明をします。 67 • 統計解析のためのオープンソースのプログ ラム言語 • きれいな図やグラフを表示、出力できる • パッケージ(ライブラリ)を追加すること で機能を拡張することができる。 • 地図データを扱うパッケージを追加するこ とでラスタ、ベクタデータを読み込み、統 計分析することができる
  • 68. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン Rのパッケージ インストール Rを起動して地図データを扱うために必要な パッケージをインストールします。 パッケージ→ローカルにあるzipファイルからの パッケージのインストール を選択 68 kappadata¥program¥R_libraryのすべての ファイルを選択してインストール ※「personal libraryにインストールするか?」 というメッセージが出る場合はYesを選択 今回の分析では、dismo、rgdal、raster、ggplot2ライブラ リを利用します。そのライブラリを利用するために必要な パッケージファイルをインストールします。 通常は、ネットワークを利用してインストールしますが、 今回は回線の都合のためあらかじめ用意しておいたパッ ケージファイルからインストールします。
  • 69. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン スクリプトの読み込みあらかじめ用意しておいたRのスクリプト ファイルを読み込みます。 ファイル→スクリプトを開く を選択 69 kappadata¥kappa.R を選択 コンソール(コマンド実行、結果を表示) スクリプト(コマンドをまとめたもの)
  • 70. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン Rの基礎Rコンソールで簡単な操作をしてみます。 70 ὚܂դḱḍṖḙḲṔᷥ౓ݸᴮᾉᷢ᷁᷈ḂḝṋṝḲڊᷦ὚ᴯ > getwd() [1] "C:/Users/mizutani/Documents" ὚܂դḱḍṖḙḲṔᷥ೅ٯὟքढḁᷦᴭὦᴭᴖᾫᾘᾙᷞ೘Ґὠ > setwd("C:/Users/mizutani/Desktop/kappadata/") ὚Ҫਓᷡבܭ > 1+2 [1] 3 ὚בܭץϰḉ೅ࣞᾘᷢ৩୺Ὗ৩୺ᷢᷦὗέὤὗᷟᶻᶽӫڜḉܺᶽὠ > a<-2*3 ὚೅ࣞᷥਯḉ౓ݸ > a [1] 6 ὚೅ࣞᷥਯḉܺᷚᷝבܭ᷎ᴖᶹḀᷖᷡ೅ࣞᷢ৩୺ᴗבܭץϰḉ౓ݸᴗ > b<-a+4 > b [1] 10 このほかRについて最低限知っておか なければならないことは色々あります が、ここでは説明しません。 ・データ形式(スカラー、ベクトル、 行列、データフレーム、リスト) ・制御構文(if、forなど) ・関数など
  • 71. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 地図データ読み込みRに地図データを読み込んで表示してみます。 71 ὚ṓḎṀṓṔᷥ୅᷶ڴ᷶ᴮḻḭḛᴨḢᷦḎṝḣḲᴨṕۥ᷶ᴯ library(rgdal) library(raster) library(dismo) library(ggplot2) #GDAL設定おまじない(日本語エンコーディングの指定) setCPLConfigOption("GDAL_FILENAME_IS_UTF8","NO") setCPLConfigOption("SHAPE_ENCODING","cp932") #ラスタデータの読み込み(河川からの距離、畑地面積率、日射量) kasen_distance<-raster("mydata/r_kasen_distance.tif") hatati1km<-raster("mydata/r_hatati1km.tif") irradiation<-raster("mydata/r_irradiation.tif") shade<- raster("mydata/shade.tif") #地図表示 plot(kasen_distance) plot(hatati1km) plot(irradiation,col=cm.colors(12)) plot(shade,col=grey(1:100/100)) #ベクタデータの読み込み(カッパの確認地点、調査範囲) kappa <- readOGR("data/ecoris/kappa.shp","kappa") plan <- readOGR("data/ecoris/plan.shp","plan") #地図表示 plot(kappa) plot(plan) #地図の重ね合わせ plot(shade,col=grey(1:100/100)) plot(plan,add=T) points(kappa,col="red",cex=0.7,pch=20) スクリプトウインドウでCtrl+Rを 押すと、その行を実行します。 (複数行選択→実行も可)
  • 72. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ラスタ値の抽出 カッパの確認地点における各ラスタ値を抽出し、調査 範囲内からランダムに作成したバックグラウンドデー タにおいてもラスタ値を抽出します。これらを合わせ て分析に使用するデータセットを作成します。 72 #説明変数としてラスタレイヤをまとめる predictors<-stack(kasen_distance,hatati1km,irradiation) #バックグラウンドデータ作成(maskデータ内のランダムなポイントデータ10000点) mask <- raster("mydata/mask.tif") set.seed(0) backg<-randomPoints(mask,n=10000) #地図表示 plot(mask,ext=extent(546817,551330,4354006,4358079)) points(backg,cex=0.05,pch=20) #カッパ確認地点とバックグラウンドデータのラスタ値を抽出する datapres <- extract(predictors,kappa) databackg <- extract(predictors,backg) #データ確認 head(datapres) head(databackg) #データセットを作成する(pa列にカッパ確認地点は1,バックグラウンドデータは0を入れる) pa<-c(rep(1,nrow(datapres)),rep(0,nrow(databackg))) data_rbind<-rbind(datapres,databackg) data_cbind<-cbind(pa,data_rbind) envdata<-data.frame(data_cbind) colnames(envdata)<-c("pa","川からの距離","1km圏畑地面積率","日射量") #データ確認 head(envdata) tail(envdata)
  • 73. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データ分析① 作成したデータセットから単変量解析をしてみます。 73 #データ要約(pa==0はバックグラウンド、pa==1はカッパ確認地点) summary(envdata[envdata$pa==0,]) summary(envdata[envdata$pa==1,]) #ヒストグラムの表示 hist(envdata[envdata$pa==0,"川からの距離"],col="#ff00ff40") hist(envdata[envdata$pa==1,"川からの距離"],col="#0000ff40") hist(envdata[envdata$pa==0,"1km圏畑地面積率"],col="#ff00ff40") hist(envdata[envdata$pa==1,"1km圏畑地面積率"],col="#0000ff40") hist(envdata[envdata$pa==0,"日射量"],col="#ff00ff40") hist(envdata[envdata$pa==1,"日射量"],col="#0000ff40",add=T) #ggplot2でヒストグラム図作成(くわしく説明しませんがカッコイイ図を作成できます。) xval<-c("川からの距離","1km圏畑地面積率","日射量") windowsFonts(Meiryo=windowsFont("メイリオ")) for(i in 1:3){ #種データ情報と表示位置 mindata<-min(envdata[envdata$pa==1,xval[i]]) maxdata<-max(envdata[envdata$pa==1,xval[i]]) mediandata<-median(envdata[envdata$pa==1,xval[i]]) str<-paste(xval[i],"(確認地点)n","最小値:",sprintf("%2.2f",mindata),"n") str<-paste(str,"最大値:",sprintf("%2.2f",maxdata),"n") str<-paste(str,"中央値:",sprintf("%2.2f",mediandata),"n") xpos<-min(na.omit(envdata[envdata$pa==0,xval[i]])) pafactor<-as.factor(envdata$pa) p<-ggplot(envdata,aes_string(x=xval[i],fill="pafactor"))+ theme_grey(base_size=12,base_family="Meiryo")+ ylab("count(log_10)") + theme(legend.position=c(1,1),legend.justification=c(1,1),axis.title.x=element_blank()) + geom_histogram(position="identity",alpha=0.4) + guides(fill=guide_legend(title=NULL)) +  scale_fill_discrete(labels=c("バックグラウンドデータ","確認地点データ")) + scale_y_log10()+ coord_cartesian(ylim = c(10^0, 10^4)) + annotate("text",x=xpos,y=8000,label=str,size=4,family="Meiryo",hjust=0,vjust=1) ggsave(paste("mydata/",xval[i],"分布.png",sep=""), p, width = 16, height = 16,unit="cm",dpi=300) }
  • 74. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン データ分析② 作成したデータセットから二変量解析をしてみます。 74 #説明変数間の相関係数 cor(envdata[envdata$pa==0,2:4]) #説明変数間の散布図 plot(envdata[envdata$pa==0,2:4],pch=".") #相関ペアプロット用関数 panel.cor<- function(x,y,digits=2,prefix="",cex.cor,...){ usr<-par("usr") on.exit(par(usr)) par(usr=c(0,1,0,1)) r<-abs(cor(x,y,use="complete.obs")) txt<-format(c(r,0.123456789),digits=digits)[1] txt<-paste(prefix,txt,sep="") if(missing(cex.cor)) cex.cor<-0.8/strwidth(txt) text(0.5,0.5,txt,cex=cex.cor*(1+r)/2) } panel.hist <- function(x,...){ usr<-par("usr") on.exit(par(usr)) par(usr=c(usr[1:2],0,1.5)) h<-hist(x,plot=FALSE) breaks<-h$breaks nB<-length(breaks) y<-h$counts y<-y/max(y) rect(breaks[-nB],0,breaks[-1],y,col="white",...) } #相関ペアプロット図 ppi=300 png(file="mydata/相関ペアプロット.png", width=16/2.54*ppi, height=16/2.54*ppi,res=ppi) pairs(envdata[envdata $pa==0,2:4],pch=".",upper.panel=panel.cor,diag.panel=panel.hist,lower.panel=panel.smooth) dev.off()
  • 75. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 統計モデリング統計モデリングにより生息適地を推定してみます。 ※統計モデリングについては説明しません。 75 #統計モデルを作成(glmを利用) colnames(envdata)<-c("pa","r_kasen_distance","r_hatati1km","r_irradiation") fit<- glm(pa~ . + I(r_kasen_distance^2) + I(r_hatati1km^2) + I(r_irradiation^2),family=binomial(link="logit"),data=envdata) fit fit<-step(fit) summary(fit) #モデルの評価(AUC、閾値、ROC曲線、予測値の分布比較) e<-evaluate(p=envdata[envdata$pa==1,],a=envdata[envdata$pa==0,],fit,type="response") e threshold(e) plot(e,"ROC") density(e) boxplot(e,col=c("blue","red")) #モデルにより生息適地を計算、表示、データ書き出し pg<-predict(predictors,fit,type='response') plot(pg) plot(plan,add=T) points(kappa,col='red',pch='+') tr<-threshold(e,'kappa') plot(pg>tr) writeRaster(pg, filename="mydata/カッパ生息確率.tif", format="GTiff", overwrite=TRUE)
  • 76. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 応答曲線の作成説明変数の変化が生息適地にどのような影響を及ぼす かを示す応答曲線を作成してみます。 ※詳しくは説明しません。 76 #glm応答曲線用関数 predictvals <- function(model,xvar,data,...){ f <- sapply(data, is.factor) notf <- !f m <- matrix(nrow=1, ncol=ncol(data)) if (sum(notf) > 0) m[notf] <- as.numeric(apply(subset(data[,notf,drop=FALSE],pa==1), 2, mean)) if (sum(f) > 0 ) m[f] <- as.numeric(apply(subset(data[,f,drop=FALSE],pa==1), 2, modal)) m <- matrix(m, nrow=nrow(data), ncol=length(m), byrow=TRUE) colnames(m) <- names(data) m<-data.frame(m) m[f]<-sapply(m[,f,drop=FALSE],factor) v<-data[,xvar] if (!is.factor(v)) { xrange<-range(v) m[,xvar]<-seq(xrange[1],xrange[2],length.out=nrow(data)) }else{ m[,xvar]<-v } m['pa']<-predict(model,m,type='response') m } #応答曲線 for(i in 1:3){ xval<-c("r_kasen_distance","r_hatati1km","r_irradiation") xlabel<-c("川からの距離","1km圏畑地面積","日射量") rn<-range(envdata[,xval[i]]) xpos<-(rn[1]+rn[2])/2 gml_predicted <-predictvals(fit,xval[i],envdata) res<-ggplot(envdata,aes_string(x=xval[i],y="pa")) + geom_line(data=gml_predicted,color="red") + xlab(xlabel[i])+ylab("生息適地確率") + geom_line(y=tr,color="blue",size=1,linetype="dashed") + annotate("text",x=xpos,y=0.07,label="生息適地閾値(Cohhen's Kappa)") ggsave(paste("mydata/",xlabel[i],"応答曲線",".png",sep=''),res, width = 16, height =16,unit="cm",dpi=300) }
  • 77. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン ggplot2で地図作成ggplot2で生息適地マップを作成してみます ※詳しくは説明しません。 77 #ggplot2で生息適地マップ作成 windowsFonts(Meiryo=windowsFont("メイリオ")) en<-crop(pg,extent(546620,551600,4354300,4358100)) hs<-crop(shade,extent(546620,551600,4354300,4358100)) hdf <- rasterToPoints(hs) hdf <- data.frame(hdf) colnames(hdf) <- c("X","Y","Hill") edf <- rasterToPoints(en) edf <- data.frame(edf) colnames(edf) <- c("X","Y","Environment") adf<-fortify(plan) colnames(adf)[1:2] <- c("X","Y") sdf<-data.frame(kappa@coords) colnames(sdf)[1:2] <- c("X","Y") g<-ggplot(NULL, aes(X, Y)) + theme_grey(base_size=13,base_family="Meiryo")+ geom_raster(data = edf, aes(fill = Environment)) + geom_raster(data = hdf, aes(alpha = Hill)) + scale_alpha(range = c(0.5, 0), guide = "none") + scale_x_continuous(breaks=NULL,limits=c(546620,551600),expand=c(0,0)) + scale_y_continuous(breaks=NULL,limits=c(4354300,4358100),expand=c(0,0)) + geom_path(data= adf,aes(group=group),colour = "#333333", size = 0.5) + geom_point(data=sdf,aes(x=X,y=Y,colour="black"),size=1.5,alpha=0.8) + scale_colour_manual(guide=guide_legend(title=NULL),name = '確認地点', values = 'black', labels = '確認地点') + coord_equal() + theme(legend.position=c(1,1),legend.justification=c(1,1),axis.title.x=element_blank(),axis.title.y=element_blank()) g<-g+scale_fill_gradientn(name="生息適地",colours = c("white","green","yellow","orange","red")) ggsave("mydata/カッパ生息適地マップ.png", g, width = 16, height = 16,unit="cm",dpi=300) plot(g)
  • 78. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン 地図データを扱うための Rの習得法 Rで地図データを分析出力するには「統計」「コマン ド」「グラフィックス」の知識が必要です。そこで地図 データを扱うためにRをどうやったら習得できるのかを 紹介します。 78 本を見る(Rは情報が多い) とにかくコマンドを打って試行錯誤する キーワードでググる (Rは情報が多い) 「統計」はあきらめて勉強する 生息適地推定については↓のPDFがお薦め
  • 79. 2014/10/31 FOSS4G Tokyo 2014 ハンズオン お疲れ様でした。 上手くいったのは皆様のおかげ。 失敗したのは、妖怪のせい。 79 e-mail: mizutani.takayuki+handson@gmail.com twitter: @tmizu23