LINK:[GoogleEarthとR][ShapeFileライブラリ][kmlラボ][空間的なデータの分析][Rでジオコーディング][RでGPS]


GoogleEarth [http://earth.google.com/]はGoogleが無料で公開している3D-GIS用のソフトです。現在、Windows版・Mac版・Linux版が公開されています。
Rを用いて、インタラクティブな操作によって3D-GISを作成するのは、今のところほぼ不可能ですが、
GUI部分をGoogleEarthにまかせて、バックエンド処理をRで行うと色々な場面で結構使えるのではないかと思いつきました。


目次


論文引用・書籍等に引用する場合の著作権についての連絡>>okinawa


目的

GoogleEarth [http://earth.google.com/]はGoogleが無料で公開している3D-GIS用のソフトです。
現在、Windows版・Mac版・Linux版が公開されています。
Rを用いて、インタラクティブな操作によって3D-GISを作成するのは、今のところほぼ不可能です。
しかし、GUI部分をGoogleEarthにまかせて、バックエンド処理をRで行うと色々な場面で結構使えるのではないかと思いつきました。
なお地理データについてはShapeFileライブラリにて公開しているESRIShapeFileを用います。
「本ページにて公開しているShapeFileデータの作成に当たっては、ESRIジャパン株式会社の全国市区町村界データを使用しました。
本データの著作権はESRIジャパン株式会社に帰属します。」

ESRIJapan様が公開されている全国市区町村境界データ
[全国市区町村境界データ]http://www.esrij.com/products/gis_data/japanshp/japanshp.html
[shapefileの仕様書]http://www.esrij.com/products/gis_data/shape/index.html

コメント欄 (最新)


GoogleEarthダウンロード&関連情報リンク

GoogleEarth&GoogleEathPluginダウンロード

http://earth.google.co.jp/
http://code.google.com/apis/earth/ New!
GoogleEarthPlugin用リンクコード作成

KMLリファレンスマニュアル&GoogleEarth COM API

http://code.google.com/apis/kml/documentation/index.html
http://code.google.com/intl/en/apis/kml/documentation/kmlreference.html
http://earth.google.com/comapi/

参考

GoogleEarthBlog
GoogleMap
巨匠net
R and GoogleEarth OMEGAHATにありました。

CoolApplications

KMLFACTBOOK:

EarthAtlas:

GoogleSketchUp:

MapWindowGIS&Shape2Earth:~

Unype:

Rを用いたGoogleEarthの活用

rcom パッケージ

rcom:http://cran.md.tsukuba.ac.jp/web/packages/rcom/rcom.pdf

rcomを使ってRからGoogleEarthを直接コントロールする(Windows Only)

RDCOM/RCOM解説参照。
rcomは常に最新版にupdateしておいてください。

rcomを使うとRからGEが簡単にコントロールできるようになります。
バージョンの取得:

library(rcom)
x<-comCreateObject("GoogleEarth.ApplicationGE")
comGetProperty(x,"VersionAppType") #アプリケーションタイプ
comGetProperty(x,"VersionMajor") #バージョン(メジャー番号)
comGetProperty(x,"VersionMinor") #バージョン(マイナー番号)
comGetProperty(x,"VersionBuild") #バージョン(ビルド番号)

視点の移動:

library(rcom)
x<-comCreateObject("GoogleEarth.ApplicationGE")
cam<-comCreateObject("GoogleEarth.CameraInfoGE")
comSetProperty(cam,"FocusPointLatitude","35.3874") #フォーカス−緯度 
comSetProperty(cam,"FocusPointLongitude","139.4285") #フォーカス−経度
comSetProperty(cam,"Range","100") #フォーカスからの距離(上空:m)
comSetProperty(cam,"Tilt","70") #傾き(度)
comSetProperty(cam,"Azimuth","-49") #方位(度)
comInvoke(x,"SetCamera",cam,"0.1") #実行 

カメラの位置取得:

library(rcom)
x<-comCreateObject("GoogleEarth.ApplicationGE") 
cam0<-comInvoke(x,"GetCamera","1")
comGetProperty(cam0,"FocusPointLatitude") #フォーカス−緯度 
comGetProperty(cam0,"FocusPointLongitude") #フォーカス−経度 
comGetProperty(cam0,"FocusPointAltitude") #フォーカス−高度(m) 
comGetProperty(cam0,"FocusPointAltitudeMode") #フォーカス−高度の基準 
comGetProperty(cam0,"Range") #フォーカスからの距離(上空:m) 
comGetProperty(cam0,"Tilt") #傾き(度) 
comGetProperty(cam0,"Azimuth") #方位(度)

サーチ:

library(rcom)
x<-comCreateObject("GoogleEarth.ApplicationGE") 
search<-comCreateObject("GoogleEarth.SearchControllerGE")
comInvoke( search,"Search","東京タワー") 

KMLの図形等の直接書き込み:

library(rcom)
KMLData<-paste('<?xml version="1.0" encoding="UTF-8"?> ',
'<kml xmlns="http://earth.google.com/kml/2.2">',
'<Document>',
'<name>poly.kml</name>',
'<Placemark>',
'<name>poly</name>',
'<styleUrl>#msn_ylw-pushpin</styleUrl>',
'<Polygon>',
'<tessellate>1</tessellate>',
'<altitudeMode>relativeToGround</altitudeMode>',
'<outerBoundaryIs>',
'<LinearRing>',
'<coordinates>',
'142.528104678677,36.84729384409629,22606  142.0451584602107,31.51918420212569,22606 148.6995389862778,30.67971755270119,22606 149.6771463245612,36.05082231833893,22606 142.528104678677,36.84729384409629,22606', 
'</coordinates>',
'</LinearRing>',
'</outerBoundaryIs>',
'</Polygon>',         
'</Placemark>',
'</Document>',
'</kml>',sep='')
KMLData2 <-paste("<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
"<kml xmlns=\"http://earth.google.com/kml/2.1\">",
"<Placemark>",
"<name>Geneva</name>",
"<LookAt>",
"<longitude>139.4285</longitude>",
"<latitude>35.3874</latitude>",
"<altitude>0</altitude>",
"<range>316.3662914479763</range>",
"<tilt>0</tilt>",
"<heading>6.199453434125936</heading>",
"</LookAt>",
"<Point>",
"<coordinates>6.156019183879536,46.20743386584116,0</coordinates>", 
"</Point>",
"</Placemark>",
"</kml>",sep="")
GEI<-comCreateObject("GoogleEarth.ApplicationGE")
comInvoke(GEI,"LoadKmlData",KMLData)
comInvoke(GEI,"LoadKmlData",KMLData2)  

RからGEへのShapeFileポリゴンの直接書き込み:

LoadKmlDataで大きなKMLを渡すとGEがハングしますので、細切れにして渡しています。
事前にGEを起動して、群馬県あたりを表示しておいてください。
また、この方法ではフォルダ名やファイル名に日本語は使えないようです。

sp:maptools:rgdalパッケージ

sp(空間データ用クラスおよびメソッド)パッケージ中のオブジェクト一覧
maptools(Maptools)パッケージ中のオブジェクト一覧
rgdal(GDAL(Geospatial Data Abstraction Library, 地理空間データ抽象ライブラリ)のバインディング)パッケージ中のオブジェクト一覧
maptools:http://cran.md.tsukuba.ac.jp/web/packages/maptools/maptools.pdf
sp:http://cran.md.tsukuba.ac.jp/web/packages/sp/sp.pdf
rgdal:http://cran.md.tsukuba.ac.jp/web/packages/rgdal/rgdal.pdf

RでShapeFileからkmlファイルを直接作成する方法(基本編)

空間的なデータの分析よりGISdata.zipをダウンロードし、C:直下に解凍する。

shp2kml03.jpg

凡例オーバーレイ付き

shp2kmlver035.JPG

ラスターオーバーレイ

maptools:kmlOverlay


SpatialPointsDataFrameデータを用いて、PNG・KMLを出力し、GoogleEarthで表示させます。
KMLと作成されたPNGはC:直下に落ちてきますので、kmlOverlay.kmlをダブルクリックし、GEを起動してください。(注:rgdalも必要です。WINのみ実行可。)

library(maptools)
library(rgdal)
opt_exask <- options(example.ask=FALSE)
qk <- SpatialPointsDataFrame(quakes[, c(2:1)], quakes)
proj4string(qk) <- CRS("+proj=longlat")
tf <- "c:/kmlOverlay"
SGqk <- GE_SpatialGrid(qk)#<=ここがミソ
png(file=paste(tf, ".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, ".kml", sep=""), paste(tf, ".png", sep=""))
kmlOverlay.JPG

kmlOverlayNode(自作S4クラス)

kmlOverlayでは機能が足りないので作成しました。
kmlOverlayNodeクラスには、SpatialPointsDataFrameとGE_SGクラスを格納し、いくつかのパラメータも設定できるようにしました。
また、show()とwritekml()メソッドを設定しました。show()は生成されたインスタンスの内容の表示、writekml()はkmlの生成・出力を行います。

#kmlOverlayNodeClass ver0.1.4
setClass("kmlOverlayNode",
  representation = representation(sppdf="SpatialPointsDataFrame",
  item="character",
  range="numeric",
  kmlpath="character",
  pngpath="character",
  color="character",
  pch="numeric",
  pointsize="numeric",
  GE_SG="GE_SG"),
  prototype = prototype(sppdf=NULL,
  item="",
  range=0,
  kmlpath="c:/",
  pngpath="c:/",
  color="green",
  pch=19,
  pointsize=24,
  GE_SG=NULL))
setMethod("show",signature(object="kmlOverlayNode"),
  function(object){
    sppdf<-object@sppdf
    i<-object@item
    r<-object@range
    kp<-object@kmlpath
    pp<-object@pngpath
    col<-object@color
    ps<-object@pointsize
    pch<-object@pch
    gesg<-object@GE_SG
    cat("kmlOverlayNode::","\n")
    cat("\nSpatialPointsDataFrame:","\n")
    str(sppdf)
    cat("\nitem name:",i)
    cat("\nrange:",r)
    cat("\nkmlpath:",kp)
    cat("\npngpath:",pp)
    cat("\ncolor:",col)
    cat("\npch:",pch)
    cat("\npointsize:",ps)
    cat("\nGE_SG:","\n")
    str(gesg)
    })
writekml<-function(x)x
setGeneric("writekml")
setMethod("writekml",signature(x="kmlOverlayNode"),
function(x){
  sxml<-'<?xml version="1.0" encoding="UTF-8"?>'
  skml<-'<kml xmlns="http://earth.google.com/kml/2.2">';ekml<-"</kml>"
  sGroundOverlay<-"<GroundOverlay>";eGroundOverlay<-"</GroundOverlay>"
  sname<-"<name>";ename<-"</name>"
  nametag<-paste(sname,x@item,"(",x@color,")",ename,sep="")
  sIcon<-"<Icon>";eIcon<-"</Icon>"
  pngfilename<<-paste(x@pngpath,x@item,".png",sep="")
  pngfile<-paste("<href>",pngfilename,"</href>",sep="")
  viewBoundScale<-"<viewBoundScale>0.75</viewBoundScale>"
  altitude<-paste("<altitude>",x@range,"</altitude>",sep="")
  altitudeMode<-"<altitudeMode>absolute</altitudeMode>"
  sLatLonBox<-"<LatLonBox>";eLatLonBox<-"</LatLonBox>"
  north<-paste("<north>",x@GE_SG$ylim[['max']],"</north>",sep="")
  south<-paste("<south>",x@GE_SG$ylim[['min']],"</south>",sep="")
  east<-paste("<east>",x@GE_SG$xlim[['max']],"</east>",sep="")
  west<-paste("<west>",x@GE_SG$xlim[['min']],"</west>",sep="")
  outkml<-c(sxml,skml,sGroundOverlay,nametag,sIcon,pngfile,viewBoundScale,eIcon,altitude,altitudeMode,sLatLonBox,north,south,east,west,eLatLonBox,eGroundOverlay,ekml)
  outfile<-paste(x@kmlpath,x@item,".kml",sep="")
  write(outkml,outfile)
  png(file=paste(x@pngpath,x@item, ".png", sep=""), width=x@GE_SG$width,  height=x@GE_SG$height,bg="transparent",pointsize=x@pointsize)
  par(mar=c(0,0,0,0), xaxs="i", yaxs="i")
  plot(x@sppdf,pch=x@pch,cex=0.05*sqrt(x@sppdf[[x@item]]),col=x@color)
  dev.off()
  })

更新履歴:
2008/04/07 ver0.1.4 メソッドのwrite()をwritekml()に変更。R2.4.1,R2.5.1,R2.6.2にて生成確認。

kmlOverlayNodeクラスを利用したサンプル

(事前にkmlOverlayNodeクラスを作成しておくこと)

library(maptools)
library(rgdal)
qk <- SpatialPointsDataFrame(quakes[, c(2:1)], quakes)
proj4string(qk) <- CRS("+proj=longlat")
SGqk <- GE_SpatialGrid(qk)
kmlOVN<-new("kmlOverlayNode")
kmlOVN@sppdf<-qk
kmlOVN@GE_SG<-SGqk
kmlOVN@item<-"mag"
kmlOVN@range<-0
kmlOVN@pch<-3
kmlOVN@pointsize<-24*5
kmlOVN@color<-"red"
show(kmlOVN)
writekml(kmlOVN)

ベクターオーバーレイ

maptools:kmlLine

maptoolsのサンプルを実行。tempファイル内にkmlが作成される(拡張子なし)

kmlLine1.PNG

maptools:kmlPolygon

maptoolsのサンプルを実行。tempファイル内にkmlが作成される(拡張子なし)

kmlPolygon1.PNG

ごらんのようにポリゴンホールにもきちんと対応しています。

kmlPolygon2.PNG

rgdal:writeOGR

空間的なデータの分析からGISdata.zipをダウンロードし、C:直下に解凍してください。
ShapeFileからSpatialPolygonsDataFrameオブジェクトを作成し、直接KMLに変換します。
KMLはC:直下に落ちてきますので、kmlOverlayVector.kmlをダブルクリックし、GEを起動してください。(注:rgdalも必要です。WINのみ実行可。)

library(maptools)
library(rgdal)
x<-readShapePoly("c:/GISdata/gunma.shp")
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")
tf <- "c:/kmlOverlay"
writeOGR(x, paste(tf, "Vector.kml", sep=""), "gunma", "KML")
writeogr2.JPG

XMLパッケージ

XMLパッケージでwriteOGRで出力されたkmlデータを再構成=>kmlラボ

writeOGRで出力されたkmlデータをXMLパッケージを用いて再構成し、高さ、ポリゴンの色、ポリゴンの線の色を指定できるkmlAltitudeNode関数を作成しました。
(構造決めうちなので、ShapeFileライブラリのデータをwriteOGRでkml出力したデータしか使えないと思います)
注)R2.7.2は日本語が文字化けします。R2.6.2ですと日本語もうまく表示されます。

kmlAltitudeNode<-function(doc,data,fillcolor,linecolor){
library(XML)
#岡田先生の流用
findDoc <- function(x) {
		if(xmlName(x) == "Document") {
			return(x)
		}
		for(m in xmlChildren(x)) {
			n <- findDoc(m)
			if(!is.null(n)) {
				return(n)
			}
		}
		return(NULL)
}
node0 <- findDoc(xmlRoot(doc))
len1<-length(node0[[1]])
for(i in 2:len1){
   #altitude
   node1<-node0[[1]][[i]][[2]][[1]]
    node1<-addChildren(node1,xmlNode("extrude","1"),xmlNode("altitudeMode","relativeToGround"))
   #fillcolor
   node2<-node0[[1]][[i]][[3]][[2]]
   node2<-xmlNode("PolyStyle",xmlNode("color",fillcolor[i-1]))
   #linicolor
   node3<-node0[[1]][[i]][[3]][[1]]
   node3<-xmlNode("LineStyle",xmlNode("color",linecolor))
   #polygon
   len2<-length(node0[[1]][[i]][[2]][[1]])
   for(j in 1:len2){
      x1<-xmlValue(node1[[j]][[1]][[1]])
      x2<-rev(unlist(strsplit(x1," ")))
      x3<-paste(x2,data[[i-1]],sep=",",collapse=" ")
      node1[[j]][[1]][[1]]<-xmlNode("coordinates",x3)
   }
 node0[[1]][[i]][[2]][[1]]<-node1
 node0[[1]][[i]][[3]][[2]]<-node2
 node0[[1]][[i]][[3]][[1]]<-node3
 }
 return(node0)
}
#sample
library(XML)
doc <- xmlTreeParse("c:/kmlOverlayVector.kml")
data<-sample(1000:10000,39)
fillcolor<-c("ff000000","ffff0000","ff00ff00","ff0000ff","ffffff00","ffff00ff","ff00ffff","ffffffff","00000000")
linecolor<-"NA"
x<-kmlAltitudeNode(doc,data,fillcolor,linecolor)
saveXML(x,"c:/test.kml")
xml1.JPG

Examples

meuse川の土壌汚染に関するデータを用いた3D-BubblePlot

spパッケージではおなじみのdata(meuse)を用いてGoogleEarth上にバブルプロットを表示しました。
土壌内の重金属の種類はレイヤごとに分割して、高度を変化させました。

meuse.JPG
meuse2.JPG
meuse3.JPG
library(maptools)
library(rgdal)
data(meuse)
fkml<-function(itemname="",Range=0,north=0,south=0,east=0,west=0){
sxml<-'<?xml version="1.0" encoding="UTF-8"?>'
skml<-'<kml xmlns="http://earth.google.com/kml/2.2">';ekml<-"</kml>"
sGroundOverlay<-"<GroundOverlay>";eGroundOverlay<-"</GroundOverlay>"
sname<-"<name>";ename<-"</name>"
nametag<-paste(sname,itemname,ename,sep="")
sIcon<-"<Icon>";eIcon<-"</Icon>"
pngfilename<<-paste("c:/",itemname,".png",sep="")
pngfile<-paste("<href>",pngfilename,"</href>",sep="")
viewBoundScale<-"<viewBoundScale>0.75</viewBoundScale>"
altitude<-paste("<altitude>",Range,"</altitude>",sep="")
altitudeMode<-"<altitudeMode>absolute</altitudeMode>"
sLatLonBox<-"<LatLonBox>";eLatLonBox<-"</LatLonBox>"
north<-paste("<north>",north,"</north>",sep="")
south<-paste("<south>",south,"</south>",sep="")
east<-paste("<east>",east,"</east>",sep="")
west<-paste("<west>",west,"</west>",sep="")
 outkml<-c(sxml,skml,sGroundOverlay,nametag,sIcon,pngfile,viewBoundScale,eIcon,altitude,altitudeMode,sLatLonBox,north,south,east,west,eLatLonBox,eGroundOverlay,ekml)
outfile<-paste("c:/",itemname,".kml",sep="")
write(outkml,outfile)
}
meuse2<-SpatialPointsDataFrame(meuse[,c(1:2)],meuse)
proj4string(meuse2) <- CRS("+init=epsg:28992")
meuse3<-spTransform(meuse2,CRS("+proj=longlat"))
SGmeuse <- GE_SpatialGrid(meuse3)
itemname<-"cadmium"
fkml(itemname=itemname,Range=110,north=SGmeuse$ylim["max"],south=SGmeuse$ylim["min"],east=SGmeuse$xlim["max"],west=SGmeuse$xlim["min"])
png(file=paste("c:/",itemname, ".png", sep=""), width=SGmeuse$width, height=SGmeuse$height,bg="transparent",pointsize=24)
par(mar=c(0,0,0,0), xaxs="i", yaxs="i")
text<-paste('plot(meuse3,pch=19,cex=0.05*sqrt(meuse3$',itemname,'),col="orange")',sep='')
eval(parse(text=text))
dev.off()
itemname<-"zinc"
fkml(itemname=itemname,Range=80,north=SGmeuse$ylim["max"],south=SGmeuse$ylim["min"],east=SGmeuse$xlim["max"],west=SGmeuse$xlim["min"])
png(file=paste("c:/",itemname, ".png", sep=""), width=SGmeuse$width, height=SGmeuse$height,bg="transparent",pointsize=24)
par(mar=c(0,0,0,0), xaxs="i", yaxs="i")
text<-paste('plot(meuse3,pch=19,cex=0.05*sqrt(meuse3$',itemname,'),col="green")',sep='')
eval(parse(text=text))
dev.off()
itemname<-"lead"
fkml(itemname=itemname,Range=90,north=SGmeuse$ylim["max"],south=SGmeuse$ylim["min"],east=SGmeuse$xlim["max"],west=SGmeuse$xlim["min"])
png(file=paste("c:/",itemname, ".png", sep=""), width=SGmeuse$width, height=SGmeuse$height,bg="transparent",pointsize=24)
par(mar=c(0,0,0,0), xaxs="i", yaxs="i")
text<-paste('plot(meuse3,pch=19,cex=0.05*sqrt(meuse3$',itemname,'),col="cyan")',sep='')
eval(parse(text=text))
dev.off()
itemname<-"copper"
fkml(itemname=itemname,Range=100,north=SGmeuse$ylim["max"],south=SGmeuse$ylim["min"],east=SGmeuse$xlim["max"],west=SGmeuse$xlim["min"])
png(file=paste("c:/",itemname, ".png", sep=""), width=SGmeuse$width,  height=SGmeuse$height,bg="transparent",pointsize=24)
par(mar=c(0,0,0,0), xaxs="i", yaxs="i")
text<-paste('plot(meuse3,pch=19,cex=0.05*sqrt(meuse3$',itemname,'),col="yellow")',sep='')
eval(parse(text=text))
dev.off()

出来上がった、zinc.kml,cadmium.kml,copper.kml,lead.kmlをGEに読み込みます。

kmlOverlayNodeクラスで処理した場合

kmlOverlayNodeクラス(自作)を利用した作成した場合のコード(WINのみ)

library(maptools)
library(rgdal)
data(meuse)
meuse2<-SpatialPointsDataFrame(meuse[,c(1:2)],meuse)#SpatialPointsDataFrameに変換
proj4string(meuse2) <- CRS("+init=epsg:28992")#プロジェクションの指定
meuse3<-spTransform(meuse2,CRS("+proj=longlat"))#緯度・経度に変換
SGmeuse <- GE_SpatialGrid(meuse3)#GE上に投影するグリッドの生成
kmlOVN<-new("kmlOverlayNode")#kmlOverlayNodeのインスタンス生成
kmlOVN@sppdf<-meuse3#バブルプロット用データの設定
kmlOVN@GE_SG<-SGmeuse#グリッドデータの設定
items<-c("zinc","lead","copper","cadmium")#表示用アイテム名の指定
colors<-c("green","cyan","yellow","orange")#バブルポイントの色
ranges<-c(80,90,100,110)#GEにオーバーレイするレイヤの高度の設定
kmlOVN@pointsize<-24#バブルポイントの大きさ(デフォルト値24ポイント)
i<-0
for(i in 1:4){
kmlOVN@item<-items[i]
kmlOVN@color<-colors[i]
kmlOVN@range<-ranges[i]
show(kmlOVN)#インスタンスの内容の確認
writekml(kmlOVN)#kml出力実行
}

meuse川の土壌汚染3D-BubblePlotGoogleMapでの表示

http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q=http:%2F%2Fwww.okada.jp.org%2FRWiki%2F%3Fplugin%3Dattach%26refer%3DGoogleEarth%25A4%25C8R%26openfile%3Dmeuse.kmz&ie=UTF8&t=h&z=14

ipodTouchでmeuse川の土壌汚染3D-BubblePlotの表示

上記のURLをipodTouchのsafariからアクセスしただけです。ちにみに画面はiphoneSDKのシミュレータで表示しグラブで撮影しました。
ipodTouchでも同様に表示できています。いや〜それにしてもipodTouch便利です。安価な公衆無線LANが普及してくれたらと本気で思います。

ipodtouch.jpg

GoogleEarthPluginを利用したHTMLの作成

 Webで利用できるGoogleEarthです。GoogleEarthPluginは上記ダウンロードよりダウンロードして、インストールしてください。(現在Winのみ)
 ここでは、RでGoogleEarthPluginを利用したHTMLを作成します。

GoogleEarthPluginの起動(HTML)

geplugin1.JPG
h0<-c('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />')
h1<-c("<html>","<head>","<title>Hello Google Earth!</title>")
h2<-c("<!-- *** Replace the key below below with your own API key, available at  http://code.google.com/apis/maps/signup.html *** -->")
h3<-c('<script src="http://www.google.com/jsapi?key=ABQIAAAA7Qa-RE_JYtVliR9OTauOexScAlgT1OMB91Iojh4cvnPDirRWVBRkKoWJQNoMN19LbzuRx7z0aIWHTQ"></script>')
JS1<-c('<script>google.load("earth", "1");','var ge = null;')
JS2<-c('function init() {','google.earth.createInstance("map3d", initCallback, failureCallback);','}')
JS3<-c('function initCallback(object) {','ge = object;','ge.getWindow().setVisibility(true);','}')
JS4<-c('function failureCallback(object) {','}','</script>')
h5<-c("</head>","<body onload='init()' id='body'>","<center>","<div>Hello, Earth!</div>")
h6<-c("<div id='map3d_container'","style='border: 1px solid silver; height: 600px; width: 800px;'>")
h7<-c("<div id='map3d' style='height: 100%;'>","</div>","</center>","</body>","</html>")
text<-c(h0,h1,h2,h3,JS1,JS2,JS3,JS4,h5,h6,h7)
write(text,"c:/geplugin1.html")

C:直下に落ちてきます。

GoogleEarthPluginでmeuse川データ表示1

geplugin2.JPG
h0<-c('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />')
h1<-c("<html>","<head>","<title>Hello Google Earth!</title>")
h2<-c("<!-- *** Replace the key below below with your own API key, available at http://code.google.com/apis/maps/signup.html *** -->")
h3<-c('<script src="http://www.google.com/jsapi?key=ABQIAAAA7Qa-RE_JYtVliR9OTauOexScAlgT1OMB91Iojh4cvnPDirRWVBRkKoWJQNoMN19LbzuRx7z0aIWHTQ"></script>')
JS1<-c('<script>google.load("earth", "1");','var ge = null;')
JS2<-c('function init() {','google.earth.createInstance("map3d", initCallback, failureCallback);','}')
JS3<-c('function initCallback(object) {','ge = object;','ge.getWindow().setVisibility(true);','}')
JS4<-c('function failureCallback(object) {','}','</script>')
h5<-c("</head>","<body onload='init()' id='body'>","<center>","<div>Hello, Earth!</div>")
h6<-c('<iframe src="http://www.takitwithme.com/geiframe.html?url=http://www.okada.jp.org/RWiki/%3Fplugin%3Dattach%26refer%3DGoogleEarth%A4%C8R%26openfile%3Dmeuse.kmz&t=0&h=-13.00527898952727&z=6448.588586035891&ll=50.97369298594917,5.746012139557919" name="takit-geembed" frameborder="0" height="510" scrolling="auto" width="500"></iframe>')
h7<-c("</center>","</body>","</html>")
text<-c(h0,h1,h2,h3,JS1,JS2,JS3,JS4,h5,h6,h7)
write(text,"c:/geplugin2.html")

C:直下に落ちてきます。

GoogleEarthPluginでmeuse川データ表示2

meuse3d.JPG
h0<-c('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />')
h1<-c("<html>","<head>","<title>Hello Google Earth!</title>")
h2<-c("<!-- *** Replace the key below below with your own API key, available at http://code.google.com/apis/maps/signup.html *** -->")
h3<-c('<script src="http://www.google.com/jsapi?key=ABQIAAAA7Qa-RE_JYtVliR9OTauOexScAlgT1OMB91Iojh4cvnPDirRWVBRkKoWJQNoMN19LbzuRx7z0aIWHTQ"></script>')
h4<-c("<script>")
JS1<-c('google.load("earth", "1");','var ge = null;','function init() {','google.earth.createInstance("map3d", initCallback, failureCallback);','}')
JS2<-c('function initCallback(object) {','ge = object;',"var url = 'http://www.okada.jp.org/RWiki/?plugin=attach&refer=GoogleEarth%A4%C8R&openfile=meuse.kmz';","google.earth.fetchKml(ge, url, finished);","ge.getWindow().setVisibility(true);","var layerRoot = ge.getLayerRoot();","var terrainLayer = layerRoot.getLayerById(ge.LAYER_TERRAIN);","layerRoot.enableLayerById(ge.LAYER_TERRAIN, false);","layerRoot.enableLayerById(ge.LAYER_ROADS, true);","var navControl = ge.getNavigationControl();","navControl.setVisibility(ge.VISIBILITY_SHOW);","}")
JS3<-c("function failureCallback(object) {","}")
JS4<-c("function finished(object) {","if (!object) {","alert('bad or NULL kml');","return;","}","ge.getFeatures().appendChild(object);","var la = ge.createLookAt('');","la.set(50.97369298594917, 5.746012139557919, 8000, ge.ALTITUDE_MODE_RELATIVE_TO_GROUND, ","0, 0, 0); //180, 60, 500);","ge.getView().setAbstractView(la);","}")
f1<-c("</script>","</head>","<body onload='init()' bgcolor='#000000'>")
f2<-c("<div>",'<font style="font-family:arial;font-size:20pt;color:#ffffff;"><b>3D Meuse River Explorer</b> <font style="font-size:14pt;color:#aaaaaa">beta</font>&nbsp;&nbsp;&nbsp;','</div>')
f3<-c("<table>","<tr valign=top><td>","<div id='map3d_container'","style='border: 1px solid silver; height: 380px; width: 800px;'>","<div id='map3d' style='height: 100%;'></div>","</div>")
f4<-c('</td></tr>','</table>','</body>','</html>')
text<-c(h0,h1,h2,h3,h4,JS1,JS2,JS3,JS4,f1,f2,f3,f4)
write(text,"c:/geplugin3.html")

その他

GERライブラリ (内容が古くなっています)

GoogleEarth上で塗りわけ地図(主題図)を表示させるためのライブラリです。
R(D)COMを用いてExcelと連動できるGERexcel.xlsつき。

実行環境:
OS:WINXPSP2,WIN2000
R:R2.4.1,maptoolsv0.6-3
GERexcel.xlsを利用する場合は、RSrv201が必要
R(D)COMのダウンロードサイト(http://sunsite.univie.ac.at/rcom/ )-[Download Area]-[current]内RSrv201.exe
Excel:2000
GoogleEarth:4(2722)

利用データ:
okinawaDATA.csv:厚生労働省が公開しているデータ(平均寿命2000年男性・女性)を加工したもの
okinawa.shp:ESRIジャパン株式会社の全国市区町村界データ
「本データの作成に当たっては、ESRIジャパン株式会社の全国市区町村界データを使用しました。本データの著作権はESRIジャパン株式会社に帰属します。」

GERexcel.jpg


更新履歴:
2006/12/19 GERLib ver0.3.2 第3版公開
2006/09/26 GERLib ver0.3.1 第2版公開(Excel対応)
2005/12/01 japanae2000.zip 公開
2005/11/24 GERLib ver0.2.0 公開初版

ギャラリー

1.埼玉県1995年平均寿命男性(2005/10/23更新)

saitamaAEM1995.JPG


2.千葉県1995年平均寿命男性(2005/10/23更新)

プリズムマップ


3.群馬県1995年平均寿命男性(2005/10/23更新)


4.関東1995年平均寿命男性

kanto.JPG


5.日本全図2000年平均寿命男性(最新データです)(3Dポリゴンは使っていないので影響はないと思います)

japanaem2000.JPG

http://bbs.keyhole.com/ubb/download.php?Number=165657
ちょっとまだ不完全ですがUPしてみました。今回のものは凡例もRで作っています。けっこう重い(3M.kmz)ので注意。

6.日本全図2000年平均寿命女性
http://bbs.keyhole.com/ubb/download.php?Number=169274

解説)上記の図の凡例はクオンタイルを用いて16分割しています。
追伸)1995年および2000年の市区町村別生命表は、すでにベイズ統計学的手法によって推計値の算出が行われていました。

7.沖縄県市町村の3大死因クラスターの分布
沖縄県市町村の3大死因(がん・脳血管疾患・心疾患)のSMR(標準化死亡比:全国を100とした場合、100以上ならば死亡が多く100以下なら死亡が少ない)を1985−90−95−2000の4回15年間のデータをもとに階層化クラスター分析を行いました(ward法、平方ユークリッド距離)。(注:SMRはあくまでも全国に対する相対指標なので、時系列のデータとして用いた場合、妥当であるかどうかはわかりません。また、時系列データをクラスター分析していいものなのかどうかは十分検証できておりません。)

赤い地域は、死亡比が増加している地域です。青い地域は男性のみ死亡比が増加している地域です(女性は変化なし)。黄色は、死亡比が高い離島です。

3clust.JPG


日本県境データ


jp.JPG


GoogleEarthのPlaces内のJapan Prefectureを右クリックし、Edit...を選ぶと、県境の設定が出てきますので、ここで、高さ・色・塗るなどのプロパティを変更できます。

GEインタラクティブファンクション

GECOM_APIマニュアルが公開されました( http://earth.google.com/comapi/ )

(1)インタラクティブにポリゴンの色を変化させる
インタラクティブにポリゴンの色を変化させるためのGoogleEarthのコードです。
赤い玉と黄色い玉の上にマウスポインタを置いてみてください。
この方法をうまく使うと、塗りわけ色の色階級を逐次変化させながら見せることができますね。


(2)KEYHOLElib(GoogleEarthAPI)を用いて、IEとGEを連動させる(WINのみ)

IEとGEを連動させるサンプルです。IEから利用してください。
起動するとIEのセキュリティチェックが働きますが、許可してください。
また、RDCOMが必要なプログラムもありますので事前にRDCOM2.0をインストールしてください。
(htmlとhtaの両方を用意しましたので、使い分けてください。)

コメント欄アーカイブ

コメント欄(2008)

コメント欄(2007)

コメント欄(2006)

コメント欄(2005)

アクセス数:

2429 人


添付ファイル: fileJapanPrefecture.kmz 4481件 [詳細] filelegend.jpg 1208件 [詳細] fileshp2kmlDirectver02.txt 2636件 [詳細] filesaitama2.kml 3831件 [詳細] filemeuse2.JPG 2165件 [詳細] filemoveToCoordinates.hta 2804件 [詳細] filegunma2.jpg 1916件 [詳細] filekmlLine1.PNG 1905件 [詳細] filesaitama.kmz 3907件 [詳細] filemeuse3d.JPG 1879件 [詳細] filegetCoodsToRplot.html 2866件 [詳細] filewriteogr2.JPG 2128件 [詳細] filegeplugin2.html 2419件 [詳細] filemeuse.kmz 2832件 [詳細] filechiba.kmz 3882件 [詳細] filexml1.JPG 1939件 [詳細] filegetCoodsToRplot.hta 2703件 [詳細] filegeplugin3.hta 2192件 [詳細] filejapanae2000.zip 2865件 [詳細] fileshp2kmlver035.JPG 2556件 [詳細] filegeplugin1.JPG 2146件 [詳細] fileipodtouch.jpg 2063件 [詳細] filemoveToCoordinates.html 3060件 [詳細] filekmlPolygon1.PNG 1862件 [詳細] filege4b_font_ja.zip 3373件 [詳細] filegeplugin2.JPG 2057件 [詳細] filegeplugin1.html 2379件 [詳細] filegeplugin3.html 2209件 [詳細] filebnda_trans_table.zip 1911件 [詳細] filechange-polygon-color.kml 3347件 [詳細] filetest.html 1276件 [詳細] filegunma.kmz 3536件 [詳細] fileshp2kmlver035.txt 2570件 [詳細] filegetCoods.html 3052件 [詳細] fileja.zip 7150件 [詳細] filegetCoods.hta 2756件 [詳細] filemeuse.JPG 2252件 [詳細] filelegendc.jpg 1203件 [詳細] file3大死因cluster2.kml 3102件 [詳細] filejapanaem2000.JPG 4104件 [詳細] fileshp2kml03.jpg 3139件 [詳細] filejp.JPG 3480件 [詳細] filegeplugin2.hta 2192件 [詳細] filegeroot031.zip 1489件 [詳細] fileScreenShot.hta 2893件 [詳細] filegreenearth.pdf 2361件 [詳細] fileshp2kmlver03.txt 2291件 [詳細] filechibaprizm.kmz 3760件 [詳細] filege_font.zip 2526件 [詳細] filegeplugin.JPG 1970件 [詳細] filekmlOverlayVector.JPG 1329件 [詳細] file3clust.JPG 2707件 [詳細] filelegendAEM1995.png 1377件 [詳細] fileGERexcel.jpg 431件 [詳細] fileScreenShot.html 2882件 [詳細] filesaitama.kml 2980件 [詳細] filekmlOverlay.JPG 2572件 [詳細] filekantoinjapan.kmz 4048件 [詳細] filegeroot032.zip 2505件 [詳細] filekmlPolygon2.PNG 1828件 [詳細] filesaitamaAEM1995.JPG 4896件 [詳細] filegeroot.zip 2263件 [詳細] filekanto.JPG 4406件 [詳細] filehclust.jpg 1240件 [詳細] fileandroid.JPG 2056件 [詳細] filemeuse3.JPG 2196件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-01 (日) 01:15:59