3.2. 空间数据的几种常用开放格式

本节课程将更详细地介绍一些具有开放规范或由开放源代码软件创建的空间数据格式。请注意,这些是指可以独立于硬件上的文件或数据库。在以后的课程中,我们将介绍从其他计算机传入的web服务的开放格式。

3.2.1. 基于文件的数据

基于文件的数据包括shapefile、KML文件、GeoJSON和许多其他类型的基于文本的文件。每个矢量格式都有一些存储每个特征的几何体(即顶点坐标)和属性的机制。一些格式(如KML)也可能存储样式信息。

下面是您最可能遇到的一些基于文件的数据格式。

3.2.1.1. Shapefiles

Esri shapefile是用于交换矢量数据的最常见格式之一。 它实际上由几个具有相同根名但后缀不同的文件组成。 至少必须包含.shp,.shx和.dbf文件。 当文件中包含额外的空间索引或投影信息时,除这三个文件外,还可以包括其他文件。 This ArcGIS Resources article 快速概述了可以包含的不同文件。

由于shapefile需要多个文件,因此在下载、上载和通过电子邮件发送这些文件时,通常需要将它们压缩到一个文件中。

如果要从头开始制作shapefile,可以参考Esri的`规范<https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf> _。 这不是针对新手程序员的,浏览此规范将希望对那些将自己的时间和技能捐赠给FOSS GIS程序编码的人提高您的赞赏。

3.2.1.2. GeoPackages

GeoPackage 是一种相对较新的格式,用于在各种设备(包括笔记本电脑、移动设备等)上存储和传输矢量特征、表格和栅格化分幅。它是由开放地理空间联盟(OGC)定义的,您将在第4课中详细了解该组织,该组织由行业代表、学者、实践者和对开放地理空间数据格式感兴趣的其他人组成。GeoPackage实际上将数据存储在SQLite数据库中,下面在databases一节中详细介绍。我在“基于文件的格式”部分列出了GeoPackage,因为some have advocated 因为它是一个更现代的替代品。

3.2.1.3. KML

KML作为一种简单的空间数据格式被广泛使用,用于将地理数据放置在Google Earth的顶部。它也在谷歌地图和各种非谷歌产品中得到支持。

KML代表Keyhole标记语言,它是由Keyhole,Inc.在被Google收购之前开发的。KML于2008年成为Google自愿提交的开放地理空间联盟(OGC)标准数据格式。

KML是XML的一种形式,其中数据在一系列结构化标记中维护。在撰写本文时Wikipedia article for KML 包含此XML结构的简单示例。KML的独特性和通用性在于它可以包含样式信息,并且可以保存矢量或栅格格式(KML中的“覆盖”)。栅格本身不是用KML编写的,而是包含在一个名为KMZ的压缩文件中。大型矢量数据集通常也被压缩成KMZ。

3.2.1.4. GeoJSON和TopoJSON

JavaScript对象表示法(JSON)是一种结构化的方法,它将数据排列在程序可以读取的一系列键-值对的层次结构中。(程序不需要用JavaScript编写。)JSON没有XML那么冗长,最终导致在web应用程序中通过网络传输的“负载”或数据大小更少。

遵循这种模式,GeoJSON是一种JSON形式,用于表示向量特性。那个GeoJSON spec 给出了一些基本示例,说明如何构造不同的实体(如点、线和多边形)。

您可能选择将GeoJSON功能保存到Web地图可以引用的.js(JavaScript)文件中。其他时间,您可能会遇到返回GeoJSON的Web服务。

GeoJSON的一个变体是`TopoJSON <https://github.com/mbostock/topojson/wiki>`_,它将每个线段存储为单个弧,可以由不同的多边形多次引用。换句话说,当两个要素共享边界时,顶点仅存储一次。这将导致文件更紧凑,当需要将数据从服务器传输到客户端时,可以提高性能。

3.2.1.5. 其他文本文件

许多地理信息系统程序可以从其他类型的文本文件中读取矢量数据,例如.gpx(GPS轨迹的常用格式)和各种类型的.csv(Microsoft Excel中常用的逗号分隔值文件),其中包括经度(X)和纬度(Y)列。您可以设计Web地图来解析和读取这些文件,或者您可能希望使用脚本编写技巧将数据转换为另一种标准格式,然后再将其部署到Web地图中。这是Python技能和帮助程序库很方便的地方。

3.2.1.6. 各种栅格格式

大多数栅格格式都是公开记录的,不需要版税或归属。其中包括JPEG、PNG、TIFF、BMP等。GIF格式以前使用的是专利压缩格式,但这些专利已经过期。

像WMS这样的Web服务制图以栅格格式返回结果,许多瓦片地图也是如此。KML/KMZ文件还可以引用一系列称为覆盖的栅格。

3.2.2. 空间数据库

当数据集变大或变复杂时,将它们移入数据库是有意义的。这通常使运行高级查询,设置数据集之间的关系以及管理对数据的编辑变得更加容易。它还可以提高性能,增强安全性并引入用于执行空间操作的工具。

下面介绍几种将空间数据放入自由/开源软件数据库的常用方法。专利等价物的示例包括Microsoft SQL Server、Oracle Spatial和Esri ArcSDE中间件(打包为ArcGIS Enterprise的一个选项),它们可以连接到各种类型的数据库,包括自由/开源软件。

3.2.2.1. PostGIS

PostGIS是一个扩展,它允许在PostgreSQL(通常称为“ Postgress”或“ Postgress SQL”)中进行空间数据管理和处理。PostgreSQL也许是功能最全的FOSS关系数据库管理系统(RDBMS)。如果您将传统的带有关系表的RDBMS当作面包,那么如果您要转向FOSS,那么PostgreSQL和PostGIS是很合适的。安装相对简单:在Windows的最新PostgreSQL安装程序中,只需在安装后选中一个复选框,表明您想添加PostGIS。导入程序向导允许您将shapefile加载到PostGIS中以开始使用。其余的管理可以从用于管理PostgreSQL的pgAdmin GUI程序完成。

大多数自由/开源地理信息系统程序都为您提供了一个连接PostGIS数据的接口。例如,在QGIS中,您可能注意到按钮Add PostGIS Layers

../../_images/add_postgis_layers_201.png

添加PostGIS图层。图标中的大象是一个与PostgreSQL相关的符号。GeoServer还支持PostGIS中的图层。

本课程Geog 585不提供PostGIS演练。但是,在Geog 897D:空间数据库<https://www.e-education.psu.edu/spatialdb/>`_中有一些很棒的开放式课件课程,它们描述了如何安装和使用PostGIS。如果您认为学习PostGIS对您的职业生涯有帮助,我鼓励您花些时间自己研究这些内容(或采用讲师指导的产品)。

如果您对其他课程材料感到满意并希望接受额外的挑战,欢迎您在学期项目中使用PostGIS。如果需要过多的故障排除,则始终可以依靠基于文件的数据。

3.2.2.2. SpatiaLite

SpatiaLite是支持SQLite数据库中空间数据的扩展。顾名思义,SQLite是一种轻量级的数据库引擎,可为您提供一种在数据库范式中存储和使用数据的方式,而无需在客户端计算机上安装任何RDBMS软件。这使得SQLite数据库易于复制,并允许它们在多种设备上运行。如果您熟悉Esri产品,则可以将SpatiaLite数据库视为类似于文件地理数据库。

SpatiaLite没有PostGIS成熟,但是它越来越流行,您将在QGIS中看到一个名为AddSpatialite Layer的按钮

../../_images/add_spatialite_layer_201.png

添加SpatiaLite层。如果您觉得这对您的职业生涯有帮助,欢迎您在学期项目中使用SpatiaLite。如果您选择执行此操作,请先让该项目处理基于文件的数据。然后随意尝试将数据源换成SpatiaLite。

使用QGIS从OpenStreetMap导入数据时,将在第9课演练中遇到SpatiaLite数据库。在这种情况下,您要处理大量的数据,其中可能包含许多具有复杂属性的字段。对于这种类型的任务,SuffalIt是比SeaFipe、KML等更为独立和灵活的选择。