#shp2kml ver0.3.5 #library宣言 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") #市町村中心点取得 #jpnxy <- get.Pcent(jpn) #群馬県市町村中心点取得 #市町村名プロット用 #XP <- subset(jpnxy[,1],jpndata$PREF=="群馬県") #YP <- subset(jpnxy[,2],jpndata$PREF=="群馬県") #デフォルトパラメータ 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,"") #ScreenOverlay function SCRNAM<-c("","Legend","") SCRHRF<-c("","C:/GISdata/Legend.png","") SCROVRXY<-c("") SCRXY<-c("") SCRSIZ<-c("") SCROVR<-c("",SCRNAM,"",SCRHRF,"",SCROVRXY,SCRXY,SCRSIZ,"") #群馬県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]),"CP932","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,SCROVR,DOCF,KMLF) x9<-paste(x8,sep="",collapse=" ") #オーバーレイ用凡例 png("c:/GISdata/Legend.png",width=160,height=350,bg="black",pointsize=10) par(mai=c(0,0,0,0)) FieldLabel<-iconv(" 高齢者比率(65)","","CP932") legcols <- heat.colors(cutnum) plot(1:5,0:4,ann=F,type='n') legend(1,4,legend=names(rev(table(classes))),fill=legcols,title=FieldLabel,bg="black",text.col="white",cex=1.3,) text(3,0,labels="群馬県",col="white") dev.off() write.table(x8,"c:/GISdata/gunma.kml",quote=F,append=F,col.name=F,row.name=F)