131101 foss4 g_tokyo_r_presentation

26
はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに R でリモートセンシング入門 縫村崇行 1,2 (NUIMURA, Takayuki) 1 名古屋大学 2 OSGeo 財団日本支部 2013/11/01 1 / 26

Upload: takayuki-nuimura

Post on 30-Jun-2015

301 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

Rでリモートセンシング入門

縫村崇行 1,2

(NUIMURA, Takayuki)

1 名古屋大学

2OSGeo 財団日本支部

2013/11/01

1 / 26

Page 2: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

Outline1 はじめに

RとはRの作図例使用するデータrgdalパッケージのインストール外部データの入出力地理空間データの解析

2 rgdalrgdal

3 ベクターデータベクターデータの読み込み (readOGR)spクラスの構造 (ベクターデータの場合)

4 ラスターデータラスターデータの読み込み (readGDAL)spクラスの構造 (ラスターデータの場合)Landsatによる NDVIの計算

5 データの可視化データの可視化 (空間分布)データの可視化 (その他)

6 おわりに研究紹介氷河表面の高度変化率の空間分

2 / 26

Page 3: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

Rとは

http://cran.r-project.org/

コマンドラインベースで様々な統計解析が可能

多くの追加機能 (パッケージ)が開発されている

今回は拡張機能の rgdalパッケージを使用。

3 / 26

Page 4: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

Rの作図例

4 / 26

Page 5: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

使用するデータ

OpenStreetMap (Shapefile形式に変換済み)OpenStreetMap (http://www.openstreetmap.org/)

Landsat ETM+の band3及び band4 (GeoTIFF形式)2

USGS EarthExplorer (http://earthexplorer.usgs.gov/)CGIAR提供の SRTM3 DEM (GeoTIFF形式)2

CGIAR-CSI (http://srtm.csi.cgiar.org/)

EarthExplorer CGIAR-CSI1ダミーデータ2300 mグリッドにリサンプリングしてある 5 / 26

Page 6: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

rgdalパッケージのインストール

Rの起動

Windows:プログラムメニューから Rを選択

パッケージのインストールinstall.packages("rgdal", dependencies=TRUE)#その後でてくるダウンロードサーバ選択はどこでも OK#日本を選ぶとちょっと早いかも

6 / 26

Page 7: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

Rで取り扱えるデータ

一般的なデータだと

xls:csvに変換しといたほうが簡単

csv:簡単に読み込める

txt:csv以外の文字(タブ、スペースなど)区切りデータ

dbf:GISの属性テーブル情報を扱いたいときなど

画像データ:画像処理も

科学関連のデータでは

GeoTIFF:リモセンデータ

Shapefile:GISデータ

NetCDF:気候データで一般的

7 / 26

Page 8: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

地理空間データの解析

GISやリモートセンシング解析で使用されるデータ

大きく分けて 2種類 (ベクター、ラスター)に分けられる

ベクター:点、線、面などの地物データ=⇒ESRI Shapeファイル形式 (*.shp)が一般的

ラスター:連続的なグリッドデータ=⇒GeoTIFFファイル形式 (*.tif)が一般的

ベクター ラスター

rgdalパッケージではいずれのファイルも読込み可能 8 / 26

Page 9: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

rgdalを使ってGISデータ (ラスター)の読み込み

Rでは基本パッケージでも様々なデータ読み込み関数がある

read.bin:バイナリデータ

read.csv:CSVread.delim:様々な区切りテキスト (CSV、タブ、空白など)

rgdalパッケージでは、以下の GIS読み込み関数が使用可

readOGR:ベクターデータ

readGDAL:ラスターデータ

9 / 26

Page 10: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

rgdalで対応しているGISフォーマット

ほとんどの GISデータに対応している。有名どころだと

readOGRで読めるベクターデータ

ESRI shapefile:ベクターデータのデファクトスタンダード

KML:Google Earthファイル

GPX:GPSファイル (Garmin、GPS付きスマートフォンなど)

readGDALで読めるラスターデータ

GeoTiff:ラスターデータのデファクトスタンダード

HDF:科学データ配布によく使われる

netCDF:気候データで一般的

10 / 26

Page 11: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

ベクターデータの読み込み (readOGR)

#rgdalパッケージの読み込み、セッションの最初に毎回library(rgdal)

nagoya_lines.shpを lines.objという変数に読み込む場合

#ディレクトリの移動setwd(“c:/handson”)

#Shapefileファイルの読み込みlines.obj <- readOGR(“nagoya_lines.shp”, “nagoya_lines”,encoding=“SJIS”)

=⇒line.objという名前の spクラスの変数が生成される

この spクラスの変数はベクターデータの位置情報の他に、様々な属性情報を含んでいる。

11 / 26

Page 12: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

ベクターデータの読み込み (readOGR)

同様に nagoya_points.shpを points.objという変数に読み込む場合#Shapefileファイルの読み込みpoints.obj <- readOGR(“nagoya_points.shp”, “nagoya_points”,encoding=“SJIS”)

12 / 26

Page 13: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

spクラスの構造 (ベクターデータの場合)

spクラスデータは主に以下のようなスロットをもつ

data:data.frame形式で Shapefileの属性テーブルの値

coords | lines | polygons:ベクターのタイプにより異なる

bbox:西、東、南、北端の座標

proj4string:1つのサブスロットを含む

projargs:座標系情報 (WGS84など)

13 / 26

Page 14: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

spクラスのデータ処理 (ベクターデータの場合)

いくつかの処理例#tagsという名の列に postと記述されている点 (=郵便ポスト)抽出post.pts <- points.obj@coords[grep("post", points.obj@data$tags),]

#範囲指定してグレーでラインをプロットplot(lines.obj, xlim=c(136.95, 136.99), ylim=c(35.13, 35.17), col=“gray”)

#ポイント (郵便ポストの位置)を重ねてプロットpar(new=T)plot(post.pts, xlim=c(136.95, 136.99), ylim=c(35.13, 35.17), col=“red”)

136.95 136.96 136.97 136.98 136.99

35.1

335.1

435.1

535.1

635.1

7

coords.x1

coord

s.x

2

14 / 26

Page 15: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

ラスターデータの読み込み (readGDAL)

#rgdalパッケージの読み込み、セッションの最初に毎回library(rgdal)

GeoTIFFを dem.objという変数に読み込む場合

#ディレクトリの移動setwd(“c:/handson”)

#GeoTIFFファイルの読み込みdem.obj <- readGDAL(“srtm_dem_300.tif”)

=⇒dem.objという名前の spクラスの変数が生成される

この spクラスの変数はラスターデータのグリッド値の他に、様々な属性情報を含んでいる。

15 / 26

Page 16: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

spクラスの構造 (ラスターデータの場合)

spクラスデータは以下のようなスロットをもつ

data:data.frame形式で band1というラベルのグリッド値

grid:さらに 3つのサブスロットを含む

cellcentre.offset:左下端のグリッドの中心座標cellsize:グリッドサイズ (=解像度)cells.dim:ラスターデータの列数と行数

bbox:西、東、南、北端の座標(coords の値と 1/2 グリッドサイズ分ずれていることに注意)

proj4string:1つのサブスロットを含む

projargs:座標系情報 (WGS84など)

#確認するには以下のコマンドを使用str(dem.obj)

16 / 26

Page 17: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

spクラスのデータ処理 (ラスターデータの場合)

spクラスのデータの処理は、"dem.obj@data[,1]”を操作することによって行える。

いくつかの処理例#NoDataを計算から除外 (-9999を NoDataにしている場合)dem.obj@data[dem.obj@data[,1] == -9999,1] <- NA

#平均値の計算mean(dem.obj@data[,1], na.rm=T)

#ヒストグラムのプロットhist(dem.obj@data[,1])

Histogram of rsdata@data[, 1]

rsdata@data[, 1]

Fre

qu

en

cy

0 2000 4000 6000 8000

02

00

00

40

00

06

00

00

80

00

01

00

00

01

40

00

0

17 / 26

Page 18: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

LandsatによるNDVIの計算

NDVI (正規化植生指数)

NDVI =(IR − R)

(IR + R)

IR: Infrared (赤外バンド)R:Red (赤色バンド)

Landsatの場合 (R⇒Band3、IR⇒Band4)

NDVI =(Band4 − Band3)(Band4 + Band3)

IR: Band4R:Band3

Band3 Band4 NDVI18 / 26

Page 19: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

LandsatによるNDVIの計算

#GeoTIFF ファイルの読み込みband3.obj <- readGDAL(“landsat_band3_300.tif”)band4.obj <- readGDAL(“landsat_band4_300.tif”)

#計算結果用の変数を確保 (Band4 でもどっちでも良い)ndvi.obj <- band3.obj

#ラスター演算 #2 行にわかれてるけど実際は 1 行でndvi <- (band4.obj@data[,1] - band3.obj@data[,1]) / (band4.obj@data[,1] +band3.obj@data[,1])

#sp クラスは band1 というラベル名がある (紛らわしいので注意!)ndvi.obj@data[,1] <- data.frame(band1=ndvi)

#GeoTIFF ファイルに結果を書き出しwriteGDAL(ndvi.obj, “landsat_ndvi.tif”)

19 / 26

Page 20: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

データの可視化 (空間分布)

ラスターデータのみ#DEM データの場合#terrain.colors(20)が色の設定、scales オプションで軸目盛り表示spplot(dem.obj, col.regions=terrain.colors(20), scales=list(draw=T))

20 / 26

Page 21: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

データの可視化 (空間分布)

ラスターデータ +ベクターデータ#latticeExtra パッケージを追加インストール&読み込みinstall.packages(“latticeExtra”)library(latticeExtra)

#ベクターデータの読み込みbasin <- readOGR(“khumbu_himal_basin.shp”, layer=“khumbu_himal_basin”)spplot(dem.obj, col.regions=terrain.colors(20), scales=list(draw=T)) +layer(sp.polygon(basin))

21 / 26

Page 22: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

データの可視化 (その他)

#plot 関数にてplot(ndvi.obj@data[,1], dem.obj@data[,1], cex=0.1)

何か変な縦線が 3本?=⇒band3と band4の無効なデータ (0や 255という値)を適切に扱わなかったのが原因。

22 / 26

Page 23: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

データの可視化 (その他)

#0 と 255 の値を NA (⇐R での NoData 値) に置換band3.obj@data[band3.obj@data[,1] == 0 | band3.obj@data[,1] == 255,1] <- NAband4.obj@data[band4.obj@data[,1] == 0 | band4.obj@data[,1] == 255,1] <- NA

#からの NDVI 再計算ndvi <- (band4.obj@data[,1] - band3.obj@data[,1]) / (band4.obj@data[,1] +band3.obj@data[,1])ndvi.obj@data[,1] <- data.frame(band1=ndvi)

#再び plotplot(ndvi.obj@data[,1], dem.obj@data[,1], cex=0.1)

23 / 26

Page 24: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

最後にちょっとだけ (簡単に)自分の研究紹介

1992–2008 年の間の多時期の DEM(地形データ) から、標高値の時系列変化をグリッドごとに計算

=⇒ 氷河の表面高度がどのように変化しているか (上昇 or 低下) が求められる

24 / 26

Page 25: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

最後にちょっとだけ (簡単に)自分の研究紹介

表面高度の変化速度の計算例#2 重の for ループでグリッドごとに以下の計算を行う#使用する地形データの年 (実際は 15 時期)years <- c(1992,2000,2004,2008)

#各年の地形データでの標高値 (固定)elevation <- c(5029,5025,5020,5020)

#lm 関数で高度変化速度 (m year−1) の計算lm(elevation years, data.frame(years, elevation))

#下記の計算結果が表示される#Coefficients:#(Intercept) years#6252.6857 -0.6143

#つまりこの例の場合は y = -0.6143x + 6252.6857 と線形近似された

25 / 26

Page 26: 131101 foss4 g_tokyo_r_presentation

はじめに rgdal ベクターデータ ラスターデータ データの可視化 おわりに

氷河表面の高度変化率の空間分布

色のある場所が氷河域、暖色が低下、寒色が上昇を示す

結果は Nuimura et al., (2012) Journal of Glaciologyにありますこちらの図は実際の論文中の図とは異なります。1

1論文出版元の著作権的な事情で26 / 26