SlideShare a Scribd company logo
1 of 26
Download to read offline
KMLとR
RでKMLを自由自在に操る




   データキューブ
   牧山 文彦
                1
A g e n d a

  ( 1 ) K M L とG o o g l e E a r t h・ ・ ・ お さ ら い
  (2)デジタルアースに必要な技術
  ( 3 )K M Lの立ち位置
  (4)KMLの特徴
  (5)Rからのアプローチ
  (6)Rパッケージの機能との関連
  (7)デモ
  (8)まとめ

                                                    2
( 1 ) K M L とG o o g l e E a r t h・ ・ ・ お さ ら い
• K e yho l e M a r k u p L a n g u a g e の 略 、X M Lの一種
• K e yho l e と は 、Googleに買収される前のGoogleEarthの名前か
  ら来ている
• 2 0 0 4 年 1 0 月 に 米Keyhole社がGoogleに 買 収 さ れ た 。 米Keyhole
  社はSGI社(シリコングラフィックス社)を源流とする
• 2 0 0 5年 7 月GoogleEarth公開
• GoogleEarthは 「 デ ジ タ ル ア ー ス 」 と い う コ ン セ プ ト に 基 づ い て 作 成
  されたブラウザーの一種で、従来のG I Sとは概念を異にする
• GoogleEarthは 、Googleが 無 料 で 配 布 す る と い う 暴 挙 ( ? ) に 出 た
  ため、世界に衝撃が走った
• そのため2004~2005年がひとつの出発点となっている
• 2 0 08 年 4 月 、K M LはO G C標準に認定された
• 海・宇宙・月・火星・・・地中はまだない
• iPhoneに対応
                                                             3
(2)デジタルアースに必要な技術

  1.  コ ン ピ ュ ー タ 科 学
  2.  大 規 模 ス ト レ ー ジ
  3.  衛 星 画 像 ( 特 に 高 解 像 度 の )
  4.  ブ ロ ー ド バ ン ド ネ ッ ト ワ ー ク
  5.  相 互 運 用 性
  6.  メ タ デ ー タ
               ( ア ル ・ ゴ ア :2 0 0 0年 )


                   参考資料:地理情報資源のデータベースと相互運用の試み
                   (国立情報学研究所 北本朝展先生) より引用・加筆    4
( 3 )K M Lの立ち位置

  ArcGIS他           プロフェッショナル   スタンドアロン

  GoogleEarth Pro


  GoogleEarth         K M L


  Earth Plug-In
                     プロシューマ
  GoogleMap
                     コンシューマ      Webベース

                                      5
(4)KMLの特徴
  •   O G C   K M L と し て 標 準 化   現 在ver 2 . 2
  •   X M L
  •   ZIP圧縮可能(KMZ)
  •   ネットワークリンクに対応・・・分散型
  •   ベクターデータ(点・線・ポリゴン等)
  •   ラスターデータのオーバーレイ
  •   WMSのマッピング
  •   時間データ
  •   写真データ(ストリートビュー含む)
  •   テ ク ス チ ャ 付 き 3 D オ ブ ジ ェ ク ト はColladaデ ー タ
  •   ブ ラ ウ ザ ー 機 能 (JavaScript&Webkit利 用 )
  •   Flash可能
  •   動画再生可能
  •   サウンド再生可能

                                                    6
(5)Rからのアプローチ
             RCurl
                  rcom      Earth
                           &PlugIn
                   XML
    rgdal
sp
  maptools
                     KML    Map



                           SketchUp
    Other System


                                     7
(6)Rパッケージの機能との関連

 Rパッケージ     基本機能      Earth       Map      SketchUp
  rgdal     データ変換    KML変換      KML変換

 maptools   GIS機能    KML出力      KML出力

  XML       XML操作    KML操作      XML操作      Collada操作

  RCurl     Web操作              WebAPI 操作

  rcom      DCOM操作   Earth操作


     RでKMLを扱うためのクラスはspの3つのクラスを利用する
             SpatialPointsDataFrame-class
             SpatialLinesDataFrame-class
            SpatialPolygonsDataFrame-class



                                                       8
(7) デ モ

 ①ShapeFile-KML変換(rgdal)
 ②ラスターデータのK M Lオ ーバーレ イ(maptools)
 ③ベ ク ター デー タのK M Lオ ーバーレ イ(rgdal)
 ④ポ リ ゴ ン デ ー タ のK M Lオ ーバーレ イ(maptools)
 ⑤複 数 ポ リ ゴ ン デ ー タ のK M Lオ ー バ ー レ イ 1(maptools)
 ⑥K M Lデ ー タ の 修 正 (X M L : M a c)
 ⑦Colladaデータの修正( X M L : M a c )




                                                    9
デモ①ShapeFile-KML変換(rgdal)


    #demo1
    #rgdal WriteOGR
    library(rgdal)
    x<-readOGR("Z:/test/japan_ver62/gunma.shp",layer="gunma")
    x@data$PREF<-iconv(x@data$PREF,"","utf-8")
    x@data$CITY1<-iconv(x@data$CITY1,"","utf-8")
    x@data$CITY2<-iconv(x@data$CITY2,"","utf-8")
    x@data$TOWN1<-iconv(x@data$TOWN1,"","utf-8")
    x@data$TOWN2<-iconv(x@data$TOWN2,"","utf-8")
    writeOGR(x,"Z:/test/gunma.kml", "gunma", "KML")




                                                                10
11
②ラスターデータのKMLオーバーレイ(maptools)

#demo2
#maptools kmlOverlay
#
library(maptools)
qk <- SpatialPointsDataFrame(quakes[, c(2:1)], quakes)
proj4string(qk) <- CRS("+proj=longlat")
tf<-"Z:/test/"
SGqk <- GE_SpatialGrid(qk)
png(file=paste(tf, "qk.png", 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, setParUsrBB=TRUE,col="red")
dev.off()
kmlOverlay(SGqk, paste(tf, "qk.kml", sep=""), paste("qk.png", sep=""))




                                                                   12
13
③ベクターデータのKMLオーバーレイ(rgdal)


 #demo3
 #rgdal point overlay
 library(rgdal)
 qk0 <- quakes
 qk0$long <- ifelse(qk0$long <= 180, qk0$long, qk0$long-360)
 qk0a <- SpatialPointsDataFrame(qk0[, c(2:1)], qk0)
 proj4string(qk0a) <- CRS("+proj=longlat")
 writeOGR(qk0a, paste(tf, "v.kml", sep=""), "Quakes", "KML")




                                                               14
15
④ポリゴンデータのKMLオーバーレイ(maptools)


 #demo4
 library(maptools)
 data(wrld_simpl)
 ## creates a KML file containing the polygons of South Africa (plus hole)
 sw <- slot(wrld_simpl[wrld_simpl$NAME=="South Africa",], "polygons")[[1]]
 tf <- "Z:/test/SA.kml"
 kmlPolygon(sw, kmlfile=tf, name="South Africa", col="#df0000aa", lwd=5,
     border=4, kmlname="R Test",
     kmldescription="This is <b>only</b>
     a <a href='http://www.r-project.org'>R</a> test.")
 tf




                                                                             16
17
⑤複数ポリゴンデータのKMLオーバーレイ1(maptools)

#demo5
## creates a KML file containing the polygons
##       of South Africa, Switzerland, and Canada
sw <- wrld_simpl[wrld_simpl$NAME %in% c("South Africa",
 "Switzerland", "Canada"),]
out <- sapply(slot(sw, "polygons"), function(x) { kmlPolygon(x,
    name=as(sw, "data.frame")[slot(x, "ID"), "NAME"],
    col="red", lwd=1.5, border='black',
    description=paste("ISO3:", slot(x, "ID"))) })
tf <- "Z:/test/SA2.kml"
kmlFile <- file(tf, "w")
tf
cat(kmlPolygon(kmlname="R Test", kmldescription="<i>Hello</i>")$header,
    file=kmlFile, sep="n")
cat(unlist(out["style",]), file=kmlFile, sep="n")
cat(unlist(out["content",]), file=kmlFile, sep="n")
cat(kmlPolygon()$footer, file=kmlFile, sep="n")
close(kmlFile)


                                                                    18
19
⑥KMLデータの修正(XML:Mac)
  #demo6
  #XML MacOSX
  library(XML)
  source("/Users/fumihiko_maki/Desktop/test/kmlFunctions.r")
  doc <- xmlTreeParse("/Users/fumihiko_maki/Desktop
  /test/gunma.kml")
  data<-sample(1000:10000,39)
  fillcolor<-colors.kml(heat.colors(39),"EE")
  linecolor<-NA
  x<-kmlAltitudeNode(doc,data,fillcolor,linecolor)
  saveXML(x,file="/Users/fumihiko_maki/Desktop/test/gunma2.kml",
  prefix = '<?xml version="1.0" encoding="UTF-8"?>')




                                                                   20
21
⑦Colladaデータの修正(XML:Mac)

  #demo7
  #collada
  library(XML)
  doc<-xmlTreeParse("/Users/fumihiko_maki/Desktop/test/
  Collada/doc.kml")
  x<-xmlRoot(doc)
  x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["x"]]<-
  xmlNode("x","10000000.0")
  x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["y"]]<-
  xmlNode("y","10000000.0")
  x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["z"]]<-
  xmlNode("z","10000000.0")
  saveXML(x,"/Users/fumihiko_maki/Desktop/test/Collada/doc2.kml"
  ,prefix = '<?xml version="1.0" encoding="UTF-8"?>')




                                                                   22
23
(8)まとめ
•   以前と比べてRでKMLを利用する環境が整ってきた
•   基本をSPパッケージクラスの構造にして互換性を持たせてある
•   高さ等の未実装の部分もある
•   データ変換にはrgdal
•   KMLオーバーレイ出力にはmaptools
•   KMLの内容を操作するにはXML
•   問題点として
       – MacOSX : rgdal
           • バイナリパッケージが無い
           • 自分でmakeしろってか?
       – Windows : XML
           • UTF-8が基本の世界ではプログラムが面倒
           • インナークラス難しい。私の勉強不足?

今後はGoogleMapに手を出してみたい                24
ご清聴ありがとうございました




 データキューブ株式会社
 http://www.datacube.co.jp


                             25
資料
#############################
# kmlFunctions.r ver 0.2.1
# fumihiko makiyama
#############################

## kmlAltitudeNode()
kmlAltitudeNode<-function(doc,data,fillcolor,linecolor,extrude="1",tessellate="1",altitudeMode="absolute"){
kmlnode <- xmlRoot(doc)
node0<-kmlnode[[1]]
kmlver5<-'http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2'
kmlnode<-xmlNode("kml",node0,attrs=c(xmlns=kmlver5))
len1<-length(node0[["Folder"]])
for(i in 3:len1){
    node1<-node0[["Folder"]][[i]][["MultiGeometry"]][["Polygon"]]
    node1<-
addChildren(node1,xmlNode("extrude",extrude),xmlNode("tessellate",tessellate),xmlNode("gx:altitudeMode",altitu
deMode))
    node2<-node0[["Folder"]][[i]][["Style"]][["PolyStyle"]]
    node2<-xmlNode("PolyStyle",xmlNode("color",fillcolor[i-2]))
    #linecolor
    node3<-node0[["Folder"]][[i]][["Style"]][["LineStyle"]]
    node3<-xmlNode("LineStyle",xmlNode("color",linecolor))
    #polygon
    len2<-length(node0[["Folder"]][[i]][["MultiGeometry"]][["Polygon"]])
    for(j in 1:len2){
            x1<-xmlValue(node1[[j]][[1]][[1]])
            x2<-rev(unlist(strsplit(x1," ")))
            x3<-paste(x2,data[[i-2]],sep=",",collapse=" ")
            node1[[j]][[1]][[1]]<-xmlNode("coordinates",x3)
    }
#replace node
node0[["Folder"]][[i]][["MultiGeometry"]][["Polygon"]]<-node1
node0[["Folder"]][[i]][["Style"]][["PolyStyle"]]<-node2
node0[["Folder"]][[i]][["Style"]][["LineStyle"]]<-node3
kmlnode[[1]]<-node0
}
return(kmlnode)
                                                                                                            26
}

More Related Content

What's hot

KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こうYoshitomo Akimoto
 
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)NTT DATA OSS Professional Services
 
GPUを考慮したMapReduceのタスクスケジューリング
GPUを考慮したMapReduceのタスクスケジューリングGPUを考慮したMapReduceのタスクスケジューリング
GPUを考慮したMapReduceのタスクスケジューリングKoichi Shirahata
 
Sparkで始めるお手軽グラフデータ分析
Sparkで始めるお手軽グラフデータ分析Sparkで始めるお手軽グラフデータ分析
Sparkで始めるお手軽グラフデータ分析Nagato Kasaki
 
MemoryPlus Workshop
MemoryPlus WorkshopMemoryPlus Workshop
MemoryPlus WorkshopHitoshi Sato
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205Toshi Harada
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigDataKohei KaiGai
 
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライドMizutani Takayuki
 
PL/CUDA - GPU Accelerated In-Database Analytics
PL/CUDA - GPU Accelerated In-Database AnalyticsPL/CUDA - GPU Accelerated In-Database Analytics
PL/CUDA - GPU Accelerated In-Database AnalyticsKohei KaiGai
 
Iugonet 20120810-nipr-sato
Iugonet 20120810-nipr-satoIugonet 20120810-nipr-sato
Iugonet 20120810-nipr-satoIugo Net
 
PUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチ
PUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチPUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチ
PUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチTakanori Nakai
 
QGIS はじめてのラスタ解析
QGIS はじめてのラスタ解析QGIS はじめてのラスタ解析
QGIS はじめてのラスタ解析Mayumit
 
Incanterの紹介
Incanterの紹介Incanterの紹介
Incanterの紹介mozk_
 
GPGPUを用いた大規模高速グラフ処理に向けて
GPGPUを用いた大規模高速グラフ処理に向けてGPGPUを用いた大規模高速グラフ処理に向けて
GPGPUを用いた大規模高速グラフ処理に向けてKoichi Shirahata
 
120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2Takayuki Nuimura
 
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化Koichi Shirahata
 
Qtiles plugin for QGIS
Qtiles plugin for QGISQtiles plugin for QGIS
Qtiles plugin for QGISHideo Harada
 

What's hot (20)

KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
 
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
 
GPUを考慮したMapReduceのタスクスケジューリング
GPUを考慮したMapReduceのタスクスケジューリングGPUを考慮したMapReduceのタスクスケジューリング
GPUを考慮したMapReduceのタスクスケジューリング
 
Sparkで始めるお手軽グラフデータ分析
Sparkで始めるお手軽グラフデータ分析Sparkで始めるお手軽グラフデータ分析
Sparkで始めるお手軽グラフデータ分析
 
MemoryPlus Workshop
MemoryPlus WorkshopMemoryPlus Workshop
MemoryPlus Workshop
 
Rを用いたGIS
Rを用いたGISRを用いたGIS
Rを用いたGIS
 
PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205PGCon.jp 2014 jsonb-datatype-20141205
PGCon.jp 2014 jsonb-datatype-20141205
 
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
20181211 - PGconf.ASIA - NVMESSD&GPU for BigData
 
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
2014年日本生態学会広島大会・自由集会「仕事でつかえる!FOSS4G」発表スライド
 
PL/CUDA - GPU Accelerated In-Database Analytics
PL/CUDA - GPU Accelerated In-Database AnalyticsPL/CUDA - GPU Accelerated In-Database Analytics
PL/CUDA - GPU Accelerated In-Database Analytics
 
Iugonet 20120810-nipr-sato
Iugonet 20120810-nipr-satoIugonet 20120810-nipr-sato
Iugonet 20120810-nipr-sato
 
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
CMSI計算科学技術特論A(14) 量子化学計算の大規模化1
 
PUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチ
PUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチPUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチ
PUCKモデルの適用例:修論を仕上げた後、個人的にやっていたリサーチ
 
QGIS はじめてのラスタ解析
QGIS はじめてのラスタ解析QGIS はじめてのラスタ解析
QGIS はじめてのラスタ解析
 
Incanterの紹介
Incanterの紹介Incanterの紹介
Incanterの紹介
 
R3.0.0 is relased
R3.0.0 is relasedR3.0.0 is relased
R3.0.0 is relased
 
GPGPUを用いた大規模高速グラフ処理に向けて
GPGPUを用いた大規模高速グラフ処理に向けてGPGPUを用いた大規模高速グラフ処理に向けて
GPGPUを用いた大規模高速グラフ処理に向けて
 
120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2
 
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
汎用グラフ処理モデルGIM-Vの複数GPUによる大規模計算とデータ転送の最適化
 
Qtiles plugin for QGIS
Qtiles plugin for QGISQtiles plugin for QGIS
Qtiles plugin for QGIS
 

Viewers also liked

第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」Masafumi Okada
 
WebGIS初級編 - OpenLayersで簡単作成
WebGIS初級編 - OpenLayersで簡単作成WebGIS初級編 - OpenLayersで簡単作成
WebGIS初級編 - OpenLayersで簡単作成Hideo Harada
 
洪水浸水想定区地域作図マニュアル(第4版)
洪水浸水想定区地域作図マニュアル(第4版)洪水浸水想定区地域作図マニュアル(第4版)
洪水浸水想定区地域作図マニュアル(第4版)ETSUJI ASAI
 
20140827 about OpenStreetMap
20140827 about OpenStreetMap20140827 about OpenStreetMap
20140827 about OpenStreetMapTaichi Furuhashi
 
災害拠点病院とは?
災害拠点病院とは?災害拠点病院とは?
災害拠点病院とは?Yuichi Kuroki
 
地震・津波・液状化と院内災害対応
地震・津波・液状化と院内災害対応地震・津波・液状化と院内災害対応
地震・津波・液状化と院内災害対応Yuichi Kuroki
 
病院内における災害時行動の原則
病院内における災害時行動の原則病院内における災害時行動の原則
病院内における災害時行動の原則Yuichi Kuroki
 
災害医療に役立つ標語集
災害医療に役立つ標語集災害医療に役立つ標語集
災害医療に役立つ標語集Yuichi Kuroki
 

Viewers also liked (9)

第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
第19回疫学セミナー 統計解析ソフトRの活用「Rで線形モデル」
 
WebGIS初級編 - OpenLayersで簡単作成
WebGIS初級編 - OpenLayersで簡単作成WebGIS初級編 - OpenLayersで簡単作成
WebGIS初級編 - OpenLayersで簡単作成
 
Tokyo r30 anova
Tokyo r30 anovaTokyo r30 anova
Tokyo r30 anova
 
洪水浸水想定区地域作図マニュアル(第4版)
洪水浸水想定区地域作図マニュアル(第4版)洪水浸水想定区地域作図マニュアル(第4版)
洪水浸水想定区地域作図マニュアル(第4版)
 
20140827 about OpenStreetMap
20140827 about OpenStreetMap20140827 about OpenStreetMap
20140827 about OpenStreetMap
 
災害拠点病院とは?
災害拠点病院とは?災害拠点病院とは?
災害拠点病院とは?
 
地震・津波・液状化と院内災害対応
地震・津波・液状化と院内災害対応地震・津波・液状化と院内災害対応
地震・津波・液状化と院内災害対応
 
病院内における災害時行動の原則
病院内における災害時行動の原則病院内における災害時行動の原則
病院内における災害時行動の原則
 
災害医療に役立つ標語集
災害医療に役立つ標語集災害医療に役立つ標語集
災害医療に役立つ標語集
 

Similar to KMLとR言語

RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッションarctic_tern265
 
Silkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミングSilkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミングTaro L. Saito
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and designTomoharu ASAMI
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +αkobexr
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Sotaro Kimura
 
オラクルGo! 位置情報アプリをクラウドで簡単に作ってみた
オラクルGo! 位置情報アプリをクラウドで簡単に作ってみたオラクルGo! 位置情報アプリをクラウドで簡単に作ってみた
オラクルGo! 位置情報アプリをクラウドで簡単に作ってみたYosuke Arai
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう幹雄 小川
 
Data processing at spotify using scio
Data processing at spotify using scioData processing at spotify using scio
Data processing at spotify using scioJulien Tournay
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11MapR Technologies Japan
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77nkt77
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
WWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph AlgorithmsWWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph Algorithmscyberagent
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 
2012研究室紹介(大川)
2012研究室紹介(大川)2012研究室紹介(大川)
2012研究室紹介(大川)猛 大川
 

Similar to KMLとR言語 (20)

RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
Silkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミングSilkによる並列分散ワークフロープログラミング
Silkによる並列分散ワークフロープログラミング
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +α
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
 
オラクルGo! 位置情報アプリをクラウドで簡単に作ってみた
オラクルGo! 位置情報アプリをクラウドで簡単に作ってみたオラクルGo! 位置情報アプリをクラウドで簡単に作ってみた
オラクルGo! 位置情報アプリをクラウドで簡単に作ってみた
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
 
Data processing at spotify using scio
Data processing at spotify using scioData processing at spotify using scio
Data processing at spotify using scio
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
WWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph AlgorithmsWWW2017論文読み会 Information Cascades と Graph Algorithms
WWW2017論文読み会 Information Cascades と Graph Algorithms
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
Tokyo r 25_lt_isobe
Tokyo r 25_lt_isobeTokyo r 25_lt_isobe
Tokyo r 25_lt_isobe
 
2012研究室紹介(大川)
2012研究室紹介(大川)2012研究室紹介(大川)
2012研究室紹介(大川)
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (12)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

KMLとR言語

  • 1. KMLとR RでKMLを自由自在に操る データキューブ 牧山 文彦 1
  • 2. A g e n d a ( 1 ) K M L とG o o g l e E a r t h・ ・ ・ お さ ら い (2)デジタルアースに必要な技術 ( 3 )K M Lの立ち位置 (4)KMLの特徴 (5)Rからのアプローチ (6)Rパッケージの機能との関連 (7)デモ (8)まとめ 2
  • 3. ( 1 ) K M L とG o o g l e E a r t h・ ・ ・ お さ ら い • K e yho l e M a r k u p L a n g u a g e の 略 、X M Lの一種 • K e yho l e と は 、Googleに買収される前のGoogleEarthの名前か ら来ている • 2 0 0 4 年 1 0 月 に 米Keyhole社がGoogleに 買 収 さ れ た 。 米Keyhole 社はSGI社(シリコングラフィックス社)を源流とする • 2 0 0 5年 7 月GoogleEarth公開 • GoogleEarthは 「 デ ジ タ ル ア ー ス 」 と い う コ ン セ プ ト に 基 づ い て 作 成 されたブラウザーの一種で、従来のG I Sとは概念を異にする • GoogleEarthは 、Googleが 無 料 で 配 布 す る と い う 暴 挙 ( ? ) に 出 た ため、世界に衝撃が走った • そのため2004~2005年がひとつの出発点となっている • 2 0 08 年 4 月 、K M LはO G C標準に認定された • 海・宇宙・月・火星・・・地中はまだない • iPhoneに対応 3
  • 4. (2)デジタルアースに必要な技術 1.  コ ン ピ ュ ー タ 科 学 2.  大 規 模 ス ト レ ー ジ 3.  衛 星 画 像 ( 特 に 高 解 像 度 の ) 4.  ブ ロ ー ド バ ン ド ネ ッ ト ワ ー ク 5.  相 互 運 用 性 6.  メ タ デ ー タ ( ア ル ・ ゴ ア :2 0 0 0年 ) 参考資料:地理情報資源のデータベースと相互運用の試み (国立情報学研究所 北本朝展先生) より引用・加筆 4
  • 5. ( 3 )K M Lの立ち位置 ArcGIS他 プロフェッショナル スタンドアロン GoogleEarth Pro GoogleEarth K M L Earth Plug-In プロシューマ GoogleMap コンシューマ Webベース 5
  • 6. (4)KMLの特徴 • O G C   K M L と し て 標 準 化   現 在ver 2 . 2 • X M L • ZIP圧縮可能(KMZ) • ネットワークリンクに対応・・・分散型 • ベクターデータ(点・線・ポリゴン等) • ラスターデータのオーバーレイ • WMSのマッピング • 時間データ • 写真データ(ストリートビュー含む) • テ ク ス チ ャ 付 き 3 D オ ブ ジ ェ ク ト はColladaデ ー タ • ブ ラ ウ ザ ー 機 能 (JavaScript&Webkit利 用 ) • Flash可能 • 動画再生可能 • サウンド再生可能 6
  • 7. (5)Rからのアプローチ RCurl rcom Earth &PlugIn XML rgdal sp maptools KML Map SketchUp Other System 7
  • 8. (6)Rパッケージの機能との関連 Rパッケージ 基本機能 Earth Map SketchUp rgdal データ変換 KML変換 KML変換 maptools GIS機能 KML出力 KML出力 XML XML操作 KML操作 XML操作 Collada操作 RCurl Web操作 WebAPI 操作 rcom DCOM操作 Earth操作 RでKMLを扱うためのクラスはspの3つのクラスを利用する SpatialPointsDataFrame-class SpatialLinesDataFrame-class SpatialPolygonsDataFrame-class 8
  • 9. (7) デ モ ①ShapeFile-KML変換(rgdal) ②ラスターデータのK M Lオ ーバーレ イ(maptools) ③ベ ク ター デー タのK M Lオ ーバーレ イ(rgdal) ④ポ リ ゴ ン デ ー タ のK M Lオ ーバーレ イ(maptools) ⑤複 数 ポ リ ゴ ン デ ー タ のK M Lオ ー バ ー レ イ 1(maptools) ⑥K M Lデ ー タ の 修 正 (X M L : M a c) ⑦Colladaデータの修正( X M L : M a c ) 9
  • 10. デモ①ShapeFile-KML変換(rgdal) #demo1 #rgdal WriteOGR library(rgdal) x<-readOGR("Z:/test/japan_ver62/gunma.shp",layer="gunma") x@data$PREF<-iconv(x@data$PREF,"","utf-8") x@data$CITY1<-iconv(x@data$CITY1,"","utf-8") x@data$CITY2<-iconv(x@data$CITY2,"","utf-8") x@data$TOWN1<-iconv(x@data$TOWN1,"","utf-8") x@data$TOWN2<-iconv(x@data$TOWN2,"","utf-8") writeOGR(x,"Z:/test/gunma.kml", "gunma", "KML") 10
  • 11. 11
  • 12. ②ラスターデータのKMLオーバーレイ(maptools) #demo2 #maptools kmlOverlay # library(maptools) qk <- SpatialPointsDataFrame(quakes[, c(2:1)], quakes) proj4string(qk) <- CRS("+proj=longlat") tf<-"Z:/test/" SGqk <- GE_SpatialGrid(qk) png(file=paste(tf, "qk.png", 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, setParUsrBB=TRUE,col="red") dev.off() kmlOverlay(SGqk, paste(tf, "qk.kml", sep=""), paste("qk.png", sep="")) 12
  • 13. 13
  • 14. ③ベクターデータのKMLオーバーレイ(rgdal) #demo3 #rgdal point overlay library(rgdal) qk0 <- quakes qk0$long <- ifelse(qk0$long <= 180, qk0$long, qk0$long-360) qk0a <- SpatialPointsDataFrame(qk0[, c(2:1)], qk0) proj4string(qk0a) <- CRS("+proj=longlat") writeOGR(qk0a, paste(tf, "v.kml", sep=""), "Quakes", "KML") 14
  • 15. 15
  • 16. ④ポリゴンデータのKMLオーバーレイ(maptools) #demo4 library(maptools) data(wrld_simpl) ## creates a KML file containing the polygons of South Africa (plus hole) sw <- slot(wrld_simpl[wrld_simpl$NAME=="South Africa",], "polygons")[[1]] tf <- "Z:/test/SA.kml" kmlPolygon(sw, kmlfile=tf, name="South Africa", col="#df0000aa", lwd=5, border=4, kmlname="R Test", kmldescription="This is <b>only</b> a <a href='http://www.r-project.org'>R</a> test.") tf 16
  • 17. 17
  • 18. ⑤複数ポリゴンデータのKMLオーバーレイ1(maptools) #demo5 ## creates a KML file containing the polygons ## of South Africa, Switzerland, and Canada sw <- wrld_simpl[wrld_simpl$NAME %in% c("South Africa", "Switzerland", "Canada"),] out <- sapply(slot(sw, "polygons"), function(x) { kmlPolygon(x, name=as(sw, "data.frame")[slot(x, "ID"), "NAME"], col="red", lwd=1.5, border='black', description=paste("ISO3:", slot(x, "ID"))) }) tf <- "Z:/test/SA2.kml" kmlFile <- file(tf, "w") tf cat(kmlPolygon(kmlname="R Test", kmldescription="<i>Hello</i>")$header, file=kmlFile, sep="n") cat(unlist(out["style",]), file=kmlFile, sep="n") cat(unlist(out["content",]), file=kmlFile, sep="n") cat(kmlPolygon()$footer, file=kmlFile, sep="n") close(kmlFile) 18
  • 19. 19
  • 20. ⑥KMLデータの修正(XML:Mac) #demo6 #XML MacOSX library(XML) source("/Users/fumihiko_maki/Desktop/test/kmlFunctions.r") doc <- xmlTreeParse("/Users/fumihiko_maki/Desktop /test/gunma.kml") data<-sample(1000:10000,39) fillcolor<-colors.kml(heat.colors(39),"EE") linecolor<-NA x<-kmlAltitudeNode(doc,data,fillcolor,linecolor) saveXML(x,file="/Users/fumihiko_maki/Desktop/test/gunma2.kml", prefix = '<?xml version="1.0" encoding="UTF-8"?>') 20
  • 21. 21
  • 22. ⑦Colladaデータの修正(XML:Mac) #demo7 #collada library(XML) doc<-xmlTreeParse("/Users/fumihiko_maki/Desktop/test/ Collada/doc.kml") x<-xmlRoot(doc) x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["x"]]<- xmlNode("x","10000000.0") x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["y"]]<- xmlNode("y","10000000.0") x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["z"]]<- xmlNode("z","10000000.0") saveXML(x,"/Users/fumihiko_maki/Desktop/test/Collada/doc2.kml" ,prefix = '<?xml version="1.0" encoding="UTF-8"?>') 22
  • 23. 23
  • 24. (8)まとめ • 以前と比べてRでKMLを利用する環境が整ってきた • 基本をSPパッケージクラスの構造にして互換性を持たせてある • 高さ等の未実装の部分もある • データ変換にはrgdal • KMLオーバーレイ出力にはmaptools • KMLの内容を操作するにはXML • 問題点として – MacOSX : rgdal • バイナリパッケージが無い • 自分でmakeしろってか? – Windows : XML • UTF-8が基本の世界ではプログラムが面倒 • インナークラス難しい。私の勉強不足? 今後はGoogleMapに手を出してみたい 24
  • 26. 資料 ############################# # kmlFunctions.r ver 0.2.1 # fumihiko makiyama ############################# ## kmlAltitudeNode() kmlAltitudeNode<-function(doc,data,fillcolor,linecolor,extrude="1",tessellate="1",altitudeMode="absolute"){ kmlnode <- xmlRoot(doc) node0<-kmlnode[[1]] kmlver5<-'http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2' kmlnode<-xmlNode("kml",node0,attrs=c(xmlns=kmlver5)) len1<-length(node0[["Folder"]]) for(i in 3:len1){ node1<-node0[["Folder"]][[i]][["MultiGeometry"]][["Polygon"]] node1<- addChildren(node1,xmlNode("extrude",extrude),xmlNode("tessellate",tessellate),xmlNode("gx:altitudeMode",altitu deMode)) node2<-node0[["Folder"]][[i]][["Style"]][["PolyStyle"]] node2<-xmlNode("PolyStyle",xmlNode("color",fillcolor[i-2])) #linecolor node3<-node0[["Folder"]][[i]][["Style"]][["LineStyle"]] node3<-xmlNode("LineStyle",xmlNode("color",linecolor)) #polygon len2<-length(node0[["Folder"]][[i]][["MultiGeometry"]][["Polygon"]]) for(j in 1:len2){ x1<-xmlValue(node1[[j]][[1]][[1]]) x2<-rev(unlist(strsplit(x1," "))) x3<-paste(x2,data[[i-2]],sep=",",collapse=" ") node1[[j]][[1]][[1]]<-xmlNode("coordinates",x3) } #replace node node0[["Folder"]][[i]][["MultiGeometry"]][["Polygon"]]<-node1 node0[["Folder"]][[i]][["Style"]][["PolyStyle"]]<-node2 node0[["Folder"]][[i]][["Style"]][["LineStyle"]]<-node3 kmlnode[[1]]<-node0 } return(kmlnode) 26 }