将文件发布到时空资源目录
这个 SpatioTemporal Asset Catalog (STAC) 规范系列旨在标准化地理空间资产元数据的结构和查询方式。“时空资产”是代表地球在特定地点和时间的信息的任何文件。最初的重点是卫星图像的场景,但现在的规范涵盖了广泛的用途,包括飞机和无人机等来源以及高光谱光学、合成孔径雷达(SAR)、视频、点云、激光雷达、数字高程模型(DEM)、矢量、机器学习标签以及NDVI和马赛克等复合数据。堆栈被有意设计为具有最小核心和灵活扩展机制,以支持广泛的用例集。该规范在过去几年中已经成熟,并在许多生产部署中使用。
下面介绍用于浏览STAC目录的pygeapi内置提供程序:
文件系统提供程序
文件系统提供程序通过服务器的文件系统将STAC实现为地理空间文件浏览器,支持任何级别的文件/目录嵌套/层次结构。
在pygeoapi中配置STAC只需指向 data
提供程序属性,并指定允许的文件类型:
连接示例
my-stac-resource:
type: stac-collection
...
providers:
- type: stac
name: FileSystem
data: /Users/tomkralidis/Dev/data/gdps
file_types:
- .grib2
备注
rasterio
和 fiona
用于描述地理空间文件。
pygeometa元数据控制文件
pyGeoapi的STAC文件系统功能支持 pygeometa MCF文件与数据文件驻留在同一目录中。如果找到MCF文件,它将用作生成STAC项元数据的一部分(例如,名为的文件 birds.csv
具有关联的 birds.yml
文件)。如果没有找到MCF文件,那么pygeometa将通过配置和读取数据的属性来生成STAC项元数据。
发布ESRI shapefile
Esri shapefile发布需要指定所有必需的组件文件扩展名 (.shp
, .shx
, .dbf
)与提供商 file_types
选项。
数据访问示例
堆叠根页面*http://localhost:5000/stac
从这里,相应地浏览文件系统。
Azure Blob存储提供程序
AzureBlobStorage提供程序通过Azure Blob存储将STAC实现为地理空间文件浏览器,支持任何级别的文件/目录嵌套/层次结构。
在pygeapi中配置STAC只需将 data
属性添加到给定容器,并指定允许的文件类型:
连接示例
my-stac-resource:
type: stac-collection
...
providers:
- type: stac
name: AzureBlobStorage
data: my-container-name
file_types:
- .grib2
备注
这个 AZURE_STORAGE_CONNECTION_STRING 环境变量是必需的,应进行相应设置。
备注
rasterio
和 fiona
用于描述地理空间文件。
Hateoas提供商
HATEOAS(Hypermedia As The Engine Of Application State)是一种实现REST应用程序的方法,它允许客户端通过浏览超媒体链接动态导航到适当的资源。这种类型的导航类似于Web导航,并且需要非常精确的数据结构,必须遵守该结构才能使HATEOAS提供程序正确运行。
有三个组件规范(Catalog、Collection、Item)共同组成了核心时空资产目录规范。一个项将单个时空资源表示为GeoJSON。目录规范提供了结构元素,用于对项目和集合进行分组。集合是目录,它添加更多所需的元数据并描述一组相关项目。
链接到子目录和条目的完整目录结构,以及它们指向其父目录和根目录的链接,必须使用 相对的 HATEOAS提供程序的URL工作正常。结构性的 rel 类型包括 root , 父级 , 儿童 , item ,以及 征集 。资产链接必须是 绝对的 其他链接可以是绝对的,特别是当它们描述的资源在目录中没有太大意义时,如派生的_From或甚至许可证(将许可证包括在目录中可能很好,但一些许可证位于规范的在线位置,直接引用更有意义)。这使得可以将完整的目录(不包括资产)下载或复制到另一个位置,并且仍然有效。这也意味着没有自我链接,因为该链接必须是绝对的。
因此,必须遵守以下规则:
根文档(目录/集合)必须位于包含静态目录的目录树的根目录中。
目录必须被命名为Catalog.json,集合必须被命名为Collection tion.json。
子目录或子集合必须存储在其父目录的子目录中(并且只有一个比文档父目录更深的子目录,例如.../Sample/sub1/Catalog.json)。
限制目录或集合中的项数,根据数据集的相关情况进行分组/分区。
在您的层次结构的每个“级别”中一致地使用结构元素(目录和集合)。例如,如果层次结构的第2级和第4级仅包含集合,则不要在第2级和第4级添加目录。
项目必须命名为< id >.json。
项目必须存储在其父目录或集合的子目录(更深一级)中。子目录必须具有相同的名称(< id >)作为不带 .json 分机。这意味着每个项目都包含在唯一的子目录中。
到实际资产的链接必须是绝对URL。
文件示例
目录.json文件的结构
{
"id": "STAC-Catalog",
"stac_version": "1.0.0",
"description": "A description of the STAC Catalog",
"links": [
{
"rel": "root",
"href": "./catalog.json",
"type": "application/json"
},
{
"rel": "child",
"href": "./eo4ce/catalog.json",
"type": "application/json"
},
{
"rel": "child",
"href": "./dem/catalog.json",
"type": "application/json"
}
],
"stac_extensions": [],
"title": "STAC Catalog"
}
上面的代码显示了根目录。这些子星表还有一个额外的 rel
指向父级的条目。
{
"id": "dem",
"stac_version": "1.0.0",
"description": "Digital Elevation Data",
"links": [
{
"rel": "root",
"href": "../catalog.json",
"type": "application/json"
},
{
"rel": "child",
"href": "./hrdsm/collection.json",
"type": "application/json"
},
{
"rel": "parent",
"href": "../catalog.json",
"type": "application/json"
}
],
"stac_extensions": [],
"title": "DEM"
}
集合.json文件的结构
集合类似于带有额外字段的目录。
{
"id": "hrdsm",
"stac_version": "1.0.0",
"description": "High Resolution Digital Surface Model",
"links": [
{
"rel": "root",
"href": "../../catalog.json",
"type": "application/json"
},
{
"rel": "item",
"href": "./arcticdem-frontiere-0/arcticdem-frontiere-0.json",
"type": "application/json"
},
{
"rel": "item",
"href": "./arcticdem-frontiere-9/arcticdem-frontiere-9.json",
"type": "application/json"
},
{
"rel": "parent",
"href": "../catalog.json",
"type": "application/json"
}
],
"stac_extensions": [],
"extent": {
"spatial": {
"bbox": [
[
-142.76516601842533,
59.65274347822059,
-138.41658819177135,
69.81052152420365
]
]
},
"temporal": {
"interval": [
[
"2014-09-03T14:00:00Z",
"2020-09-28T15:49:00.559166Z"
]
]
}
},
"license": "proprietary"
}
Structure of the Item <id>.json file
下面的示例显示名为的文件的内容 arcticdem-frontiere-0.json 。
{
"type": "Feature",
"stac_version": "1.0.0",
"id": "arcticdem-frontiere-0",
"properties": {
"layer:ids": [
"dem-hrdsm"
],
"collection": "hrdsm",
"datetime": "2020-09-28T15:48:56.483794Z"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-140.27389595735178,
59.65274347822059
],
[
-138.41658819177135,
59.65274347822059
],
[
-138.41658819177135,
60.579416456816496
],
[
-140.27389595735178,
60.579416456816496
],
[
-140.27389595735178,
59.65274347822059
]
]
]
},
"links": [
{
"rel": "root",
"href": "../../../catalog.json",
"type": "application/json"
},
{
"rel": "collection",
"href": "../collection.json",
"type": "application/json"
},
{
"rel": "parent",
"href": "../collection.json",
"type": "application/json"
}
],
"assets": {
"image": {
"href": "http://absolute/path/to/the/ressource/arcticdem-frontiere-0.tif",
"type": "image/tiff; application=geotiff; profile=cloud-optimized",
"roles": []
}
},
"bbox": [
-140.27389595735178,
59.65274347822059,
-138.41658819177135,
60.579416456816496
],
"stac_extensions": [],
"collection": "hrdsm"
}
HATEOAS配置
只需将HATEOAS STAC提供程序指向 data
Provider属性设置为本地目录或远程URL,并在FILE_TYPE属性中指定根文件名(Catalog.json或Collection tion.json):
连接示例
my-remote-stac-resource:
type: stac-collection
...
providers:
- type: stac
name: Hateoas
data: https://datacube-dev-data-public.s3.ca-central-1.amazonaws.com/catalog/water
file_types: catalog.json
my-local-stac-resource:
type: stac-collection
...
providers:
- type: stac
name: Hateoas
data: tests/stac
file_types: catalog.json