2015年6月27日土曜日

R と Google Earth ~地点図の作成~

今回は R と Goole Earth の連携をご紹介したいと思います
というのも、緯度経度情報は意外とよく使うわりには一括で表示したりするのが面倒くさい!と感じたからです。

例えば、手元に多数の緯度経度データがあり、その位置関係を確認したい、他人に説明するときの簡単な資料を作りたい、というときに、Google Earth の [追加] → [目印] で一個一個入力なんてしてられないですよね。

ということで、R を使って Google Earth に地点を一括入力するプログラムを作りました。
出力イメージはこんな感じです。



今回使用した緯度経度データは、気象庁で公開されている九州西部の AMeDAS の設置場所です。
緯度経度データを整理したものをこちらに置いておきますので、テストデータとしてご使用下さい。


テストデータはこんな感じで並んでいます。

地点名 緯度 経度
Nagasaki 32.73333 129.8667
Nomozaki 32.57833 129.74
Ohmura 32.91667 129.9133
Ohseto 32.94833 129.6333
Sasebo 33.15833 129.7267

注意
・地点名に日本語は使えないようです (kml 形式の関係かな?)。
・緯度経度データは度表示 (10進法) です。



使い方
以下のプログラムを実行すると、ファイル選択ウィンドウが開くので、テストデータあるいはご自分で作成したファイルを選んで下さい。
以上です。

読み込んだファイルがあるフォルダに「ファイル名_地点図.kml」というファイルができているはずです。
これを開くと Google Earth が起動し地点図が表示されます




#作成日時 : 11:09 2011-07-05
#作成者名:T.Nakano
rm(list=ls())
gc();gc()

library(tcltk)
#////////////////  Google Earth で地点図作成  ///////////////////////////////////////////////////////////////////////
# 関数の設定 ----------------------------------------------------------# 地点情報を kml ファイルに変換する関数 -------------------------------
fun_KML <- function(地点名,緯度,経度,PointSize=0.8){
cat('<Placemark>
<name>',地点名,'</name>
<Point>
<coordinates>',経度,',',緯度,',0</coordinates>
</Point>
<Style>
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href>
</Icon>
<color>ff0000ff</color>
<scale>',PointSize,'</scale>
</IconStyle>
</Style>
</Placemark>','\n', sep='')
}

# データの読み込み ---------------------------------------------------
fileName <- tclvalue(tkgetOpenFile())
act1 <- unlist(strsplit(fileName,"/"))
act1 <- act1[-length(act1)]

directory <- NULL
for(i in 1:(length(act1)-1)){
directory <- paste(directory,act1[i],"/",sep="")
}
directory <- paste(directory,act1[length(act1)],sep="")
setwd(directory)
DT <- read.csv(fileName, header=T)
DT$地点名 <- as.character(DT$地点名)

# KML ファイル作成 ---------------------------------------------------
GEfn <- paste(unlist(strsplit(fileName, ".csv")), "_地点図.kml", sep="")
sink(GEfn)
cat('<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>','\n')
for(i in 1:length(DT$緯度)){
fun_KML(DT$地点名[i],DT$緯度[i],DT$経度[i])
}
cat('</Folder>
</kml>','\n')
sink()