### ShpeFileからBigQuery用のWKTを作る # 目的:Google datapotalでの行政界ポリゴンがひどすぎる(超きたない)から自分で作る # ESRI市区町村界ShapeFileを使っているが、この方法では規定違反になるので取り扱い注意 # library(sf) x <- st_read("japan_ver821/japan_ver821.shp") x2 <- x$geometry x3 <- st_as_text(x2) z2 <- x$JCODE z3 <- as.data.frame(z2) df1 <- cbind(z3,x3) df2 <- na.omit(df1) write.table(df2,"japan_ver821.csv",row.names = F,col.names = F, sep = ",") ## GCPでの後処理 # csvをGCStregeで読み込んでからBigQueryでテーブル作成 # # BigQueryへ読み込むスキーマ # JCODE STRING NULLABLE # WKT_TEXT STRING NULLABLE # 一旦WKT_TEXTをSTRINGで読み込んでから、クエリでWKTに変換すること。直接やるとエラーになるため(後述) # # WKTの変換クエリ # SELECT *,ST_GEOGFROMTEXT(WKT_TEXT,make_valid => TRUE) AS WKT FROM `XXXX.XXXX` # make_valid => TRUE でポリゴンがループしている部分のエラーを修正
※ESRIのシェープファイルはMULTIPOLYGONになっています。JCODEとマルチポリゴンが一対です。
なぜ小さくするのか。国土地理院の行政区データは細かく出来ているが、データポータルでWKTを表示する場合ポリゴンのポイント総数が10000ポイント以内という制限があるためローポリ化して表示させる。
方法はマップシェーパーを使う
やりかた
※CRANにrmapshperがあるので、使えるはずだが、手動でやっても簡単
小さくした後のshp,shx,dbfを使う(ここでは沖縄の行政区データ)
library(sf) #library(rmapshaper) xx <- st_read("N03-20_47_200101_2/N03-20_47_200101.shp") xx2 <- xx$geometry xx3 <- st_as_text(xx2) zz2 <- xx$N03_007 zz3 <- as.data.frame(zz2) ddf1 <- cbind(zz3,xx3) ddf2 <- na.omit(ddf1) write.table(ddf2,"okinawa.csv",row.names = F,col.names = F, sep = ",")
※国土地理院のシェープファイルはPOLYGONになっています。そのため同じJCODEが複数あります。
2473