你当前正在访问 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 订阅
- 在 Azure 订阅中创建的一个 Azure Data Manager for Energy 实例。
- SEG-Y 文件
- 可以使用 Volve 数据集中的以下任意文件进行测试。 Volve 数据集本身可从 Equinor 获取。
获取 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:
下载并安装 Postman 桌面应用。
将以下文件导入 Postman:
要导入这些文件:
- 选择在 Postman 中导入。
- 将每个文件的 URL 粘贴到搜索框中。
在 Postman 环境中,使用 Azure Data Manager for Energy 实例详细信息中的信息更新 CURRENT VALUE
在 Postman 的左侧菜单中,选择“环境”,然后选择“SEGY 到 ZGY 环境”。
在 CURRENT VALUE 列中,输入获取 Azure Data Manager for Energy 实例详细信息的表中所述的信息。
将 SEG-Y 文件转换为 ZGY 文件的分步过程
提供的 Postman 集合包含用作指南的所有示例调用。 还可以通过单击“代码”按钮来检索 Postman 调用的等效 cURL 命令。
创建法律标记
准备数据集文件
准备数据集的元数据/清单文件/记录文件。 清单文件包括:
- WorkProduct
- SeismicBinGrid
- FileCollection
- SeismicTraceData
转换使用你稍后上传到存储帐户的清单文件来运行转换。 此清单文件是使用多个 JSON 文件并运行某个脚本创建的。 对于 Volve 数据集,此过程的 JSON 文件存储在此处。 有关 Volve 的详细信息(例如数据集定义来自何处),请访问其网站。 完成以下步骤以创建清单文件:
- 克隆该存储库并导航到文件夹
doc/sample-records/volve
- 编辑
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>
- 运行
prepare-records.sh
脚本。 - 输出是一个包含所有对象的 JSON 数组,保存在
all_records.json
文件中。 - 将
filecollection_segy_id
和work_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 将不理解文件的调查几何,除非它还获取SpatialArea
、AsIngestedCoordinates
、SpatialArea
和Wgs84Coordinates
下的 5 个角部顶点。
用户访问
用户需要是 users.datalake.admins
组的一部分。 使用以下调用验证用户的当前权利:
稍后在本教程中,你需要至少一个 owner
和至少一个 viewer
。 这些用户组类似于 data.default.owners
和 data.default.viewers
。 请确保记下列表中的每一项。
如果用户不是所需组的一部分,则可以使用以下示例调用添加所需的权利:email-id: Is(上述调用返回的“ID”值)。
如果尚未创建权利组,请按照如何管理用户中的指导操作。 如果你要查看自己的组,请使用获取给定用户的权利组。 数据访问隔离是使用此专用 ACL(访问控制列表)根据给定数据分区中的对象实现的。
准备子项目
1.将数据分区注册到 Seismic
2.创建子项目
使用先前创建的要添加为 ACL(访问控制列表)管理员和查看者的权利组。 数据分区权利不一定会转换为其中的子项目,因此明确了解每个子项目的 ACL 非常重要,而不管它在哪个数据分区中。
3.创建数据集
注意
仅当不使用 sdutil
上传 Seismic 文件时,才需要此步骤。
上传文件
有两种方法可以上传 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:
上传文件:
需要选择要在 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 调用的请求正文。
运行转换器
触发 ZGY 转换 DAG 以使用上面保存的执行上下文值转换数据。
从 sdutil 提取已上传文件的 ID 令牌,或者在 Postman 中使用访问/持有者令牌。
python sdutil auth idtoken
- 让 DAG 运行到
succeeded
状态。 可以使用工作流状态调用来检查状态。 运行 ID 在上述调用的响应中提供
可以在 sdutil 中使用以下命令查看转换后的文件是否存在,或者使用下面的 Postman API 调用进行查看:
python sdutil ls sd://<data-partition-id>/<subproject>
可以使用 sdutil
cp
命令下载并检查该文件:python sdutil cp sd://<data-partition-id>/<subproject>/<filename.zgy> <local/destination/path>
OSDU® 是 Open Group 的商标。