業務効率化のための
GDAL活用
∼早く帰宅するために∼
(株)エコリス 水谷貴行
2014年3月 日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
14年3月14日金曜日
業務紹介
環境アセスメント
事業者
コンサルタント
調査会社
事業による自然への影響を予測・評価して対策をおこなう
14年3月14日金曜日
業務紹介
調査会社の仕事
調査 同定 とりまとめ
14年3月14日金曜日
業務紹介
調査会社の1日
調査会社の1年
移動 野外調査 移動 整理・同定・とりまとめ
6:00 8:30 16:30 19:00 20:00
4月
春調査 夏調査 秋調査
5月 7月 8月 10月 12月 2月
冬調査 とりまとめ
猛禽調査 渡り調査 猛禽調査
3月
14年3月14日金曜日
業務紹介
調査会社の1日
調査会社の1年
移動 野外調査 移動 整理・同定・とりまとめ
6:00 8:30 16:30 19:00 20:00
4月
春調査 夏調査 秋調査
5月 7月 8月 10月 12月 2月
冬調査 とりまとめ
猛禽調査 渡り調査 猛禽調査
3月
ここを何とかするために
GDAL活用!
14年3月14日金曜日
GISデータ変換のための
ライブラリ&コマンド
GDAL紹介
GDALとは?
多くのGISソフトの内部で
データ変換に利用されています。
ArcGIS
14年3月14日金曜日
GDAL紹介
GDALコマンド
コマンドでGISデータを
いろいろ操作できます。
ラスタ用 ベクタ用
ラスタ情報表示
投影法変換とか
標高関連、傾斜とか
べクタ→ラスタ変換
距離ラスタ作成
ラスタ計算機
ファイル形式変換
ラスタ→ベクタ変換
タイル地図作成
ベクタ情報表示
投影変換、ファイル形式変換
14年3月14日金曜日
GDAL紹介
GDALコマンド
標高データ(dem.tif)から陰影起伏図(shade.tif)を作成する
gdaldem	 hillshade	 dem.tif	 shade.tif
例(これをOSGeo4Wコンソールに打ち込むだけ)
標高データの解像度を50m✕50mに変更する
gdalwarp	 -r	 bilinear	 -tr	 50	 50	 dem.tif	 dem50.tif
緯度経度のシェープファイルをUTMに変換する
ogr2ogr	 -t_srs	 epsg:3100	 data_utm.shp	 data.shp
14年3月14日金曜日
GDAL紹介
GDALのおすすめポイント
上手く活用すれば業務効率化できる!!
GISの処理をテキストに保存しておける
手順の再現、再利用が可能
プログラムと連携、バッチ処理ができる
14年3月14日金曜日
GDAL活用例
set datetmp=%date:/=%
set timetmp=%time:~0,8%
set timetmp=%timetmp::=%
set timetmp=%timetmp: =0%
SET GDAL_FILENAME_IS_UTF8=NO
mkdir GPS
if exist E: xcopy /e E:GarminGPX GPS
if exist F: xcopy /e F:GarminGPX GPS
if exist G: xcopy /e G:GarminGPX GPS
if exist H: xcopy /e H:GarminGPX GPS
for %%i in (GPSウェイポイント*.gpx) do (
binogr2ogr.exe -append -update -skipfailures -fieldTypeToString
DateTime shp %%i waypoints -select name,cmt,ele,time
)
move shpwaypoints.shp GPSwaypoints%datetmp%%timetmp%.shp
move shpwaypoints.dbf GPSwaypoints%datetmp%%timetmp%.dbf
move shpwaypoints.shx GPSwaypoints%datetmp%%timetmp%.shx
move shpwaypoints.prj GPSwaypoints%datetmp%%timetmp%.prj
rd /q /s shp
binogr2ogr.exe -f GPX -skipfailures -fieldTypeToString DateTime GPS
points_tracks%datetmp%%timetmp%.gpx GPSwaypoints%datetmp
%%timetmp%.shp -select name,ele,time
binogr2ogr.exe -f CSV -lco GEOMETRY=AS_YX GPSpoint%datetmp%
%timetmp%.csv GPSwaypoints%datetmp%%timetmp%.shp -select
name,ele,time
SET SHAPE_ENCODING=CP932
for %%i in (GPSCurrent*.gpx) do (
binogr2ogr.exe -append -update -skipfailures -fieldTypeToString
DateTime shp %%i tracks -select name,cmt,desc,src
)
for %%i in (GPSトラック*.gpx) do (
binogr2ogr.exe -append -update -skipfailures -fieldTypeToString
DateTime shp "%%i" tracks -select name,cmt,desc,src
)
GPSデータ保存ツール
GPSログ、ポイントをシェープファイルに変換
しながらパソコンに保存するツール
バッチファイル
14年3月14日金曜日
GDAL活用例
illustrator GISデータ変換ツール
illustratorでシェープファイルやGeoTIFFを読み込み、保存するツール
14年3月14日金曜日
GDAL活用例
標高DEMデータ変換ツール
国土地理院提供の基盤地図情報 標高
データをGeoTIFFに変換&結合する
ツール
ホームページで公開してますので、ダ
ウンロードできます。
14年3月14日金曜日
GDAL活用例
土地利用細分メッシュ変換ツール
国土交通省提供の国土数値情報 土地利
用細分メッシュデータをGeoTIFFに変
換&結合するツール
ホームページで公開してますので、ダ
ウンロードできます。
14年3月14日金曜日
GDAL活用例
地図タイル
環境省の植生データを地図タイル
形式に変換したもの。
ホームページで公開してますので、
閲覧できます。
14年3月14日金曜日
GDAL活用例
環境アセスメントでの利用例
環境アセスメントにおいて、生態系に対する
定量的な影響評価を求められており、その手
法を模索中という状況。
背景
もう少し生態学会むけの例として…
生態系の定量的な評価をGDALを活用して
おこなった例をご紹介します。
14年3月14日金曜日
環境アセスメントでのGDAL利用例
業務内容
 岩手県遠野市における
 カッパ淵拡張事業に伴う
 環境影響評価。
 生態系への影響を検討するため、事業地周辺に
  生息するカッパの生息適地を推測し、事業による
  影響を定量的に評価する。
画像出典:wikipedia
「カッパ淵」
14年3月14日金曜日
①
環境データ準備
②
データ確認
③
モデリング
④
影響評価
環境アセスメントでのGDAL利用例
解析の手順
ラスタ解析、種の生息モデル
14年3月14日金曜日
環境アセスメントでのGDAL利用例
調査位置図(  で作成)
地理院地図を使用
14年3月14日金曜日
環境アセスメントでのGDAL利用例
植生
地理院地図を使用
14年3月14日金曜日
・川や池に生息し、陸上も移動する
・胡瓜を主食とする
・頭上の皿の乾燥に極めて弱い
・RDB 絶滅危惧 Ⅰ 類 に指定
「改訂・絶滅のおそれのある野生妖怪」(2003)
参考文献:Yanagida(1910). Tono monogatari
環境アセスメントでのGDAL利用例
カッパの生態
画像出典:wikipedia
14年3月14日金曜日
①
環境データ準備
②
データ確認
③
モデリング
④
影響評価
環境アセスメントでのGDAL利用例
解析の手順
14年3月14日金曜日
を使用して作成
標高データ(国土地理院)
環境アセスメントでのGDAL利用例
①環境データ準備
植生データ(環境省)
・川や池からの距離
・1km圏畑地の面積
・日射量
カッパの生態を踏まえて
14年3月14日金曜日
環境アセスメントでのGDAL利用例
環境データ準備
川や池からの距離
14年3月14日金曜日
環境アセスメントでのGDAL利用例
#植生データから河川、池、水辺植生を”1”、それ以外を”0”にしてラスタ化
gdal_rasterize	 -a_nodata	 -9999	 -tr	 10	 10	 -init	 0	 -burn	 1	 -where	 
"HANREI_C	 =	 '580600'	 OR	 HANREI_C	 =	 '470501'	 OR	 HANREI_C	 =	 '180100'"	 
-l	 vegetation	 vegetation.shp	 river.tif
#値が”1”の場所からの距離を計算
gdal_proximity	 -distunits	 GEO	 -values	 1	 river.tif	 riverdistance.tif
環境データ準備
川や池からの距離(GDALコマンド)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
環境データ準備
1km圏畑地の面積
14年3月14日金曜日
環境アセスメントでのGDAL利用例
#植生データから畑地を”1”、それ以外を”0”にしてラスタ化
gdal_rasterize	 -a_nodata	 -9999	 -tr	 10	 10	 -init	 0	 -burn	 1	 -where	 
"HANREI_C	 =	 '570300'	 OR	 HANREI_C	 =	 '570101'"	 -l	 vegetation	 
vegetation.shp	 farm.tif
#半径1Km圏の値を近傍計算(pythonからGRASSを呼び出す)
python	 neighbors.py	 farm.tif	 farmarea1km.tif
環境データ準備
1km圏畑地の面積(コマンド)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
##�neighbors.py ##
#	 -*-	 coding:	 utf-8	 -*-
#pythonからGRASSを呼び出すための設定
import	 os,sys
import	 grass.script	 as	 grass
import	 grass.script.setup	 as	 gsetup
gisbase	 =	 os.environ['GISBASE']
gisdb	 =	 "C:/Users/ecoris"
location	 =	 "toono"
mapset="PERMANENT"
epsg="3100"
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]
basename,ext	 =	 os.path.splitext(os.path.basename(input))
#GRASSコマンドの実行
grass.run_command("r.in.gdal",	 input	 =	 input	 ,	 output	 =	 basename,flags="oe",	 overwrite=True)
grass.run_command('g.region',	 rast=basename,	 flags='ap')
grass.run_command("r.neighbors",	 input	 =	 basename,	 output	 =	 "hatake"	 ,	 method	 =	 
"sum",size="201",	 flags="c",overwrite=True)
grass.run_command("r.out.gdal",	 input	 =	 "hatake",	 output	 =	 output)
1km圏畑地の面積(PythonからGRASS)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
環境データ準備
日射量(夏至と冬至の積算)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
#標高データから夏至と冬至の日射量を積算(pythonからGRASSを呼び出す)
python	 sun.py	 dem10.tif	 radiation.tif
環境データ準備
日射量(コマンド)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
##�sun.py ##
#	 -*-	 coding:	 utf-8	 -*-
#pythonからGRASSを呼び出すための設定
#...省略
#GRASSコマンドの実行
grass.run_command("r.in.gdal",	 input	 =	 input	 ,	 output	 =	 basename,flags="oe",	 overwrite=True)
grass.run_command('g.region',	 rast=basename,	 flags='ap')
grass.run_command("r.slope.aspect",	 elevation	 =	 basename,	 slope	 =	 "slope"	 ,	 aspect	 =	 
"aspect",	 overwrite=True)
grass.mapcalc("glob_rad_tmp	 =	 0",	 overwrite	 =	 True)
#夏至(172日目)と冬至(355日目)の日射量を合計して出力
for	 day	 in	 [172,355]:
	 	 	 	 grass.run_command("r.sun",	 elevin	 =	 basename,	 aspin	 =	 "aspect"	 ,slopein	 =	 
"slope"	 ,glob_rad="glob_rad_"	 +	 str(day),day=day,flags	 =	 "s"	 ,overwrite=True)
	 	 	 	 grass.mapcalc("glob_rad_year	 =	 glob_rad_tmp	 +	 glob_rad_"	 +	 str(day),	 overwrite=True)
	 	 	 	 grass.run_command("g.rename",	 rast=["glob_rad_year","glob_rad_tmp"],	 overwrite=True)
grass.run_command("r.out.gdal",	 input	 =	 "glob_rad_tmp",	 output	 =	 output)
日射量(PythonからGRASS)
14年3月14日金曜日
①
環境データ準備
②
データ確認
③
モデリング
④
影響評価
環境アセスメントでのGDAL利用例
解析の手順
14年3月14日金曜日
環境データ確認地点
rgdal、raster、dismo、ggplot2など
関係性を把握
環境アセスメントでのGDAL利用例
②データ確認
GIS関係のライブラリを使用
ラスタデータからバックグラウンドポイントをサンプリン
グしてヒストグラムを作成(1万ポイントぐらい)
(モデリングの際に偽不在データとして使用)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
データ確認
「川や池からの距離」との関係
14年3月14日金曜日
環境アセスメントでのGDAL利用例
データ確認
「1km圏畑地の面積」との関係
14年3月14日金曜日
環境アセスメントでのGDAL利用例
データ確認
「日射量」との関係
14年3月14日金曜日
環境アセスメントでのGDAL利用例
#最初だけパッケージをインストールする
#options(repos=structure(c(CRAN="http://cran.ism.ac.jp/")))
#install.packages("rgdal")
#install.packages("raster")
#install.packages("dismo")
#install.packages("ggplot2")
#ライブラリ読み込み
library(rgdal)
library(raster)
library(dismo)
library(ggplot2)
#GDAL文字コード設定
setCPLConfigOption("GDAL_FILENAME_IS_UTF8","NO")
setCPLConfigOption("SHAPE_ENCODING","cp932")
#環境データ読み込み
predictors	 <-	 
stack("riverdistance.tif","farmarea1km.tif","radiation.tif")
#種データ読み込み
kappa	 <-	 readOGR("data","kappa")
#調査範囲読み込み
area	 <-	 readOGR("data","area")
#左からのつづき	 
#地図作成
xval<-c("川や池からの距離","1km圏畑地面積","日射量")
windowsFonts(Meiryo=windowsFont("メイリオ"))
for(i	 in	 1:3){
	 	 	 ##ggplot地図用データフレーム作成
	 	 	 en<-subset(predictors,i)
	 	 	 hs<-	 raster("data/merge_shade.tif")
	 	 	 en<-crop(en,extent(546620,551600,4354300,4358100))
	 	 	 hs<-crop(hs,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(area)
	 	 	 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(
	 	 	 scale_y_continuous(breaks=NULL,limits=c(4354300,4358100),expand=
	 	 	 geom_path(data=	 adf,aes(group=group),colour	 =	 "#333333",	 size	 =	 
	 	 	 geom_point(data=sdf,aes(x=X,y=Y,colour="black"),size=1.5,alpha=0
	 	 	 scale_colour_manual(guide=guide_legend(title=NULL),name	 =	 '確認地
	 	 	 coord_equal()	 +
	 	 	 theme(legend.position=c(1,1),legend.justification=c(1,1),axis.ti
	 	 	 ##色設定
	 	 	 if(i==1)	 g<-g+scale_fill_gradientn(name=xval[i],colours	 =	 c("blu
	 	 	 if(i==2)	 g<-g+scale_fill_gradientn(name=xval[i],colours	 =	 c("whi
	 	 	 if(i==3)	 g<-g+scale_fill_gradientn(name=xval[i],colours	 =	 c("blu
 	 ##画像保存
	 	 	 ggsave(paste("mydata/",xval[i],"地図.png"),	 g,	 width	 =	 16,	 heigh
}
データ確認
Rコマンド(地図作成部分)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
#前ページからのつづき
#バックグラウンドデータ作成
set.seed(0)
mask	 <-	 raster("mydata/mask.tif")
backg<-randomPoints(mask,n=10000)
#データセット作成
datapres	 <-	 extract(predictors,kappa)
databackg	 <-	 extract(predictors,backg)
pa<-c(rep(1,nrow(datapres)),rep(0,nrow(databackg)))
envdata<-data.frame(cbind(pa,rbind(datapres,databackg)))
colnames(envdata)<-c("pa","川や池からの距離","1km圏畑地面積","日射量")
xval<-c("川や池からの距離","1km圏畑地面積","日射量")
##ヒストグラム作成
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]]))
	 	 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"),	 p,	 width	 =	 16,	 height	 =	 16,unit="cm",dpi=300)
}
データ確認
Rコマンド(ヒストグラム作成部分)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
データ確認
環境データ間の相関
14年3月14日金曜日
①
環境データ準備
②
データ確認
③
モデリング
④
影響評価
環境アセスメントでのGDAL利用例
解析の手順
14年3月14日金曜日
統計モデル(ロジスティック回帰など)
機械学習(Maxentなど)
経験則(HSIモデルなど)
環境アセスメントでのGDAL利用例
③モデリング
専門家の皆さんにお任せします♡ いろいろ教えてください m(_ _)m
14年3月14日金曜日
環境アセスメントでのGDAL利用例
モデリング
とりあえずロジスティック回帰の例
#モデル作成
colnames(envdata)<-c("pa","riverdistance","farmarea1km","radiation")	 
fit<-	 glm(pa~	 .	 +	 I(riverdistance^2)	 +	 I(farmarea1km^2)	 +	 I(radiation^2),family=binomial(link="logit"),data=envdata)	 
fit<-step(fit)
summary(fit)
#モデルをデータに適応し、GeoTIFFに書き出し
pg<-predict(predictors,fit,type='response',ext=mask)
writeRaster(pg,	 filename="mydata/カッパ生息確率.tif",	 format="GTiff",	 overwrite=TRUE)
#モデル確認
e<-evaluate(p=envdata[envdata$pa==1,],a=envdata[envdata$pa==0,],fit,type="response")
print(e)
ppi=300
##モデルAUC
png(file=paste("mydata/モデルAUC.png"),	 width=16/2.54*ppi,	 height=16/2.54*ppi,res=ppi)
plot(e,"ROC")
dev.off()
##予測値の比較(確認地点とバックグラウンド)
###density
png(file=paste("mydata/予測値density.png"),	 width=16/2.54*ppi,	 height=16/2.54*ppi,res=ppi)
density(e)
dev.off()
###boxplot
png(file=paste("mydata/予測値boxplot.png"),	 width=16/2.54*ppi,	 height=16/2.54*ppi,res=ppi)
boxplot(e,col=c("blue","red"))
dev.off()
##応答曲線
for(i	 in	 1:3){
	 xval<-c("riverdistance","farmarea1km","radiation")
	 xlabel<-c("川や池からの距離","1km圏畑地面積","日射量")
	 rn<-range(envdata[,xval[i]])14年3月14日金曜日
環境アセスメントでのGDAL利用例
モデリング
モデルの評価
formula	 =	 pa	 ~	 riverdistance	 +	 farmarea1km	 +	 I(farmarea1km^2)	 +	 I(radiation^2)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
モデリング
応答曲線
環境データと生息適地確率の関係
(変化させない環境データは確認地点での平均値とした場合)
14年3月14日金曜日
環境アセスメントでのGDAL利用例
モデリング 生息適地確率(    で作成)
地理院地図を使用
14年3月14日金曜日
環境アセスメントでのGDAL利用例
モデリング 生息適地(Cohen s Kappaを閾値とした場合)
地理院地図を使用
14年3月14日金曜日
①
環境データ準備
②
データ確認
③
モデリング
④
影響評価
環境アセスメントでのGDAL利用例
解析の手順
14年3月14日金曜日
改変前
生息適地はどのように変化するか?
環境アセスメントでのGDAL利用例
④影響評価
改変後
14年3月14日金曜日
環境アセスメントでのGDAL利用例
影響評価
コマンドの再利用で
「川や池からの距離」  
「林縁からの距離」 を再計算
植生データを改変
モデルを適用
改変前後の生息適地を比較
解析フロー
14年3月14日金曜日
環境アセスメントでのGDAL利用例
影響評価 生息適地確率(改変後)
地理院地図を使用
14年3月14日金曜日
環境アセスメントでのGDAL利用例
影響評価 カッパ生息適地の差分(改変前後)
地理院地図を使用
14年3月14日金曜日
環境アセスメントでのGDAL利用例
影響評価
カッパ生息適地の変化
0
15000
30000
45000
60000
改変前 改変後
59181
17158
生息適地確率の合計
調査範囲内の生息適地確率の合計値を比較
事業により
生息適地が増加
14年3月14日金曜日
:#GDALの設定
set	 GDAL_FILENAME_IS_UTF8=NO
set	 SHAPE_ENCODING=CP932
:#Rの設定
set	 PATH=C:Program	 FilesRR-3.0.2bin;%PATH%
set	 R_HOME=C:Program	 FilesRR-3.0.2
:#GRASSの設定
set	 OSGEO4W_ROOT=C:OSGeo4W
set	 GISBASE=%OSGEO4W_ROOT%appsgrassgrass-6.4.3
set	 GISRC=%APPDATA%GRASS6grassrc6
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	 GRASS_SH=%OSGEO4W_ROOT%appsmsysbinsh.exe
set	 PYTHONPATH=%GISBASE%etcpython
set	 GRASS_PAGER=less
:####	 データ準備	 ######
:##	 改変前データの準備
:#標高データを10m解像度、UTM54に変換
gdalwarp	 -t_srs	 epsg:3100	 -tr	 10	 10	 -r	 bilinear	 datamerge.tif	 mydatadem10.tif
gdaldem	 mydatadem10.tif	 mydatashade.tif
:#植生データをUTM54に変換
ogr2ogr	 -s_srs	 epsg:4612	 -t_srs	 epsg:3100	 mydatavegetation.shp	 datap594104.shp
:#河川からの距離
gdal_rasterize	 -a_nodata	 -9999	 -tr	 10	 10	 -init	 0	 -burn	 1	 -where	 "HANREI_C	 =	 '580600'	 OR	 HANREI_C	 =	 '470501'	 OR	 HANREI_C	 =	 '180100'"	 -l	 vegetation	 mydatavegetation.shp	 mydatariver.tif
gdal_proximity	 -distunits	 GEO	 -values	 1	 	 mydatariver.tif	 	 mydata_riverdistance.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 datamaparea.shp	 mydata_riverdistance.tif	 mydatariverdistance.tif
:#1km圏畑地面積
gdal_rasterize	 -a_nodata	 -9999	 -tr	 10	 10	 -init	 0	 -burn	 1	 -where	 "HANREI_C	 =	 '570300'	 OR	 HANREI_C	 =	 '570101'"	 -l	 vegetation	 mydatavegetation.shp	 mydatafarm.tif
python	 neighbors.py	 mydatafarm.tif	 mydata_farmarea1km.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 datamaparea.shp	 mydata_farmarea1km.tif	 mydatafarmarea1km.tif
:#日射量(夏至+冬至)
python	 sun.py	 mydatadem10.tif	 mydata_radiation.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 datamaparea.shp	 mydata_radiation.tif	 mydataradiation.tif
:#マスク
gdal_rasterize	 -a_nodata	 -9999	 -tr	 10	 10	 -burn	 1	 dataarea.shp	 mydataarea.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 datamaparea.shp	 mydataarea.tif	 mydatamask.tif
:##	 改変後のデータ準備
:#日射量は変更なし
cp	 mydataradiation.tif	 mydatadevelopradiation.tif
:#1km圏畑地面積(改変部分の畑地を0にして計算)
gdal_rasterize	 -a_nodata	 -9999	 -i	 -init	 0	 -tr	 10	 10	 -burn	 -9999	 dataplan.shp	 mydatadevelopinv_plan.tif
gdalwarp	 -overwrite	 mydatafarm.tif	 mydatadevelopinv_plan.tif	 mydatadevelopfarm.tif
python	 neighbors.py	 mydatadevelopfarm.tif	 mydatadevelop_farmarea1km.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 datamaparea.shp	 mydatadevelop_farmarea1km.tif	 mydatadevelopfarmarea1km.tif
:#河川からの距離(改変部分を1にして計算)
gdal_rasterize	 -a_nodata	 -9999	 -tr	 10	 10	 -burn	 1	 dataplan.shp	 mydatadevelopplan.tif
gdalwarp	 -overwrite	 mydatariver.tif	 mydatadevelopplan.tif	 mydatadevelop_river.tif
gdal_proximity	 -distunits	 GEO	 -values	 1	 	 mydatadevelop_river.tif	 	 mydatadevelop_riverdistance.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 datamaparea.shp	 mydatadevelop_riverdistance.tif	 mydatadevelopriverdistance.tif
:#マスク
cp	 mydatamask.tif	 mydatadevelopmask.tif
:####	 データ確認、モデリング	 ######
:#Rコマンドの実行(地図作成、ヒストグラム作成、モデル作成、モデル適用、生息確率書き出し)
R	 --slave	 --args	 mydata	 -f	 kappa.R
:###	 影響評価	 #######
:#改変差分計算
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 dataarea.shp	 mydataカッパ生息確率.tif	 mydata_カッパ生息確率.tif
gdalwarp	 -overwrite	 -r	 near	 -tr	 10	 10	 -dstnodata	 -9999	 -t_srs	 epsg:3100	 -crop_to_cutline	 -cutline	 dataarea.shp	 mydatadevelopカッパ生息確率.tif	 mydatadevelop_カッパ生息確率.tif
python	 diff.py	 mydata_カッパ生息確率.tif	 mydatadevelop_カッパ生息確率.tif
:#改変差分図作成
gdal_calc	 --overwrite	 --NoDataValue=-9999	 -A	 mydata_カッパ生息確率.tif	 -B	 mydatadevelop_カッパ生息確率.tif	 --outfile=mydatadevelopカッパ生息確率.tif	 --calc=B-A
環境アセスメントでのGDAL利用例
解析の全手順を書いたコマンド
※Rの部分、pythonの部分は別ファイルに記述し、ここから呼び出しています。
14年3月14日金曜日
エピローグ
 GDALを活用すれば作業を効率化できますが…
 種の生息モデルは、まだまだファンタジー。
 生態学 ✕ FOSS4G で解析のための定石を!
※このスライドに出てくる事業計画はフィクションです。
14年3月14日金曜日

2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド