Мне нравится хранить некоторые вещи в репозитории 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")
Я не уверен, что есть более простой способ, но вот функция загрузки всех файлов на локальный компьютер, а затем их чтение.
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 (как и большинство других геопространственных библиотек и инструментов) может читать и записывать и то, и другое.