专注系列化、高质量的R语言教程
推文索引 | 联系小编 | 付费合集
我们使用的空间矢量数据一般是Shapefile格式的,它在ArcGIS、R语言中都能加载,但是这种数据格式在使用时也有不便:它是由多个文件构成的,一般有.shp
、.shx
、.dbf
、.prj
等,此外还可能有.sbx
、.cpg
、.shp.xml
、atx
、.sbn
等。尽管在加载时通常只需要关注.shp
文件,但是太多的组成文件还是会对数据管理造成不便。
本篇主要介绍一些空间矢量存储的格式,目录如下:
Shapefile
Geodatabase
GeoJSON
PDF
其他
Shapefile
一般情况下我们会用sf
工具包中的st_read()
和st_write()
函数来分别加载和保存Shapefile文件。
nc.shp
是sf
工具包自带的文件,通过下面代码可以得到它在本地的位置:
library(sf)
path = system.file("shape/nc.shp", package = "sf")
path
## [1] "D:/R-4.2.1/library/sf/shape/nc.shp"
加载和保存shapefile文件:
nc <- st_read(path)
st_write(nc, "E:/nc.shp", delete_layer = T)
设置
delete_layer = TRUE
可以使保存文件的代码多次运行,它表示在保存时先删除地址中已存在的同名文件。
保存后的文件如下,共有4个子文件:

Geodatabase
Geodatabase是ESRI从ArcGIS 10开始推出的新型文件格式,后缀为.gdb
。它本质上是个文件夹,可以储存一个或多个矢量文件。
sf
工具包目前可以加载这种文件格式,但是不能将矢量文件保存为这种格式。
这里,学堂君事先准备了一份Geodatabase文件(后台发送关键词“示例数据”获取,文件名“204.nc.gdb”)。
在加载之前,可以使用st_layers()
函数查看它的图层:
st_layers("E:/204.nc.gdb")
## Driver: OpenFileGDB
## Available layers:
## layer_name geometry_type features fields crs_name
## 1 nc Multi Polygon 100 16 NAD27
## 2 nc2 Multi Polygon 100 16 NAD27
## 3 北卡罗来纳州 Multi Polygon 100 16 NAD27
可以看出,它共有3个图层。加载它们的方法是:
nc1 <- st_read(dsn = "E:/nc.gdb", layer = "nc")
nc2 <- st_read(dsn = "E:/nc.gdb", layer = "nc2")
nc3 <- st_read(dsn = "E:/nc.gdb", layer = "北卡罗来纳州")
GeoJSON
将矢量文件保存为GeoJSON文件,需要选择对应的驱动器(driver)。通过st_driver()
函数可以查看所有可用的驱动器。
## 查看矢量文件的驱动器
driver <- st_drivers(what = "verctor")
driver
GeoJSON文件的驱动器是GeoJSON
:
st_write(nc, "E:/nc.json", driver = "GeoJSON",
delete_layer = T)
保存到本地后只有一个子文件。
加载GeoJSON文件:
ncjson <- st_read("E:/nc.json")