[連載]フリーソフトによるデータ解析・マイニング...
TRANSCRIPT
6回に渡って連載した「Rと空間統計」は、
今回で最後となる。最後はテーマの構成上、
十分説明できなかったrgdalパッケージを利用
した機能を紹介する。rgdalパッケージをイン
ストールし、RjpWikiの「空間的なデータの分
析」[1]の練習用データからrgdaldemo.txtをダ
ウンロードして、C:/GISdataフォルダに入れ
ておいてほしい。
1. maptoolsのkmlOverlay機能Google EarthをRの出力系に利用する場合、
ベクターデータを用いると非常に美しく描画
されるが、ベクターデータのKMLを作成する
には結構手間がかかる。
そこで、簡易にKMLデータを作成する方法
として、maptoolsパッケージのkmlOverlay( )
関数が利用できる。
この関数は、Rのグラフィック画面で作成
されたPNG画像(ラスターデータ)をGoogle
Earthのグリッド上に配置し、そのデータを
KML出力することで、オーバーレイを実現す
る。PNGデータは、透過度属性(transparent)
を設定できるため、背景を透明にしたオーバ
ーレイが可能である。
さて、それではGoogle Earth上にポイント
データをオーバーレイさせてみる(表1の
rgdaldemo.txtを参照)。
まずライブラリの宣言を行う。
次に、出力用のファイル名をセットする。
kmlfileはGoogle Earthに読み込むKML本体
で、kmlpngはオーバーレイするためのラスタ
ーデータである。
次に、データセットのquakesを呼び出す。
データセットの内容は、
と実行すれば、R data setsウィンドウが表示
されるので、そこで確認できる。
52 ● ESTRELA 2008年2月(No.167)
データキューブ㈱医療情報システム部主任
牧山 文彦(Makiyama Fumihiko)
■琉球大学医学部大学院保健学研究科修了。女子栄養大学大学院保健学研究科修了、保健学博士(学術)。琉球大学医学部保健管理学助手、秀和綜合病院企画・電算室学術情報主任、ちばなクリニック健康管理センター事務チーフを経て、2007年4月より現職。E-mail:[email protected]
[連載]フリーソフトによるデータ解析・マイニング 第55回
>library(maptools)>library(rgdal)
>kmlfile <- "C:/GISdata/kmlOverlay.kml">kmlpng <-"C:/GISdata/kmlOverlay.png"
>data()
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 52
ちなみに、quakesの内容は「Locations of
Earthquakes off Fiji」であり、フィジー諸島周
辺の地震が発生した地点のデータである。
さて、まず、quakesのデータをSpatialPoints
DataFrameに変換する。
これで、SpatialPointsDataFrameが作成され
た。ただ、このままではプロジェクション
(地図の座標系・投影法)が指定されていない
ので、更に指定を行う(プロジェクションに
ついては後の節にて詳しく扱う)。
これで、プロジェクションの指定ができた。
確認してみると、
2008年2月(No.167) ESTRELA ● 53
>qk <- SpatialPointsDataFrame(quakes[, c(2:1)], quakes)
>proj4string(qk) <- CRS("+proj=longlat")
表1 rgdaldemo.txt
#kmlOverlaylibrary(maptools)library(rgdal)kmlfile <- "C:/GISdata/kmlOverlay.kml"kmlpng <-"C:/GISdata/kmlOverlay.png"qk <- SpatialPointsDataFrame(quakes[, c(2:1)], quakes)proj4string(qk) <- CRS("+proj=longlat")SGqk <- GE_SpatialGrid(qk,maxPixels = 600)#<=ここがミソpng(file=paste(kmlpng, sep=""), width=SGqk$width, height=SGqk$height,bg="transparent")par(mar=c(0,0,0,0), xaxs="i", yaxs="i")plot(qk, xlim=SGqk$xlim, ylim=SGqk$ylim,pch="+",col="red")dev.off()kmlOverlay(SGqk, kmlfile,kmlpng)system(paste('"C:/Program Files/Google/Google Earth/GoogleEarth.exe"',kmlfile),wait=FALSE)
#writeOGRlibrary(maptools) library(rgdal)x<-readShapePoly("C:/GISdata/gunma.shp")proj4string(x)<-CRS("+proj=longlat")kmlfileV <- "C:/GISdata/kmlOverlayVector.kml"writeOGR(x,kmlfileV,"gunma","KML")system(paste('"C:/Program Files/Google/Google Earth/GoogleEarth.exe"',kmlfileV),wait=FALSE)
#EPSGコード epsg<-make_EPSG()epsg[1,1:3]
#プロジェクションの変換 library(maptools)x<-readShapePoly("C:/GISdata/gunma.shp")proj4string(x)<-CRS("+init=epsg:4612")plot(x)
>str(qk)Formal class 'SpatialPointsDataFrame'[package "sp"] with 5 slots..@ data : 'data.frame': 1000 obs. of 5variables:. . . .$ lat : num [1:1000] -20.4 -20.6 -26.0
-18.0 -20.4 .... . . .$ long : num [1:1000] 182 181 184 182
182 .... . . .$ depth : int [1:1000] 562 650 42 626
649 195 82 194 211 622 .... . . .$ mag : num [1:1000] 4.8 4.2 5.4 4.1 4 4
4.8 4.4 4.7 4.3 .... . . .$ stations: int [1:1000] 41 15 43 19 11 12
43 15 35 19 .....@ coords.nrs : num(0) ..@ coords : num [1:1000, 1:2] 182 181 184182 182 ...
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 53
であり、一番下の@projargsの中に"+proj =
longlat +ellps =WGS84"が設定されているこ
とがわかる(+ellps=WGS84は自動的に設定
される)。
さて、次に、作成したqkをGoogle Earth上
のグリッドに割り当てる。
ちなみに、maxPixelsでPNG画像の密度を指
定することができる。
さて、これで準備が整ったので、実際に
PNG画像を出力させる。
PNG画像のwidth, heightは作成した
SGqkのものを使う。また、背景を透明
にするため、bg =" transparent "を指定
する。また、par( )関数で、mar, xaxs,
yaxsを指定する。そして、plot( )関数を
実行させ、dev.off( )関数でグラフィッ
クデバイスを終了させる。
最後に、kmlOverlay( )関数でKMLを
出力する。
このように、タグ付きのKMLデータが作成
され、指定したファイル名に出力される。
それでは、Google Earthで表示してみよう。
Rから直接Google Earthを起動するためには、
下記のコードを使う。
Google Earthが起動し、フィジー諸島の周
辺に赤い「+」で地震が発生した地点が表示
されたと思う(図1)。
54 ● ESTRELA 2008年2月(No.167)
. . . . - attr(*, "dimnames")=List of 2
. . . . . . $ : NULL
. . . . . . $ : chr [1:2] "long" "lat"
. .@ bbox : num [1:2, 1:2] 165.7 -38.6 188.1-10.7
. . . . - attr(*, "dimnames")=List of 2
. . . . . . $ : chr [1:2] "long" "lat"
. . . . . . $ : chr [1:2] "min" "max"
. .@ proj4string:Formal class 'CRS' [package"sp"] with 1 slots
.. .. . .@ projargs: chr " +proj=longlat+ellps=WGS84"
>SGqk <- GE_SpatialGrid(qk,maxPixels = 600)
>kmlOverlay(SGqk, kmlfile,kmlpng)[1] "<?xml version='1.0' encoding='UTF-8'?>"[2] "<kml xmlns='http://earth.google.com/kml/2.0'>"[3] "<GroundOverlay>"[4] "<name>R image</name>"[5] "<Icon><href>c:/GISdata/kmlOverlay.png</href><viewBoundScale>0.75</viewBoundScale></Icon>"[6] "<LatLonBox><north>-10.72</north>< s o u t h > - 3 8 . 5 9 < / s o u t h > < e a s t > 1 8 8 .158103454744</east><west>165.67</west></LatLonBox>"[7] "</GroundOverlay></kml>"
>system(paste('"C:/Program Files/Google/Google Earth/GoogleEarth.exe"',kmlfile),wait=FALSE)
>png(file=paste(kmlpng,sep=""),width=SGqk$width,height=SGqk$height,bg="transparent")>par(mar=c(0,0,0,0), xaxs="i", yaxs="i")>plot(qk, xl im=SGqk$xlim, yl im=SGqk$ylim,pch="+",col="red")>dev.off()null device
1
図1 kmlOverlay
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 54
この手法は、Rのグラフィック画面で表示
されたポイントデータを簡単にGoogle Earth
上に表示できるため、色々な場面で利用でき
ると考えられる。
2. rgdalのwriteOGRを用いたShapeFileの変換
さて、次に、rgdalパッケージのwriteOGRを
用いてShapeFileを直接KMLに変換してみる。
まず、前節と同様にライブラリ宣言を行う。
次に、ShapeFileを読み込む(ここでは以前
に利用した群馬県のShapeFileデータを用い
る)。
これで、群馬県のShapeFileデータがSpatial
PolygonDataFrameに設定された。
次に、出力用のKMLファイル名を指定し、
KML出力を実行する。
ワーニングメッセージが表示され、KMLフ
ァイルが出力される。さて、早速KMLファイ
ルを開いてみよう。
Google Earthが起動し、「場所」タブ内に
kmlOverlayVector.kmlレイヤが表示され、群
馬県の行政界が赤い線で表示される(図2)。
さて、現状のwriteOGRには、いくつかの問
題が見つかっている。
まず、「場所」タブ内にkmlOverlayVector.
kmlレイヤを開いて各行政界の情報を見てみ
ると、文字化けを起こしていると思う。これ
は、Google EarthのKMLの文字コードが標準
でUTF-8になっており、kmlOverlayVector.kml
は、Shift-JISで出力されていることに起因する。
これを回避するには、秀丸エディタ等のテキ
ストエディタでKMLの文字コードをUTF-8に
変換し、保存すればよい。
また、他の問題として、ワーニングメッセ
ージにもあるように、ShapeFileのcoordinate
には高さ情報がないため、そのままKML変換
をしてもKMLの<coordinates>タグの中には高
さ情報のないデータの形で変換されてしまう。
そのため、KMLデータの後利用時に支障が出
る恐れがある。
このように、writeOGRを用いた変換には多く
の問題が存在するが、これらの問題はGDAL/
OGRライブラリのバージョンが上がれば解決
していくと思われるので、GDAL/OGRライブ
ラリの開発者側の作業の進行を待ちたい。
2008年2月(No.167) ESTRELA ● 55
フリーソフトによるデータ解析・マイニングフリーソフトによるデータ解析・マイニング
>library(maptools)>library(rgdal)
>x<-readShapePoly("C:/GISdata/gunma.shp")>proj4string(x)<-CRS("+proj=longlat")
>system(paste('"C:/Program Files/Google/GoogleEarth/GoogleEarth.exe"',kmlfileV),wait=FALSE)
>kmlfileV <- "C:/GISdata/kmlOverlayVector.kml">writeOGR(x, kmlfileV, "gunma", "KML")Warning message:Unknown coordinate reference system: forKML driver should be geographical in: writeOGR(x, paste(kmlfileV, sep = ""), "gunma","KML")
図2 writeOGR
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 55
3. CRSクラスと地図の座標系・投影法の変換
rgdalは、多くのオープンソース系GISに用
いられている汎用ラスター/ベクターデータ
変換ライブラリGDAL/OGR[2]および地図投影
変換ライブラリPROJ.4をRで利用可能にした
パッケージである。
では、まず最初に、rgdalで利用できるラス
ターデータ、ベクターデータのフォーマット
およびプロジェクションのリストを表示して
みる。
このように、多くのフォーマットに対応し
ていることがわかる。
さて、実際にプロジェクションの指定を行
うためには、CRSクラスを利用する。CRSと
はCoordinate Reference Systemの略で、プロ
ジェクションを指定するクラスであり、spパ
ッケージも同じクラスを持っている。
プロジェクションの指定にはいくつかの方
法 が あ る が 、 SRID( Spatial Reference
Identifier:空間参照識別子/世界中の種々の
空間参照系を整理してユニークな番号を割り
振ったもの)で一般的に用いられているEPSG
コード[3]を利用すると、比較的簡単に指定で
きることが知られている。表2には比較的ポ
ピュラーなEPSGコードを示した。実際に
rgdalで呼び出してみると、
と表示される。
これは、実際に用いられているEPSGコード
の1番の中身を見たものである。EPSGコード
をCRSクラスに適応させる場合は、
と指定すれば、EPSGコードに対応したプロジ
ェクションが設定される。
56 ● ESTRELA 2008年2月(No.167)
>getGDALDriverNames()name long_name create copy
1 AAIGrid Arc/Info ASCII Grid FALSE TRUE2 AIG Arc/Info Binary Grid
FALSE FALSE3 AirSAR AirSAR Polarimetric Image
FALSE FALSE4 BMP MS Windows Device Independent Bitmap
TRUE FALSE5 BSB Maptech BSB Nautical Charts
FALSE FALSE6 BT VTP .bt (Binary Terrain) 1.3 Format
TRUE FALSE<以下省略>
>ogrDrivers()name write
1 AVCBin FALSE2 CSV TRUE3 DGN TRUE4 ESRI Shapefile TRUE5 GML TRUE6 KML TRUE7 MapInfo File TRUE<以下省略>
>projInfo() name description
1 aea Albers Equal Area2 aeqd Azimuthal Equidistant3 airy Airy
4 aitoff Aitoff5 alsk Mod. Stererographics of Alaska6 apian Apian Globular I7 august August Epicycloidal8 bacon Bacon Globular<以下省略>
>library(rgdal)>epsg<-make_EPSG()>epsg[1,1:3]code note prj41 4001# Unknown datum based
upon the Airy 1830 ellipsoid+ proj=longlat +ellps=airy +no_defs
CRS("+init=epsg:コード番号")
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 56
2008年2月(No.167) ESTRELA ● 57
フリーソフトによるデータ解析・マイニングフリーソフトによるデータ解析・マイニング
EPSG分類 ESRI proj ellps datum units 備考
4326WGS84 4326 longlat WGS84 WGS84 緯度・経度 GPS、海図、Google Earth
32651 32652 32653 32654 32655 32656
UTM 102151 102152 102153 102154 102155 102156 32651 32652 32653 32654 32655 32656
utm utm utm utm utm utm utm utm utm utm utm utm
bessel bessel bessel bessel bessel bessel WGS84 WGS84 WGS84 WGS84 WGS84 WGS84
WGS84 WGS84 WGS84 WGS84 WGS84 WGS84
m m m m m m m m m m m m
Zone 51N 東経120~126 Zone 52N 東経126~132 Zone 53N 東経132~138 Zone 54N 東経138~144 Zone 55N 東経144~150 Zone 56N 東経150~156 Zone 51N 東経120~126 Zone 52N 東経126~132 Zone 53N 東経132~138 Zone 54N 東経138~144 Zone 55N 東経144~150 Zone 56N 東経150~156
4301 30161 30162 30163 30164 30165 30166 30167 30168 30169 30170 30171 30172 30173 30174 30175 30176 30177 30178 30179
日本国内 旧測地系 (Tokyo datum)
4301 30161 30162 30163 30164 30165 30166 30167 30168 30169 30170 30171 30172 30173 30174 30175 30176 30177 30178 30179
longlat tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc
bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel bessel
緯度・経度 m m m m m m m m m m m m m m m m m m m
旧公共座標系I 旧公共座標系II 旧公共座標系III 旧公共座標系IV 旧公共座標系V 旧公共座標系VI 旧公共座標系VII 旧公共座標系VIII 旧公共座標系IX 旧公共座標系X 旧公共座標系XI 旧公共座標系XII 旧公共座標系XIII 旧公共座標系XIV 旧公共座標系XV 旧公共座標系XVI 旧公共座標系XVII 旧公共座標系XVIII 旧公共座標系XIX
4612 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461
日本国内 新測地系 (JGD2000)
4612 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461
longlat tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc tmerc
GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80 GRS80
緯度・経度 m m m m m m m m m m m m m m m m m m m
新公共座標系I 新公共座標系II 新公共座標系III 新公共座標系IV 新公共座標系V 新公共座標系VI 新公共座標系VII 新公共座標系VIII 新公共座標系IX 新公共座標系X 新公共座標系XI 新公共座標系XII 新公共座標系XIII 新公共座標系XIV 新公共座標系XV 新公共座標系XVI 新公共座標系XVII 新公共座標系XVIII 新公共座標系XIX
表2 EPSGコード表(抜粋)
出典)Bubble://ちずろぐ/別館/(http://bubble.atnifty.com/)
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 57
たとえば、Google Earthに用いられている
WGS84(World Geodetic System 1984:地球
重心に原点を持つ測地座標系)は、EPSGコー
ドの4,326番で、CRS(" + init =epsg:4326 ")
と指定することになり、前節の
の部分は、
と表現することができる。
また、以前に行った群馬県の描画では、
と す る こ と で 、 日 本 国 内 の 新 測 地 系
(JGD2000)での描画が実行され、ゆがみの
ない行政界を表示させることが可能となる
(図3)。
4. おわりにさて、6カ月に渡ってRと空間統計に関連
するテーマでお話をさせていただきましたが、
Rの空間統計関連パッケージの各専門分野の
事柄については、残念ながら詳しく紹介でき
ませんでした。
そのため、各専門分野の方々には消化不良
の部分が多々あったかと思いますが、Rを利
用した空間統計の可能性については紹介する
ことができたと思います。
ご存知の通り、Rの進化はとどまるところ
を知りません。Rを利用した研究は全世界で
行われているため、明日にも新しいパッケー
ジが公開されているかもしれません。
2007年12月現在、パッケージ数は1,250を超
え更に増え続け、専門的なパッケージを細か
く紹介することは難しくなってきています。
そのため、新しいパッケージや興味あるパッ
ケージを発見したら、ぜひRjpWikiに投稿して
ください。Rを進化させるのは「あなた」で
す。
最後に、このような執筆の機会を与えてく
ださった同志社大学文化情報学部教授 金 明哲
先生に心から感謝申し上げます。ありがとう
ございました。
*参考文献・URL[1] RjpWiki:空間的なデータの分析(http://www.
okada.jp.org/RWiki/?%B6%F5%B4%D6%C5%AA%A4%CA%A5%C7%A1%BC%A5%BF%A4%CE%CA%AC%C0%CF).
[2] GDAL - Geospatial Data Abstraction Library(http://www.gdal.org/).
[3] Tyler Mitchell(大塚恒平他訳):入門Webマッピング 自分で作るオリジナルのデジタル地図:オライリー・ジャパン社, pp.297 - 298.
58 ● ESTRELA 2008年2月(No.167)
>proj4string(x)<-CRS("+proj=longlat")
>proj4string(x)<-CRS("+init=epsg:4326")
>library(maptools)>x<-readShapePoly("C:/GISdata/gunma.shp")>proj4string(x)<-CRS("+init=epsg:4612")>plot(x)
図3 プロジェクションの変換
p52-58 解析(牧山)20-2135 08.2.7 10:54 AM ページ 58
KAKAMIGAHARA No. 商工会議所会報€会報】363号(2018.6).pdfGoogle マップが ・最優先な理由 Google マイビジネスとは何か ネス設定・新規顧客を誘導するマイビジ
[連載]フリーソフトによるデータ解析・マイニング 第87回mjin/R/AIZAKI/REXCEL3.pdf · 機能を使うことで、Excelのセルに入力した R関数やデータをRに転送し、計算結果をR