↓これをWindowsでやってみると、unzipは問題ないんですが、そのあと日本語名のレイヤーを読み込むところでつまづきました。
いろいろ試してたらなんかできたのでメモ。
ファイルをダウンロード
tmp_dir <- tempdir() zip_file <- file.path(tmp_dir, "24kuikishape.zip") zip_dir <- file.path(tmp_dir, "24kuikishape") download.file("http://www.city.osaka.lg.jp/contents/wdu090/opendata/mapinfo/24kuikishape.zip", destfile = zip_file) #> trying URL 'http://www.city.osaka.lg.jp/contents/wdu090/opendata/mapinfo/24kuikishape.zip' #> Content type 'application/zip' length 166803 bytes (162 KB) #> downloaded 162 KB unzip(zip_file, exdir = zip_dir) list.files(zip_dir) #> [1] "24区画像.dbf" "24区画像.prj" "24区画像.sbn" "24区画像.sbx" "24区画像.shp" "24区画像.shp.xml" "24区画像.shx"
普通に読み込んでみる
library(rgdal) layers <- ogrListLayers(zip_dir) layers #> [1] "24蛹コ逕サ蜒\x8f" #> attr(,"driver") #> [1] "ESRI Shapefile" #> attr(,"nlayers") #> [1] 1
文字化け。なんかあやしげな雰囲気。
o <- readOGR(zip_dir, layer = layers[1]) #> Error in nchar(layer) : invalid multibyte string 1
やっぱだめでした。ですよねー。。
エンコーディングを変えてみる
これを読んで、characterにはEncoding
というのがあるのを知りました。やってみます。
Encoding(layers[1]) #> [1] "unknown" Encoding(layers[1]) <- "UTF-8" layers #> [1] "24区画像" #> attr(,"driver") #> [1] "ESRI Shapefile" #> attr(,"nlayers") #> [1] 1
おっ、文字化けしてない。これは期待できるかも...?
o <- readOGR(zip_dir, layer = layers[1]) #> OGR data source with driver: ESRI Shapefile #> Source: "C:\windows\TEMP\RtmpKeV3r1/24kuikishape", layer: "24区画像" #> with 24 features #> It has 5 fields #> Error in make.names(fldnms, unique = TRUE) : invalid multibyte string 3
やっぱだめです。。
iconvしてみる
o <- readOGR(zip_dir, layer = iconv(layers[1], from = "UTF-8", to = "Shift_JIS")) #> Error in ogrInfo(zip_dir, layer = iconv(layers[1], from = "UTF-8", to = "Shift_JIS")) : #> Cannot open layer
だめでした。
ロケールを変えてみる
ちょっと前にこんな記事がありました。やってみます。
Sys.setlocale(locale="C") layers <- ogrListLayers(zip_dir) layers #> [1] "24蛹コ逕サ蜒・ #> attr(,"driver") #> [1] "ESRI Shapefile" #> attr(,"nlayers") #> [1] 1
さっきとは違う化け方。謎です。
Encoding(layers[1]) <- "UTF-8" o <- readOGR(zip_dir, layer = layers[1]) #> OGR data source with driver: ESRI Shapefile #> Source: "C:\windows\TEMP\RtmpKeV3r1/24kuikishape", layer: "24区画像" #> with 24 features #> It has 5 fields
なんかよく分かりませんが読み込めました。。
ただし、これではまだ読み込めたものの文字化けしています。
head(o@data) #> ATTR1 ATTR2 X............... X................1 X............ #> 0 27104 豁、闃ア蛹コ 0 <NA> 0 #> 1 27118 蝓取擲蛹コ 0 <NA> 0 #> 2 27116 逕滄㍽蛹コ 0 <NA> 0 #> 3 27106 隘ソ蛹コ 0 <NA> 0 #> 4 27122 隘ソ謌仙玄 0 <NA> 0 #> 5 27124 鮓エ隕句玄 0 <NA> 0
さらにエンコーディングを指定しないといけないみたいです。
o <- readOGR(zip_dir, layer = layers[1], encoding = "Shift_JIS") head(o@data) #> ATTR1 ATTR2 X.Z...R...h X.......... X...R...h #> 0 27104 此花区 0 <NA> 0 #> 1 27118 城東区 0 <NA> 0 #> 2 27116 生野区 0 <NA> 0 #> 3 27106 西区 0 <NA> 0 #> 4 27122 西成区 0 <NA> 0 #> 5 27124 鶴見区 0 <NA> 0
うーん。いじれるポイントは分かってきた気もしますが、めんどくさすぎる。