你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用时空资产目录 (STAC) 组织星载地理空间数据

此参考体系结构演示用于构建地理空间数据的端到端时空资产目录 (STAC) 创建实现。 在本文档中,我们将通过 Azure 上的地理空间库使用公开可用的国家农业航拍图像计划 (NAIP) 数据集。 可以改编该体系结构,以采用卫星航拍图像提供者 Azure Orbital 地面站 (AOGS) 或 Bring Your Own Data (BYOD) 等其他来源的数据集。

该实现包括四个阶段:通过 STAC FastAPI 采集数据、生成元数据、编目和发现数据。 本文还将介绍如何基于新数据源或自带数据构建 STAC。

GitHub 中提供了本体系结构的实现。

本文面向在处理星载地理空间数据方面具有中等技能水平的用户。 有关常用 STAC 术语的定义,请参阅术语表中的表格。 有关更多详细信息,请访问官方 stacspec 页面。

方案详细信息

星载数据集合越来越常见。 有各种时空资产的数据提供者,例如航拍图像、合成孔径雷达 (SAR)、点云等。 数据提供者不提供标准方式来让用户访问其时空数据。 时空数据用户通常需要为他们想要使用的每个不同数据集合构建独特的工作流。 开发人员需要开发新的工具和库来与时空数据交互。

STAC 社区已定义一套规范来消除这种复杂性并改进常用工具。 STAC 规范是用于描述地理空间信息的通用语言,使这些信息更容易处理、编制索引和发现。 部署的许多产品是基于 STAC 构建的,例如 Microsoft 行星计算机,它为可持续性研究提供数 PB 的全球环境数据 STAC 目录。

我们的示例解决方案使用开源工具(例如 STAC FastAPI、pystacMicrosoft 行星计算机 API)和开放标准地理空间库(已在组件部分列出)在 Azure 上运行解决方案。

可能的用例

STAC 已成为行业标准,为地理空间数据的构建和查询方式提供支持。 它已在许多生产部署中用于各种用例。

下面是几个示例:

  • 卫星数据提供商公司需要使其数据易于发现和访问。 提供商构建 STAC 目录以便为其所有历史存档数据集以及每日传入的全新数据编制索引。 Web 客户端 UI 构建在 STAC API 基础之上,允许用户浏览目录并根据感兴趣区域 (AOI)、日期/时间范围和其他参数搜索所需的图像。

  • 一家地理空间数据分析公司需要构建一个星载数据数据库,其中包含从各种数据源采集的航拍图像、数字高程模型 (DEM) 和 3D 类型。 该数据库将为其地理信息系统 (GIS) 分析解决方案提供服务,以聚合不同的数据集来进行基于机器学习模型的物体检测分析。 为了支持标准数据访问层,该公司决定为 GIS 分析解决方案实现一个兼容的开源 STAC API 接口,以便以可缩放的高效方式来与数据库交互。

体系结构

Diagram of STAC architecture.

下载此体系结构的 Visio 文件

数据流

STAC dataflow diagram.

下载此数据流的 Visio 文件

以下部分描述了该体系结构中的四个阶段。

数据采集

元数据生成

  • 数据提供者定义了描述提供者、许可条款、关键字等的元数据。这些元数据构成了 STAC 集合。
  • 数据提供者可以提供描述地理空间资产的元数据。 在我们的示例中,我们使用 NAIP FGDC 提供的元数据。 使用标准地理空间库从资产中提取其他元数据。 这些元数据构成了 STAC 项。
  • 此 STAC 集合和项用于构建 STAC 目录,以帮助用户使用 STAC API 发现时空资产。

编目

  • STAC 目录

    • STAC 目录是一个顶级对象,它以逻辑方式分组其他目录、集合与项对象。 作为该解决方案部署的一部分,我们创建了一个 STAC 目录,所有集合与项将组织到该目录下。
  • STAC 集合

    • 它是数据提供者提供的一组相关 STAC 项。
    • 用于发现资产的搜索查询范围限定为 STAC 集合级别。
    • 它是为数据提供者(在本例中为 NAIP)生成的,此 JSON 元数据将上传到 Azure 存储容器。
    • 上传 STAC 集合元数据文件会触发一条发送到 Azure 服务总线的消息。
    • 处理器在 Azure Kubernetes 群集上处理这些元数据,并将其引入 STAC 目录数据库(PostgreSQL 数据库)。 对于不同的数据提供者有不同的处理器,每个处理器订阅各自的服务总线主题。
  • STAC 项和资产

    • 要编目的资产(GeoTiff云优化的 GeoTiff 等形式的栅格数据)。 描述资产的元数据以及从资产中提取的元数据将上传到相应存储容器下的存储帐户。
    • 在成功上传相应的元数据后,资产 (GeoTiff) 将上传到相应存储容器下的存储帐户中。
    • 上传到存储帐户的每个资产及其相关元数据会触发一条发送到服务总线的消息。 这些元数据构成了目录数据库中的 STAC 项。
    • 处理器在 Azure Kubernetes 群集上处理这些元数据,并将其引入 STAC 目录数据库(PostgreSQL 数据库)。

数据发现

  • STAC API 基于开源的 STAC FastAPI。
  • STAC API 层是在 Azure Kubernetes 服务上实现的,API 通过 API 管理服务公开。
  • STAC API 用于发现目录中的地理空间数据。 这些 API 基于 STAC 规范,并了解在 STAC 目录数据库中定义的和索引的 STAC 元数据(PostgreSQL 服务器)。
  • 根据搜索条件,你可以在大型数据集中快速定位数据。
    • 查询 STAC 集合、项和资产:
      • 用户通过 STAC FastAPI 提交查询以查找一个或多个 STAC 集合、项和资产。
      • STAC FastAPI 查询 PostgreSQL 数据库中的数据,以检索 STAC 集合、Items 和对 Assets 的引用。
      • STAC FastAPI 将结果返回给用户。

组件

此体系结构中使用了以下 Azure 服务。

  • Key Vault 存储和控制对机密(如令牌、密码和 API 密钥)的访问。 Key Vault 还会创建和控制加密密钥并管理安全证书。
  • 服务总线是更广泛的 Azure 消息传递基础结构的一部分,支持队列、发布/订阅和更高级的集成模式。
  • Azure Data Lake Storage 专用于大数据分析,基于 Azure Blob 存储而构建。
  • 通过 Azure 虚拟网络,Azure 资源能够以安全方式彼此通信、与 Internet 通信以及与本地网络通信。
  • Azure Database for PostgreSQL 灵活服务器是一种完全托管的数据库服务,旨在针对数据库管理功能和配置设置提供更精细的控制和更大的灵活性。 它具有更丰富的功能,例如区域复原的高可用性 (HA)、可预测的性能、最大控制度、自定义维护时段、成本优化控制,以及适合企业工作负载的简化开发人员体验。
  • API 管理服务提供可缩放的多云 API 管理平台用于保护、发布和分析 API。
  • Azure Kubernetes 服务提供最快捷的方式来开始开发和部署云原生应用,并提供内置的代码到云管道和保护机制。
  • 容器注册表可以存储和管理容器映像与相关项目。
  • 虚拟机 (VM) 为各种计算解决方案提供灵活的虚拟化。 在完全受保护的部署中,用户可以通过 Azure Bastion(将在下一项中介绍)连接到 VM 以执行一系列操作,例如将文件复制到存储帐户、运行 Azure CLI 命令以及与其他服务交互。
  • Azure Bastion 使你能够安全地无缝地通过 RDP 和 SSH 连接到 Azure 虚拟网络中的 VM,而无需通过 Azure 门户 直接访问 VM 上的公共 IP,而无需任何其他客户端/代理或任何软件片段。
  • Application Insights 为实时 Web 应用提供可扩展应用程序性能管理和监视。
  • Log Analytics 工具可用于根据 Azure Monitor 日志收集的数据编辑和运行日志查询,并交互式分析结果。

此外,使用了以下地理空间库:

  • GDAL 是用于操作星载数据的工具库。 GDAL 适用于光栅和矢量数据类型。 这是一个很好的工具,可以知道你是否正在使用星载数据。
  • Rasterio 是用于光栅处理的模块。 可以使用它在 Python 中读取和写入几种不同的光栅格式。 光栅基于 GDAL。 导入模块后,Python 会自动注册所有已知的 GDAL 驱动程序来读取支持的格式。
  • Shapely 是一个 Python 包,用于对平面特征进行集论分析和操作。 它(通过 Python 的 ctypes 模块)使用广泛部署的 GEOS 库中的函数。
  • pyproj 执行制图转换。 它通过使用 PROJ 将经度和纬度转换为本机地图投影 x、y 坐标,反之亦然。

注意事项

  • 示例解决方案演示了与任何地理空间数据集合交互所需的 STAC 核心 JSON 支持。 虽然 STAC 标准化了元数据字段、命名约定、查询语言和目录结构,但用户还应考虑使用 STAC 扩展来支持特定于其资产的元数据字段。

  • 在示例实现中,处理资产以提取元数据的组件具有设置好的副本数量。 扩展此组件可以更快地处理资产。 但是,扩展并不是动态的。 如果要编目大量资产,请考虑扩展这些副本。

添加新数据源

若要编目更多数据源或编目你自己的数据源,请考虑以下选项。

  • 为数据源定义 STAC 集合。 搜索查询的范围限定为 STAC 集合级别。 考虑用户将如何搜索集合中的 STAC 项和资产。
  • 生成 STAC 项元数据。 可以使用标准工具和库从地理空间资产中派生更多元数据。 定义并实现流程以捕获资产的补充元数据,这对于丰富 STAC 项,进而更方便地使用 API 发现数据会很有用。
  • 为数据源提供这些元数据(STAC 集合和 STAC 项的形式)后,此示例解决方案可用于通过相同的流构建 STAC 目录。 为数据编目后,可以使用标准 STAC API 查询数据。
  • 此体系结构的处理器组件可扩展,以包含可在 Azure Kubernetes 群集中作为容器开发和运行的自定义代码。 它旨在提供一种将地理空间数据的不同表示形式编目为资产的方式。

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述

  • Azure Kubernetes 服务容器安全性实现可确保在容器安全的情况下构建和运行处理器。
  • API 管理服务安全基线提供有关如何保护 Azure 上的云解决方案的建议。
  • Azure Database for PostgreSQL 安全性深入介绍了当数据存储在 PostgreSQL 灵活服务器中时的多层安全性,包括静态数据和传输中数据方案。

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述

由于此解决方案旨在用于学习和开发,因此我们为 Azure 资源使用了最低配置。 此最低配置对示例数据集运行一个示例解决方案。

用户也可以调整配置,以满足其高性能工作负载和缩放需求。 例如,可将 AKS 群集中的标准 HDD 换成高级 SSD,或将 API 管理服务扩展到高级 SKU。

性能效率

性能效率是指工作负载能够以高效的方式扩展以满足用户对它的需求。 有关详细信息,请参阅性能效率要素概述。 此外,可以参考以下指导来最大程度地提高性能效率:

部署此方案

我们构建了一个可部署到订阅中的示例解决方案。 该解决方案让用户能够使用标准 STAC API 来验证从 STAC 元数据到引入,再到发现资产的整体数据流。 自述文件中阐述了部署说明和验证步骤。

概括而言,此部署执行以下操作:

  • 在专用网络中部署各种基础结构组件,例如 Azure Kubernetes 服务、Azure PostgreSQL 服务器、Azure 密钥保管库、Azure 存储帐户、Azure 服务总线等。

  • 部署 Azure API 管理服务并发布 STAC FastAPI 的终结点。

  • 打包代码及其依赖项,生成 Docker 容器映像,并将其推送到 Azure 容器注册表。

    Diagram of STAC deployment services.

下载此实现的 Visio 文件

后续步骤

如果你想要开始构建此解决方案,可以参考我们整理的并在上面简要介绍过的示例解决方案。 下面是一些有用的链接,可开始使用 STAC 和模型实现。

术语表

STAC 术语 定义
资产 表示在特定空间和时间中捕获的星载数据的任何文件。
STAC 规范 用于描述地理空间数据,以便轻松为其编制索引和发现它们。
STAC 项 核心原子单位,将单个时空资产表示为 GeoJSON 特征以及日期/时间和参考链接等元数据。
STAC 目录 一个简单灵活的 JSON,它提供一个结构并组织 STAC 项、集合和其他目录等元数据。
STAC 集合 提供用于描述集合中的 STAC 项的附加信息,例如范围、许可证、关键字、提供者等。
STAC API 提供一个 RESTful 终结点用于搜索 OpenAPI 中指定的 STAC 项。