Чтение и запись векторных данныхЧтение векторных файлов осуществляет функция
vect
— та же, что отвечает за создание векторных данных.
Одним из распространенным форматов файлов векторных данных является
шейпфайл (shapefile). Это набор из четырёх (или большего числа) файлов с одинаковыми именами, но разными расширениями. Для шейпфайла
x
в одной папке должны находиться:
x.shp
,
x.shx
,
x.dbf
и
x.prj
.
Откроем шейпфайл, поставляемый вместе с пакетом terra:
library(terra)
filename <- system.file("ex/lux.shp", package="terra")
## [1] "C:/Users/User/AppData/Local/R/win-library/4.3/terra/ex/lux.shp"
s <- vect(filename)
s
## class : SpatVector
## geometry : polygons
## dimensions : 12, 6 (geometries, attributes)
## extent : 5.74414, 6.528252, 49.44781, 50.18162 (xmin, xmax, ymin, ymax)
## source : lux.shp
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : ID_1 NAME_1 ID_2 NAME_2 AREA POP
## type : <num> <chr> <num> <chr> <num> <int>
## values : 1 Diekirch 1 Clervaux 312 18081
## 1 Diekirch 2 Diekirch 218 32543
## 1 Diekirch 3 Redange 259 18664
Функция
system.file
возвращает полный путь к файлу. Она нужна только для примеров работы с данными, поставляемыми с R. Для собственных файлов используйте функцию
vect
, указав полный путь к нужному файлу.
vect
возвращает объекты
SpatVector
. Фактически, она создаёт эти объекты с нуля, как мы видели раньше, или из файлов векторных данных различных форматов. В нашем случае построен
SpatVector
, состоящий из 10 полигонов с 6 атрибутами (переменными).
Для записи векторных служит функция
writeVector
:
outfile <- "shp_test.shp"
writeVector(s, outfile)
Чтобы перезаписать файл поверх, нужно добавить аргумент
overwrite=TRUE
writeVector(s, outfile, overwrite=TRUE)
Для удаления файлов используют функции
file.remove
или
unlink
. Будьте осторожны, не спешите!
При удалении шейпфайла нам придётся удалять сразу несколько файлов. В качестве примера удалим
shp_test
. Сначала мы выделим нужные файлы функцией
list.files
, указав шаблон имени файла, а затем удалим их при помощи
file.remove
ff <- list.files(pattern="^shp_test")
ff
## [1] "shp_test.cpg" "shp_test.dbf" "shp_test.prj" "shp_test.shp" "shp_test.shx"
file.remove(ff)
## logical(0)
TRUE
на выходе
file.remove
показывает, что заданный файл удален.
#R