ошибка чтения шейп-файла в R, который отлично работает в QGIS - PullRequest
1 голос
/ 12 марта 2020

Я получаю ошибку при чтении этого файла формы в R с использованием readOGR и read_sf:

http://45.56.98.26/madrid-divisiones/Termino_1612.shp

readOGR ошибка:

Warning in ogrFIDs(dsn = dsn, layer = layer) : no features found
Error in readOGR(dsn = "http://45.56.98.26/madrid-divisiones/Termino_1612.shp") : 
  no features found

ошибка read_sf:

Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet,  :
  GDAL Error 1: JSON parsing error: continue (at offset 0)

В QGIS открывается нормально. Я в состоянии нормально читать другие шейп-файлы с моей настройкой R (обычно с использованием read_sf), и я никогда раньше не видел этой ошибки. Вот код, который я использую:

madrid1612 <- read_sf("http://45.56.98.26/madrid-divisiones/Termino_1612.shp",quiet=TRUE,as_tibble = FALSE,stringsAsFactors = TRUE)

madrid1612 <- readOGR(dsn="http://45.56.98.26/madrid-divisiones/Termino_1612.shp")

Я рассмотрел все вопросы «Ошибка чтения шейп-файла в R», но не могу найти ничего, что решило бы мою проблему. Я попытался открыть его в QGIS и экспортировать как файл geo json, и я получил эту ошибку:

madrid1612<-fromJSON(txt ="http://45.56.98.26/madrid-divisiones/Termino_1612.geojson")

Warning: Error in polygonData.default: Don't know how to get path data from object of class list


РЕДАКТИРОВАТЬ С РЕШЕНИЕМ: проблема оказалась в несовместимых данных проекции в файле , QGIS мог справиться с этим, но R не смог. Мне удалось исправить это с помощью st_transform, чтобы сделать его согласованным:

madrid1970 <- read_sf("./Termino_1970.shp") %>% st_transform(4326)

1 Ответ

1 голос
/ 11 апреля 2020

Поскольку ваш код напрямую связан с одним файлом .shp, R {sf} не может определить, где находятся необходимые файлы (.shx, .dbf, .prj).

Вы можете загрузить эти файлы на локальный диск:

library(sf)

library(downloader)

loc = "http://45.56.98.26/madrid-divisiones/"
shape_name = "Termino_1612"
ext_name = c(".shp", ".shx", ".dbf", ".prj")

i=1
for (i in 1:4){
  download(paste0(loc, shape_name, ext_name[i]), 
           destfile= paste0("./", shape_name, ext_name[i]), mode = "wb")
  i = i +1
} 

madrid1612 <- read_sf("./Termino_1612.shp")
plot(madrid1612) 

Если вам нужно загрузить его напрямую, выберите geojson.

madrid1612 <- read_sf("http://45.56.98.26/madrid-divisiones/Termino_1612.geojson")
plot(madrid1612)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...