#shp2kmlDirect ver0.2 library(maptools) library(rcom) GEI<-comCreateObject("GoogleEarth.ApplicationGE") #各種パラメータ PolygonColor<-"7f00ff00"#Polygon色 構造( aabbggrr ) aa:アルファチャンネル bb:blue gg:green rr:red LineColor<-"ff00ffff"#Line色 fill<-"1"#ポリゴン内部を塗る 1:true 0:False outline<-"1"#アウトライン化 1:true 0:False Latitude<-36.5 #latitude設定 Longitude<-139 #longitude設定 Range<-160000 #range設定 #kmlTAG kmlheader<-c("","","") Style<-c("") header<-c("","gunma.kml",Style) footter<-c("") PolygonH<-c("1","","1","","") PolygonF<-c("","","") coordinatesH<-"" coordinatesF<-"" Lookat<-c("","0","",Latitude,"","",Longitude,"","0","",Range,"","") #shapefile読み込み Mapobject<-read.shape("C:/GISdata/gunma.shp") Mapdata<-Mapobject$att.data #list数取得 n<-length(Mapobject$Shapes) for (j in 1:n){ x10<-NULL #object内のポリゴン点の数取得 n2<-length(Mapobject$Shapes[[j]]$verts[,1]) #object内の複数ポリゴン(島など)に対応するリストの取得 n3<-Mapobject$Shapes[[j]]$Pstart n31<-c(n3,n2) #最終点追加 #object内の分離されたポリゴン数取得 n4<-length(Mapobject$Shapes[[j]]$Pstart) #objectに対応する市町村コード取得 jcode<-as.character(Mapdata$JCODE[j]) #objectに対応する市町村名取得(s-jis=>utf-8変換) filename2<-iconv(as.character(Mapdata$TOWN2[j]),"shift-jis","utf-8") filename3<-jcode #市町村&市町村コードをPlacemarkの名前に追加 header<-c("","",filename3,"",Style) #object内の複数ポリゴン処理(島処理) for(i in 1:n4){ x9<-NULL x<-Mapobject$Shapes[[j]]$verts[(n31[i]+1):n31[i+1],1:2] x[,1]<-rev(x[,1]) #clockwise(ポリゴン点を時計回りに修正:3Dポリゴン透過度に影響) x[,2]<-rev(x[,2]) #反時計回りだと透過しない(黒くなる)ため。 x2<-cbind(x,paste(as.character(x[,1]),as.character(x[,2]),"0",sep=",")) x3<-paste(x2[,3],collapse=" ") x4<-c(coordinatesH,x3) x5<-c(x4,coordinatesF) x6<-c(PolygonH,x5) x7<-c(x6,PolygonF) x8<-c(header,x7) x9<-c(x8,footter) x10<-paste(x9,collapse="") #kmlヘッダ追加 x11<-c(kmlheader,x10) #フッタ追加 x12<-c(x11,"","") x13<-paste(x12,collapse="") comInvoke(GEI,"LoadKmlData",x13) } }