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

如何将 SEG-Y 文件转换为 ZGY

本文介绍如何将 SEG-Y 格式的数据转换为 ZGY 格式。 以行业标准 SEG-Y 格式存储的地震数据可以转换为 ZGY,以便通过 Seismic DMS 在 Petrel 等应用程序中使用。 有关 ZGY 转换常见问题解答,请参阅此处;更多背景信息请参阅 OSDU™ 社区的以下内容:SEG-Y 到 ZGY 的转换。 本教程是有关如何执行转换的分步指南。 请注意,实际生产工作流可能有所不同,可能用作实现转换所需的一组步骤的指南。

先决条件

获取 Azure Data Manager for Energy 实例详细信息

首先从 Azure 门户中的 Azure Data Manager for Energy 实例获取以下信息:

参数 示例
client_id 应用程序(客户端)ID 3dbbbcc2-f28f-44b6-a5ab-xxxxxxxxxxxx
client_secret 客户端机密 _fl******************
tenant_id 目录(租户)ID 72f988bf-86f1-41af-91ab-xxxxxxxxxxxx
base_url 代码 https://<instance>.energy.azure.com
data-partition-id 数据分区 <data-partition-name>

本教程的后面部分需使用此信息。

设置 Postman

接下来,设置 Postman:

  1. 下载并安装 Postman 桌面应用。

  2. 将以下文件导入 Postman:

    要导入这些文件:

    1. 选择在 Postman 中导入

    显示 Postman 中导入按钮的屏幕截图。

    1. 将每个文件的 URL 粘贴到搜索框中。

    显示通过 URL 在 Postman 中导入集合和环境文件的屏幕截图。

  3. 在 Postman 环境中,使用 Azure Data Manager for Energy 实例详细信息中的信息更新 CURRENT VALUE

    1. 在 Postman 的左侧菜单中,选择“环境”,然后选择“SEGY 到 ZGY 环境”

    2. 在 CURRENT VALUE 列中,输入获取 Azure Data Manager for Energy 实例详细信息的表中所述的信息。

    显示在“SEGY 到 ZGY 环境”的何处输入当前值的屏幕截图。

将 SEG-Y 文件转换为 ZGY 文件的分步过程

提供的 Postman 集合包含用作指南的所有示例调用。 还可以通过单击“代码”按钮来检索 Postman 调用的等效 cURL 命令

显示 Postman 中的“代码”按钮的屏幕截图。

创建法律标记的屏幕截图。

准备数据集文件

准备数据集的元数据/清单文件/记录文件。 清单文件包括:

  • WorkProduct
  • SeismicBinGrid
  • FileCollection
  • SeismicTraceData

转换使用你稍后上传到存储帐户的清单文件来运行转换。 此清单文件是使用多个 JSON 文件并运行某个脚本创建的。 对于 Volve 数据集,此过程的 JSON 文件存储在此处。 有关 Volve 的详细信息(例如数据集定义来自何处),请访问其网站。 完成以下步骤以创建清单文件:

  1. 克隆该存储库并导航到文件夹 doc/sample-records/volve
  2. 编辑 prepare-records.sh bash 脚本中的值。 如前所述,法律标记的格式以 Azure Data Manager for Energy 实例名称和数据分区名称为前缀,因此它类似于 <instancename>-<datapartitionname>-<legaltagname>
DATA_PARTITION_ID=<your-partition-id>
ACL_OWNER=data.default.owners@<your-partition-id>.<your-tenant>.com
ACL_VIEWER=data.default.viewers@<your-partition-id>.<your-tenant>.com
LEGAL_TAG=<legal-tag-created>
  1. 运行 prepare-records.sh 脚本。
  2. 输出是一个包含所有对象的 JSON 数组,保存在 all_records.json 文件中。
  3. filecollection_segy_idwork_product_id 值保存在该 JSON 文件中,以便在转换步骤中使用。 这样,转换器就知道要在何处查找 all_records.json 的这些内容。

注意

all_records.json 文件还必须包含每个元素的相应数据。

示例:计算 SeismicBinGrid 的 ZGY 坐标时会用到以下参数:

  • P6BinGridOriginEasting
  • P6BinGridOriginI
  • P6BinGridOriginJ
  • P6BinGridOriginNorthing
  • P6ScaleFactorOfBinGrid
  • P6BinNodeIncrementOnIaxis
  • P6BinNodeIncrementOnJaxis
  • P6BinWidthOnIaxis
  • P6BinWidthOnJaxis
  • P6MapGridBearingOfBinGridJaxis
  • P6TransformationMethod
  • asIngestedCoordinates 块中的 persistableReferenceCrs 如果 SeismicBinGrid 具有 P6 参数且在 AsIngestedCoordinates 下指定了 CRS,则转换本身应能成功完成,但 Petrel 将不理解文件的调查几何,除非它还获取 SpatialAreaAsIngestedCoordinatesSpatialAreaWgs84Coordinates 下的 5 个角部顶点。

用户访问

用户需要是 users.datalake.admins 组的一部分。 使用以下调用验证用户的当前权利:

显示用于在 Postman 中获取用户组的 API 调用的屏幕截图。

稍后在本教程中,你需要至少一个 owner 和至少一个 viewer。 这些用户组类似于 data.default.ownersdata.default.viewers。 请确保记下列表中的每一项。

如果用户不是所需组的一部分,则可以使用以下示例调用添加所需的权利:email-id: Is(上述调用返回的“ID”值)。

显示用于在 Postman 中将用户注册为管理员的 API 调用的屏幕截图。

如果尚未创建权利组,请按照如何管理用户中的指导操作。 如果你要查看自己的组,请使用获取给定用户的权利组。 数据访问隔离是使用此专用 ACL(访问控制列表)根据给定数据分区中的对象实现的。

准备子项目

1.将数据分区注册到 Seismic

显示用于在 Postman 中将数据分区注册为 Seismic 租户的 API 调用的屏幕截图。

2.创建子项目

使用先前创建的要添加为 ACL(访问控制列表)管理员和查看者的权利组。 数据分区权利不一定会转换为其中的子项目,因此明确了解每个子项目的 ACL 非常重要,而不管它在哪个数据分区中。

显示用于在 Postman 中创建 Seismic 子项目的 API 调用的屏幕截图。

3.创建数据集

注意

仅当不使用 sdutil 上传 Seismic 文件时,才需要此步骤。

显示用于在 Postman 中创建 Seismic 数据集的 API 调用的屏幕截图。

上传文件

有两种方法可以上传 SEGY 文件。 一种方法是通过 Postman/curl 调用使用 sasurl。 需要在 OS 上下载 Postman 或安装 Curl。 第二种方法是使用 SDUTIL。 若要通过工具登录到 ADME 实例,需要为该实例生成刷新令牌。 请参阅如何生成身份验证令牌。 或者,也可以修改 SDUTIL 的代码以改用客户端凭据来登录。 如果你尚无此类代码,则需要安装 SDUTIL。 下载代码库并编辑根目录中的 config.yaml。 将此配置文件的内容替换为以下 yaml。

seistore:
    service: '{"azure": {"azureEnv":{"url": "<instance url>/seistore-svc/api/v3", "appkey": ""}}}'
    url: '<instance url>/seistore-svc/api/v3'
    cloud_provider: azure
    env: glab
    auth-mode: JWT Token
    ssl_verify: false
auth_provider:
    azure: '{ 
        "provider": "azure", 
        "authorize_url": "https://login.microsoftonline.com/", "oauth_token_host_end": "/oauth2/v2.0/token", 
        "scope_end":"/.default openid profile offline_access",
        "redirect_uri":"http://localhost:8080",
        "login_grant_type": "refresh_token",
        "refresh_token": "<RefreshToken acquired earlier>" 
        }'
azure:
    empty: none

方法 1:Postman

获取 sasurl:

显示用于在 Postman 中获取 GCS 上传 URL 的 API 调用的屏幕截图。

上传文件:

需要选择要在 API 调用的“正文”部分中上传的文件。

显示用于在 Postman 中上传文件的 API 调用的屏幕截图。

显示用于在 Postman 中上传二进制文件的 API 调用的屏幕截图。

验证上传

显示用于在 Postman 中验证二进制文件已上传的 API 调用的屏幕截图。

方法 2:SDUTIL

sdutil 是用于访问 Seismic 服务的 OSDU 桌面实用工具。 我们使用它来上传/下载文件。 使用 SDUTIL 中的 azure 稳定标记。

注意

运行 python sdutil config init 时,无需在出现 Insert the azure (azureGlabEnv) application key: 提示时输入任何内容。

python sdutil config init
python sdutil auth login
python sdutil ls sd://<data-partition-id>/<subproject>/

将地震数据文件上传到地震数据存储。 下面是一个名为 source.segy 的 SEGY 格式文件的示例:

python sdutil cp <local folder>/source.segy sd://<data-partition-id>/<subproject>/destination.segy

例如:

python sdutil cp ST10010ZC11_PZ_PSDM_KIRCH_FULL_T.MIG_FIN.POST_STACK.3D.JS-017536.segy sd://<data-partition-id>/<subproject>/destination.segy

创建存储记录

all_records.json 文件的内容插入到工作产品、地震跟踪数据、地震网格和文件集合的存储中。 复制该文件的内容并将其粘贴到 API 调用的请求正文。

显示用于在 Postman 中创建存储记录的 API 调用的屏幕截图。

运行转换器

  1. 触发 ZGY 转换 DAG 以使用上面保存的执行上下文值转换数据。

    从 sdutil 提取已上传文件的 ID 令牌,或者在 Postman 中使用访问/持有者令牌。

python sdutil auth idtoken

显示用于在 Postman 中启动转换工作流的 API 调用的屏幕截图。

  1. 让 DAG 运行到 succeeded 状态。 可以使用工作流状态调用来检查状态。 运行 ID 在上述调用的响应中提供

显示用于在 Postman 中检查转换工作流状态的 API 调用的屏幕截图。

  1. 可以在 sdutil 中使用以下命令查看转换后的文件是否存在,或者使用下面的 Postman API 调用进行查看:

    python sdutil ls sd://<data-partition-id>/<subproject>
    

显示用于检查文件是否已转换的 API 调用的屏幕截图。

  1. 可以使用 sdutilcp 命令下载并检查该文件:

    python sdutil cp sd://<data-partition-id>/<subproject>/<filename.zgy> <local/destination/path>
    

OSDU® 是 Open Group 的商标。

后续步骤