> 文章列表 > 空间矢量数据保存为GeoJSON、PDF等文件格式

空间矢量数据保存为GeoJSON、PDF等文件格式

空间矢量数据保存为GeoJSON、PDF等文件格式


专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


我们使用的空间矢量数据一般是Shapefile格式的,它在ArcGIS、R语言中都能加载,但是这种数据格式在使用时也有不便:它是由多个文件构成的,一般有.shp.shx.dbf.prj等,此外还可能有.sbx.cpg.shp.xmlatx.sbn等。尽管在加载时通常只需要关注.shp文件,但是太多的组成文件还是会对数据管理造成不便。

本篇主要介绍一些空间矢量存储的格式,目录如下:

  • Shapefile

  • Geodatabase

  • GeoJSON

  • PDF

  • 其他

Shapefile

一般情况下我们会用sf工具包中的st_read()st_write()函数来分别加载和保存Shapefile文件。

nc.shpsf工具包自带的文件,通过下面代码可以得到它在本地的位置:

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个子文件:

空间矢量数据保存为GeoJSON、PDF等文件格式

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")