15
R を使った空間情報の可視化 R を使った空間情報の可視化 縫村崇行 (NUIMURA, Takayuki) 環境学・雪氷研究室 R 勉強会 (CHERD) 2012/06/20 1 / 15

120620 chred r_presentation1

Embed Size (px)

Citation preview

Page 1: 120620 chred r_presentation1

R を使った空間情報の可視化

Rを使った空間情報の可視化

縫村崇行(NUIMURA, Takayuki)

環境学・雪氷研究室

R勉強会 (CHERD)

2012/06/20

1 / 15

Page 2: 120620 chred r_presentation1

R を使った空間情報の可視化

はじめに

自己紹介

専門:GISや RSによるヒマラヤの氷河の変動把握

所属:名大・環境学・雪氷圏変動研究室 (理農館)

OSGeo1財団日本支部運営委員

主な業務内容氷河の空間分布 DB作成

ヒマラヤでフィールド調査 (DGPS)

3Dモニターを使ってステレオ写真測量

研究室で GISや R言語の指導

1The Open Source Geospatial Foundation2 / 15

Page 3: 120620 chred r_presentation1

R を使った空間情報の可視化

はじめに

自己紹介 (メイン業務以外の活動)

FOSS4Gツール勉強会@名古屋を主催(第 1回 2011/12/11、第 2回 2012/4/14)

FOSS4Gaとは:QGIS、GRASS GIS、GMTや Rなど、オープンソースの空間解析ソフトウェア

URL:https://sites.google.com/site/foss4gnagoya/

aFree and Open Source Software for Geospatial

Nagoya.R (東海地方を中心とした Rの勉強会)

名大の言語系の研究者の方が主催 (2011/3/26–2012/5/19)

URL:http://corpus-study.info/nagoyar/

世界各地の都市で同様のイベント(ex. Tokyo.R、Tsukuba,R、London.R)

3 / 15

Page 4: 120620 chred r_presentation1

R を使った空間情報の可視化

はじめに

空間情報について

空間情報とは

空間座標 (X,Y,(+Z))を持ったデータ:

種類:点、線、面で代表されるデータ

例:気象観測地点、震源地、道路の経路、土地利用区分

=⇒今回は点データを Rを使って加工し、Google Earthで可視化する方法について話します。

4 / 15

Page 5: 120620 chred r_presentation1

R を使った空間情報の可視化

データ&手法

USGS [Latest Earthquakes: Feeds & Data]

Past 7 Days, M 2.5+ earthquakes (CSV形式)を使用。

データ内容Src,Eqid,Version,Datetime,Lat,Lon,Magnitude,Depth,NST,Regionus,c0005hua,6,"Monday, August 22, 2011 00:07:09 UTC",42.6731,143.2804,4.7,32.30,95,"Hokkaido, Japan region"

=⇒6行目が X座標 (Longitude)、5行目が Y座標 (Latitude)。5 / 15

Page 6: 120620 chred r_presentation1

R を使った空間情報の可視化

データ&手法

今回使用するRのパッケージ

1 rgdal:GISデータを取り扱う=⇒XY座標を元に Google Earthファイル (KML)を作成するのに使用

2 XML:XMLファイルを取り扱う=⇒Google Earthファイル (KML)を修正するのに使用

6 / 15

Page 7: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

パッケージを使う下準備

#rgdal1, XML パッケージのインストール (最初だけ)install.packages(“rgdal”)install.packages(“XML”)

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

1Windows では自動的に依存するパッケージもインストールしてくれる。Ubuntu linux の場合は、事前に OS のパッ

ケージマネージャで、”gdal”、”libgdal1-dev”、”libproj-dev” をインストールする必要がある。7 / 15

Page 8: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

Step 1: CSVからKMLの作成

CSV読み込み⇒spオブジェクト生成⇒KML出力#Inputcsv.filename <- "eqs7day-M2.5.txt"

#Outputkml.filename <- "eqs7day-M2.5.kml"

#CSV ファイル読み込みwork.table <- read.csv(csv.filename)

#点数をカウント (あとで使用)n.data <- nrow(work.table)

#sp オブジェクトの作成work.obj <- SpatialPointsDataFrame(lonlat, work.table, proj4string=CRS("+proj=longlat"))

#KML ファイルの出力writeOGR(work.obj, dsn=kml.filename, layer="sample", driver="KML")

8 / 15

Page 9: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

Step 1: CSVからKMLの作成

9 / 15

Page 10: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

KMLファイルの構造

出力した KMLファイルは、以下のように座標情報、属性情報を記述している。<Placemark>

<ExtendedData><SchemaData schemaUrl="sample"><SimpleData name="Src">ak</SimpleData><SimpleData name="Eqid">10300708</SimpleData><SimpleData name="Version">2</SimpleData><SimpleData name="Datetime">Sunday, August 21, 2011 22:27:02 UTC</SimpleData><SimpleData name="Lat">52.7168</SimpleData><SimpleData name="Lon">-169.5406</SimpleData><SimpleData name="Magnitude">2.5</SimpleData><SimpleData name="Depth">4.9</SimpleData><SimpleData name="NST">10</SimpleData><SimpleData name="Region">Fox Islands, Aleutian Islands, Alaska</SimpleData>

</SchemaData></ExtendedData><Point>

<coordinates>-169.540600000000012,52.716799999999999</coordinates></Point>

</Placemark>

10 / 15

Page 11: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

KMLファイルの構造

出力した KMLファイルは、以下のように座標情報、属性情報を記述している。<Placemark>

<ExtendedData><SchemaData schemaUrl="sample"><SimpleData name="Src">ak</SimpleData><SimpleData name="Eqid">10300708</SimpleData><SimpleData name="Version">2</SimpleData><SimpleData name="Datetime">Sunday, August 21, 2011 22:27:02 UTC</SimpleData><SimpleData name="Lat">52.7168</SimpleData><SimpleData name="Lon">-169.5406</SimpleData><SimpleData name="Magnitude">2.5</SimpleData><SimpleData name="Depth">4.9</SimpleData><SimpleData name="NST">10</SimpleData><SimpleData name="Region">Fox Islands, Aleutian Islands, Alaska</SimpleData>

</SchemaData></ExtendedData><Point>

<coordinates>-169.540600000000012,52.716799999999999</coordinates></Point><name>hoge</name><TimeStamp>

<when>2011-08-15</when></TimeStamp>

</Placemark>

=⇒Step 2では、KMLに時間属性と名前タグを追加 11 / 15

Page 12: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

Step 2-1: 時間情報の抽出&整形

USGSの記法: “Monday, August 22, 2011 00:07:09 UTC”

KMLの記法: 2011-08-22

CSVから時間情報の抽出n.data <- nrow(work.table)

#時間列を抽出して KML 記法に変換time.list <- strptime(work.table[,4], format="%A, %B %d, %Y")

12 / 15

Page 13: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

Step 2-2: KMLファイルへ情報追加

KMLに時間タグ<TimeStamp>と名前タグ<name>を追加#KML ファイルの読み込みxml.data <- xmlTreeParse(kml.filename)node0 <- xmlRoot(xml.data)

node.offset <- 2

for (i in seq(1, n.data)) {cat("Processing", i, "/", n.data, "")j <- i + node.offset

#新ノード (名前、時間)の生成name.node <- xmlNode("name", work.table[i,2])time.node <- xmlNode("TimeStamp", xmlNode("when", time.list[i]))

#メインの XML に新ノードの挿入node0[[1]][[1]][[j]] <- addChildren(node0[[1]][[1]][[j]], name.node)node0[[1]][[1]][[j]] <- addChildren(node0[[1]][[1]][[j]], time.node)

}

#KML ファイルの上書き保存saveXML(node0, kml.filename)

13 / 15

Page 14: 120620 chred r_presentation1

R を使った空間情報の可視化

データ処理の流れ

Step 2-2: KMLファイルへ情報追加

14 / 15

Page 15: 120620 chred r_presentation1

R を使った空間情報の可視化

おわりに

おわりに

今回は位置情報+時間情報だけを処理しましたが、その他の属性情報 (ex. マグニチュード)に応じてアイコンの種類や色、大きさを変えたり、ポップアップ内容を HTMLでカスタマイズも可能です。

このようなカスタマイズした KMLファイル出力は、XY座標列のある Excelなどのデータがあれば、Rスクリプトを少し修正することでできます。興味のある方は、ぜひご相談ください。

mail :[email protected]

twitter :t_nuimura

15 / 15