#shp2kml ver0.3
library(maptools)
#群馬県ShapeFileの作成
jpn <- read.shape("C:/GISdata/japan_ver61.shp")
jpndata <- jpn$att.data
jpnpoly <- Map2poly(jpn,region.id=attr(jpn,"region.id"))
gunmadata <- subset(jpndata,jpndata$PREF=="群馬県")
gunmapoly <- subset(jpnpoly,jpndata$PREF=="群馬県")
write.polylistShape(gunmapoly,gunmadata,"C:/GISdata/gunma61")
#デフォルトパラメータ
PolygonColor<-"7f00ff00"#Polygon色 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 #視点の高度
Altitude<-"0" #ポリゴンの高度
#KMLタグ
XMLH<-c("")
KMLH<-c(XMLH,"")
KMLF<-""
DOCH<-c("","","","gunma","")
DOCF<-c("","")
LNSTYL<-c("","",LineColor,"","")
OUTLN<-c("",Outline,"")
FIL<-c("",Fill,"")
POLYSTYL<-c("","",PolygonColor,"",OUTLN,FIL,"")
STYL<-c("")
PLMKH<-c("","","","",STYL)
PLMKF<-c("")
EXTR<-c("1")
ALTI<-c("relativeToGround")
POLYH<-c("1","",EXTR,ALTI,"","")
POLYF<-c("","","")
COODH<-""
COODF<-""
#視点タグ
LAT<-c("",Latitude,"")
LON<-c("",Longitude,"")
TLT<-c("0")
RENG<-c("",Range,"")
LOOKAT<-c("","0",LAT,LON,TLT,RENG,"")
#群馬県ShapeFile読み込み
Mapobject<-read.shape("c:/GISdata/gunma61.shp")
Mapdata<-Mapobject$att.data
#群馬県表示データの読み込み
aged <- read.delim("C:/GISdata/agedprop.txt")
Mapdata <- merge(Mapdata,aged,sort=F,by="JCODE")
#レジェンドデータの作成
DD <- Mapdata$AP2006
cutnum<-16
classes <- cut(DD,seq(min(DD),max(DD),length=cutnum+1),include.lowest=T)
cols <- rev(heat.colors(cutnum))
cols<-substr(cols[classes],2,9)
cols<-paste(substr(cols,7,8),substr(cols,5,6),substr(cols,3,4),substr(cols,1,2),sep="") #色をKML用へ変換
LegColor<-data.frame(classes=classes,col=cols)
#Mapdataへのレジェンドデータの結合
Mapdata <- cbind(Mapdata,LegColor)
#ShapeObjtct数取得
n<-length(Mapobject$Shapes)
xxx<-NULL
for(j in 1:n){
x9<-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])
#ポリゴンの高さを設定
Altitude<-Mapdata$AP2006[j]*500
#ポリゴンの色(塗り、線)の指定
PolygonColor<-as.character(Mapdata$col[j])
LineColor<-as.character(Mapdata$col[j])
POLYSTYL<-c("","",PolygonColor,"",OUTLN,FIL,"")
LNSTYL<-c("","",LineColor,"","")
STYL<-c("")
#Objectに対応する市町村名取得(s-jis=>utf-8変換)
FolderName<-iconv(as.character(Mapdata$TOWN2[j]),"shift-jis","utf-8")
FolderName2<-paste(jcode,FolderName,sep="")
#市町村&市町村コードをPlacemarkの名前に追加
PLMKH<-c("","",FolderName2,"",STYL)
#Object内の複数ポリゴン処理(島処理)
xx=NULL
for(i in 1:n4){
x8<-NULL
x<-Mapobject$Shapes[[j]]$verts[(n31[i]+1):n31[i+1],1:2]
x[,1]<-rev(x[,1]) #ClockWiseの修正(ポリゴン点を時計回りに修正)
x[,2]<-rev(x[,2]) #反時計回りだと透過しない(黒くなる)ため。
x2<-cbind(x,paste(as.character(x[,1]),",",as.character(x[,2]),",",Altitude,sep=""))
x3<-x2[,3]
x4<-c(PLMKH,POLYH,COODH,x3,COODF,POLYF,PLMKF)
x5<-c(xx,x4)
xx<-x5
}
x6<-c(xxx,x5)
xxx<-x6
}
x7<-x6
x8<-c(KMLH,DOCH,x7,DOCF,KMLF)
x9<-paste(x8,sep="",collapse=" ")
write.table(x8,"c:/GISdata/gunma.kml",quote=F,append=F,col.name=F,row.name=F)