2014-09-18 2 views
0

Я пытаюсь прочитать файл с заархивированной картой, который будет использоваться в качестве наложения карты на контурах, но я, похоже, не могу разархивировать файл. Ниже приведены команды, которые у меня есть;Как открыть распакованный файл карты

library(rgdal) 
setwd("C:/R_Progs") 
unzip("ZMB_adm.zip") 
zmb <- readOGR(dsn = "C:/R_Progs", layer = "ZMB_adm") 
zmb2 <- fortify(zmb) 

Я хочу использовать zmb2 в качестве базовой карты в своем заговоре. Почтовый файл и сценарий находятся в одном каталоге. Ниже то, что я получаю:

Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv) : 

Не удается открыть слой Но я увидеть UnZip команда работает, потому что я вижу 4 новые файлы с DBF, Prj, SHP и SHX расширений

Любая помощь будет оценена ,

ответ

3

Try:

unzip("ZMB_adm.zip", exdir="ZBM_adm") 
zmb <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM0") 

## OGR data source with driver: ESRI Shapefile 
## Source: "C:/R_Progs/ZBM_adm", layer: "ZMB_ADM0" 
## with 1 features and 2 fields 
## Feature type: wkbPolygon with 2 dimensions 

Параметр extdir будет держать шейпфайлы аккуратным в их собственном каталоге.

Причина ZMB_ADM0 является то, что существует несколько шейпа:

ZMB_ADM0.SHP 
ZMB_ADM1.SHP 
ZMB_ADM2.SHP 

каждое со своими слоями:

INFO: Open of `ZMB_ADM0.SHP' 
     using driver `ESRI Shapefile' successful. 
1: ZMB_ADM0 (Polygon) 

INFO: Open of `ZMB_ADM1.SHP' 
     using driver `ESRI Shapefile' successful. 
1: ZMB_ADM1 (Polygon) 

INFO: Open of `ZMB_ADM2.SHP' 
     using driver `ESRI Shapefile' successful. 
1: ZMB_ADM2 (Polygon) 

Какой вы используете, будет зависеть от того, какого уровня административных границ вам нужно :

library(ggplot2) 
library(grid) 

map0 <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM0") 
map1 <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM1") 
map2 <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM2") 

[email protected]$id <- rownames([email protected]) 
[email protected]$id <- rownames([email protected]) 
[email protected]$id <- rownames([email protected]) 

adm_labs0 <- data.frame(id=rownames([email protected]), [email protected]$ADM0) 
adm_labs1 <- data.frame(id=rownames([email protected]), [email protected]$ADM1) 
adm_labs2 <- data.frame(id=rownames([email protected]), [email protected]$ADM2) 

map_0 <- fortify(map0) 
map_1 <- fortify(map1) 
map_2 <- fortify(map2) 

map_0 <- merge(map_0, adm_labs0) 
map_1 <- merge(map_1, adm_labs1) 
map_2 <- merge(map_2, adm_labs2) 

map0 <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM0") 
map1 <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM1") 
map2 <- readOGR(dsn = "C:/R_Progs/ZBM_adm", layer="ZMB_ADM2") 

[email protected]$id <- rownames([email protected]) 
[email protected]$id <- rownames([email protected]) 
[email protected]$id <- rownames([email protected]) 

adm_labs0 <- data.frame(id=rownames([email protected]), [email protected]$ADM0) 
adm_labs1 <- data.frame(id=rownames([email protected]), [email protected]$ADM1) 
adm_labs2 <- data.frame(id=rownames([email protected]), [email protected]$ADM2) 

map_0 <- fortify(map0) 
map_1 <- fortify(map1) 
map_2 <- fortify(map2) 

map_0 <- merge(map_0, adm_labs0) 
map_1 <- merge(map_1, adm_labs1) 
map_2 <- merge(map_2, adm_labs2) 

g0 <- ggplot(map_0, aes(x=long, y=lat, group=group)) + 
    geom_polygon(color = "grey50", aes(fill=adm0), size=0.125)+ 
    labs(x="",y="")+ theme_bw() + labs(title="ADM0") + 
    coord_fixed() + theme(legend.position="none") 

g1 <- ggplot(map_1, aes(x=long, y=lat, group=group)) + 
    geom_polygon(color = "grey50", aes(fill=adm1), size=0.125)+ 
    labs(x="",y="")+ theme_bw() + labs(title="ADM1") + 
    coord_fixed() + theme(legend.position="none") 

g2 <- ggplot(map_2, aes(x=long, y=lat, group=group)) + 
    geom_polygon(color = "grey50", aes(fill=adm2), size=0.125)+ 
    labs(x="",y="")+ theme_bw() + labs(title="ADM2") + 
    coord_fixed() + theme(legend.position="none") 

grid.arrange(g0, g1, g2, ncol=3) 

d

+0

Вы действительно сделали больше, чем я просил. Большое спасибо, хотя у меня есть другая проблема, и у меня есть более одной версии R, поэтому я получаю сообщение об ошибке: «Ошибка: ggplot2 не знает, как обращаться с данными функции класса» –

+0

Просто еще один request @hrbrmstr, когда я запускаю ваш код выше как есть, я получаю: «Ошибка в' $ <-. data.frame' ('* tmp *', "id", value = c ("0", "1" , «2», «3»,: замена имеет 72 строки, данные имеют 1. Интересно, можете ли вы потратить свои драгоценности, чтобы сообщить мне, где может быть проблема, иначе создается папка os shapefiles и заполняется. –

Смежные вопросы