Как импортировать и читать шейп-файл прямо из репозитория Github в R?

Мне нравится хранить некоторые вещи в репозитории Github, чтобы к ним можно было получить доступ и прочитать в R где угодно, например файлы CSV, которые можно прочитать по ссылке на репозиторий без необходимости загрузки в каталог на моем компьютере.

Но я хотел бы сделать то же самое с шейп-файлами, которые представляют собой файлы госпространства, разделенные на 4 части или расширения: *.shp, *.shx, *.prj, *dbf, каждый со своей функцией. Расширение *.shp читается программным обеспечением с пространственной поддержкой.

Я попытался загрузить шейп-файл из репозитория github, но не смог.

library(rgdal) 
shapefile <- readOGR("http://wesleysc352.github.io/seg_s3_r3_m10_fix_estat_amost_val.shp")
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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


library(stringr)
library(sf)


load_shp <- function(shape_link, dest_dir = "shape_files"){

  #check for dest dir, create it if it doesn't exist
  if (!dir.exists(dest_dir)){
  
    dir.create(dest_dir) 
    
  }
  
#remove file extension (everything after last period)  
shape_link <- str_remove(url, "\\.[^\\.]+$")

# Extract file name (everything after last /)
file_name <- shape_link %>% str_extract("/[^/]+$.*") %>% str_remove("/")


# define extensions
ext <- c(".shp", ".shx", ".prj", ".dbf")

#create list of urls
urls <- paste0(shape_link, ext)

#create a list of download files
downloaded_files <- paste0(file_name,ext)

for (i in seq_along(urls)) {

download.file(urls[i],downloaded_files[i])
  
}

shape <- st_read(downloaded_files[1])

shape
}


shape <- load_shp("http://wesleysc352.github.io/seg_s3_r3_m10_fix_estat_amost_val.shp")

Ответ принят как подходящий

Вы можете использовать Виртуальные файловые системы GDAL с sf::st_read(), для чтения файлов по HTTP и FTP используется /vsicurl/, и, по-видимому, он достаточно способен выяснить, какие дополнительные файлы он должен извлекать, чтобы шейп-файлы работали:

library(sf)
#> Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
shp <- st_read("/vsicurl/http://wesleysc352.github.io/seg_s3_r3_m10_fix_estat_amost_val.shp")
#> Reading layer `seg_s3_r3_m10_fix_estat_amost_val' from data source 
#>   `/vsicurl/http://wesleysc352.github.io/seg_s3_r3_m10_fix_estat_amost_val.shp' 
#>   using driver `ESRI Shapefile'
#> Simple feature collection with 2308 features and 2 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 752896 ymin: 7734010 xmax: 761686 ymax: 7744258
#> Projected CRS: WGS 84 / UTM zone 21S

head(shp)
#> Simple feature collection with 6 features and 2 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 753792 ymin: 7744136 xmax: 753880 ymax: 7744188
#> Projected CRS: WGS 84 / UTM zone 21S
#>     id amostra                       geometry
#> 1 1996       4 POLYGON ((753854 7744188, 7...
#> 2 2206       4 POLYGON ((753792 7744176, 7...
#> 3 2254       4 POLYGON ((753872 7744172, 7...
#> 4 2460       4 POLYGON ((753870 7744170, 7...
#> 5 2707       4 POLYGON ((753840 7744158, 7...
#> 6 2814       4 POLYGON ((753838 7744150, 7...

Created on 2023-02-05 with reprex v2.0.2

Хотя в зависимости от вашего варианта использования, возможно, GeoJSON и/или GeoPackage больше подходят для управления версиями и удаленного доступа, sf (как и большинство других геопространственных библиотек и инструментов) может читать и записывать и то, и другое.

Другие вопросы по теме