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-BubblePlotのGoogleMapでの表示

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)

アクセス数:

5767 人


添付ファイル: fileshp2kmlver035.txt 3114件 [詳細] filemeuse2.JPG 2837件 [詳細] filebnda_trans_table.zip 2293件 [詳細] filekanto.JPG 5067件 [詳細] filemoveToCoordinates.html 3719件 [詳細] fileshp2kmlver035.JPG 3221件 [詳細] fileshp2kmlDirectver02.txt 3274件 [詳細] filegeplugin2.html 3270件 [詳細] filechibaprizm.kmz 4310件 [詳細] filegreenearth.pdf 3124件 [詳細] filegeroot.zip 2537件 [詳細] filegetCoods.html 3838件 [詳細] filesaitama2.kml 4450件 [詳細] filewriteogr2.JPG 2755件 [詳細] filemeuse3d.JPG 2561件 [詳細] filegeroot032.zip 2989件 [詳細] filemeuse.kmz 3477件 [詳細] filechiba.kmz 4437件 [詳細] filekmlPolygon1.PNG 2719件 [詳細] filege4b_font_ja.zip 3634件 [詳細] filekmlPolygon2.PNG 2511件 [詳細] filemeuse3.JPG 2867件 [詳細] file3大死因cluster2.kml 3641件 [詳細] filemeuse.JPG 2970件 [詳細] filelegendc.jpg 1474件 [詳細] filegeroot031.zip 1747件 [詳細] filege_font.zip 2781件 [詳細] filegeplugin.JPG 2570件 [詳細] filegetCoods.hta 3303件 [詳細] fileGERexcel.jpg 1044件 [詳細] filegeplugin3.hta 2746件 [詳細] filexml1.JPG 2596件 [詳細] filejapanae2000.zip 3347件 [詳細] filelegend.jpg 1487件 [詳細] filejapanaem2000.JPG 4794件 [詳細] fileshp2kml03.jpg 3757件 [詳細] filejp.JPG 4136件 [詳細] filegeplugin2.hta 2766件 [詳細] filegeplugin1.JPG 2791件 [詳細] fileipodtouch.jpg 2687件 [詳細] filekmlOverlay.JPG 3237件 [詳細] fileJapanPrefecture.kmz 5056件 [詳細] filesaitama.kmz 4437件 [詳細] filekmlLine1.PNG 2655件 [詳細] filegeplugin2.JPG 2680件 [詳細] fileshp2kmlver03.txt 2944件 [詳細] fileja.zip 7405件 [詳細] filegetCoodsToRplot.hta 3323件 [詳細] filegeplugin3.html 2984件 [詳細] file3clust.JPG 3314件 [詳細] filelegendAEM1995.png 1661件 [詳細] filesaitamaAEM1995.JPG 5548件 [詳細] filekantoinjapan.kmz 4599件 [詳細] filemoveToCoordinates.hta 3353件 [詳細] filegeplugin1.html 3068件 [詳細] filechange-polygon-color.kml 3887件 [詳細] filetest.html 1669件 [詳細] filesaitama.kml 3252件 [詳細] fileScreenShot.hta 3534件 [詳細] filegunma2.jpg 2608件 [詳細] filegunma.kmz 4116件 [詳細] filekmlOverlayVector.JPG 1623件 [詳細] fileandroid.JPG 2632件 [詳細] filehclust.jpg 1526件 [詳細] fileScreenShot.html 3553件 [詳細] filegetCoodsToRplot.html 3568件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:16