由于近期在学习一种gpkg数据,随手就做篇笔记。
一、简介
gpkg,全称为GeoPackage,是一种开放的、基于
标准的、独立于平台的、可移植的、自描述的、用于传输地理空间信息
的紧凑数据格式。它是一个独立于平台的SQLite数据库文件,其中包含如下所示的GeoPackage数据和元数据表。
- 矢量要素;
- 不同比例尺的图像和光栅映射的瓦矩阵集;
- 属性(非空间数据);
- 以及扩展机制;
这些约定包括表的定义、完整性断言、格式限制和内容约束。GeoPackage所需和支持的内容完全在标准中定义。这些功能构建在一个公共的基础上,扩展机制为实现者提供了一种在他们的GeoPackage中包含额外功能的方法。
本质上来讲,GeoPackage仍是一个数据库容器,所以它支持直接使用。这意味着GeoPackage中的数据可以以“原生”存储格式访问和更新,而无需中间格式转换。
在连接和带宽有限的通信环境中,GeoPackage对移动设备(如手机和平板电脑)尤其有用
。因为移动设备用户需要地图/地理空间应用程序服务,并在断开连接或有限的网络连接环境中操作,他们面临存储容量有限和缺乏支持这些应用程序的开放格式地理空间数据的挑战。
考虑到移动手持设备还没有足够的处理能力或电池寿命,无法有效处理困难的地理空间产品生产和分析任务,本标准旨在促进COTS和开源软件应用程序在企业生产平台以及移动手持设备上广泛采用和使用GeoPackage数据。

二、数据
2.1标准基础
标准中规定的所有gpkg_*表和视图以及所有tile用户数据表必须只有指定的列和表约束。除了指定的列之外,任何功能用户数据表都可以有列。所有指定的表、视图、列、触发器和约束名称值必须为小写。
2.2文件格式
- GeoPackage必须是SQLite数据库文件,使用的是SQLite文件格式的第三版。GeoPackage的前16个字节应为以空结尾的ASCII 字符串"SQLite format 3"。
- 一个GeoPackage应该在SQLite数据库头的“application_id”字段中包含一个值0x47504B47 (ASCII中的“GPKG”),以表明它是一个GeoPackage数据。并且在SQLite数据库头的“user_version”字段中包含一个适当的值来表示它的版本。该值必须是一个整数,包含主版本、两位数次版本和两位数错误修正。对于地质包版本1.2,这个值是0x000027D8(10200的十六进制值)。
一个GeoPackage文件的最大大小可以约为140TB。实际上,文件写入的文件系统可能会施加一个较低的大小限制。许多移动设备要求使用FAT32文件系统对外部存储卡进行格式化,FAT32文件系统的最大大小限制为4GB。
2.2文件扩展名
1.GeoPackage的文件扩展名为“.gpkg”。
2.3文件内容
GeoPackage应该只包含在这个编码标准的核心中指定的数据元素(表,列,或值)和SQL结构(视图,约束,或触发器)。扩展GeoPackage则可以包含通过扩展机制指定的附加数据元素和SQL构造。
GeoPackage的设计是为了在应用程序之间提供最大的互操作性。而在扩展GeoPackage中,通过使用扩展机制以尽可能维护互操作性的方式来提供额外的功能。
GeoPackage数据类型主要包含这几种,BOOLEAN、TINYINT、SMALLINT、MEDIUMINT、INT, INTEGER、FLOAT以及DOUBLE, REAL等等,更多详细的内容,可以详看https://www.geopackage.org/spec121/index.html#_introduction。
三、空间参考坐标系
3.1空间参考表定义
一个GeoPackage必须包含一个gpkg_spatial_ref_sys表,它所包含的坐标参考系统定义由GeoPackage gpkg_contents和gpkg_geometry_columns表引用,以将用户表中的向量和tile数据与地球上的位置关联起来。

3.2表数据
gpkg_spatial_ref_sys表中的定义列WKT值定义了特征几何图形和平面图使用的空间参考系统,除非这些SRSs是未知的。值是根据EBNF语法构造的,EBNF名称和编号值可从任何指定机构获得。
注:gpkg_spatial_ref_sys表应该至少包含空间参考系统表记录中列出的记录。srs_id为4326的记录应对应于EPSG 在4326中定义的WGS-84坐标系。对于未定义的笛卡尔坐标参考系,srs_id为-1。对于未定义的地理坐标参考系,srs_id为0。

四、矢量
该标准中定义的可实例化(非抽象)几何类型仅限于存在于2,3或4维坐标空间(R2, R3或R4)中的0,1和2维几何对象。R2中的几何值有x和y的坐标值,R3中的几何值有x, y和z的坐标值或x, y和m的坐标值。
GeoPackage中几何图形可以包括z坐标值。z坐标的值通常表示第三维(即3D)。在地理信息系统(GIS)中,这可能是高于或低于海平面的高度。例如:地图上可能有一个点,通过它在地球上的位置(x和y坐标值)确定山峰的位置,以及山的高度(z坐标值)。
此外,几何图形可以包括m坐标值。m坐标值允许应用程序环境将一些度量与点值关联起来。例如:一个河流网络可以被建模为多线串值,其中m坐标值测量到河口的距离。
下面是几个典型的几何图形:
- Geometry:几何类型层次结构的根类型。
- Point:空间中的单一位置。每个点都有X和Y坐标。一个点也可以有Z和/或M值。
- Curve:所有一维几何类型的基类型。一维几何是一个有长度但没有面积的几何。一条曲线如果不与自身相交(起点和终点除外),就被认为是简单的类型。一条曲线被认为是闭合的,它的起点和终点是重合的。一个简单的闭合曲线叫做环。
- LineString:连接空间中两个或多个点的曲线。
- Surface:所有二维几何类型的基类型。二维几何是一个有面积的几何。
- CurvePolygon: 由一个外环和零个或多个内环定义的平面。每个环都由一个Curve实例定义。
- Polygon:CurvePolygon的受约束形式,其中每个环被定义为一个简单的封闭LineString。
- GeometryCollection: 零个或多个几何实例的集合。
- MultiSurface: 几何集合的受约束形式,其中集合中的每个几何必须为曲面类型。
- MultiPolygon: 多曲面的受约束形式,其中集合中的每个曲面必须为多边形类型。
- MultiCurve: 几何集合的受约束形式,其中集合中的每个几何必须为曲线类型。
- MultiLineString: MultiCurve的受约束形式,其中集合中的每个曲线必须为LineString类型。
- MultiPoint: 几何集合的受约束形式,其中集合中的每个几何必须为Point类型。
只了解了这么多东西,后面再慢慢补充,如果想要了解更多,可以阅读参考资料的内容。
参考资料
[1]https://www.geopackage.org/spec121/index.html#_introduction