Upload
takayuki-nuimura
View
510
Download
0
Embed Size (px)
Citation preview
R を使った空間情報の可視化
Rを使った空間情報の可視化
縫村崇行(NUIMURA, Takayuki)
環境学・雪氷研究室
R勉強会 (CHERD)
2012/06/20
1 / 15
R を使った空間情報の可視化
はじめに
自己紹介
専門:GISや RSによるヒマラヤの氷河の変動把握
所属:名大・環境学・雪氷圏変動研究室 (理農館)
OSGeo1財団日本支部運営委員
主な業務内容氷河の空間分布 DB作成
ヒマラヤでフィールド調査 (DGPS)
3Dモニターを使ってステレオ写真測量
研究室で GISや R言語の指導
1The Open Source Geospatial Foundation2 / 15
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
R を使った空間情報の可視化
はじめに
空間情報について
空間情報とは
空間座標 (X,Y,(+Z))を持ったデータ:
種類:点、線、面で代表されるデータ
例:気象観測地点、震源地、道路の経路、土地利用区分
=⇒今回は点データを Rを使って加工し、Google Earthで可視化する方法について話します。
4 / 15
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
R を使った空間情報の可視化
データ&手法
今回使用するRのパッケージ
1 rgdal:GISデータを取り扱う=⇒XY座標を元に Google Earthファイル (KML)を作成するのに使用
2 XML:XMLファイルを取り扱う=⇒Google Earthファイル (KML)を修正するのに使用
6 / 15
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
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
R を使った空間情報の可視化
データ処理の流れ
Step 1: CSVからKMLの作成
9 / 15
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
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
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
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
R を使った空間情報の可視化
データ処理の流れ
Step 2-2: KMLファイルへ情報追加
14 / 15
R を使った空間情報の可視化
おわりに
おわりに
今回は位置情報+時間情報だけを処理しましたが、その他の属性情報 (ex. マグニチュード)に応じてアイコンの種類や色、大きさを変えたり、ポップアップ内容を HTMLでカスタマイズも可能です。
このようなカスタマイズした KMLファイル出力は、XY座標列のある Excelなどのデータがあれば、Rスクリプトを少し修正することでできます。興味のある方は、ぜひご相談ください。
mail :[email protected]
twitter :t_nuimura
15 / 15