4 个版本

0.4.0 2023 年 10 月 6 日
0.3.2 2023 年 2 月 28 日
0.3.1 2023 年 1 月 12 日
0.3.0 2023 年 1 月 10 日

56地理空间

Download history 85/week @ 2024-03-13 157/week @ 2024-03-20 106/week @ 2024-03-27 136/week @ 2024-04-03 82/week @ 2024-04-10 73/week @ 2024-04-17 93/week @ 2024-04-24 76/week @ 2024-05-01 57/week @ 2024-05-08 124/week @ 2024-05-15 97/week @ 2024-05-22 159/week @ 2024-05-29 343/week @ 2024-06-05 143/week @ 2024-06-12 72/week @ 2024-06-19 275/week @ 2024-06-26

875 每月下载次数

MIT/Apache 许可

225KB
4.5K SLoC

giga-segy-out

一组用于读取和写入符合 SEG 技术标准委员会 SEG-Y_r2.0 标准 的 SEGY 文件的工具,用 Rust 编程语言编写。

giga-segy-outgiga-segy 库工作空间的一部分,该工作空间是处理 SEG-Y 格式数据的工具。该 giga-segy-out 库提供了写入任意大小 SEG-Y 文件的功能,并具有各种选项。

注意:虽然可以使用 giga-segy-ingiga-segy-out 编辑 SEG-Y 文件,但这不是预期用途。

该库非常轻量级,使用的依赖项数量很少。注意:用于生成头结构 C 绑定的功能需要直接使用 giga-segy-core


入门

使用 giga-segy 的基本功能很简单,只需将依赖项添加到您的项目的 Cargo.toml 文件的 [dependencies] 部分。通常,您只需要 giga-segy-ingiga-segy-out,因为它们导出所有必需的组件。但是,对于生成 C 绑定,您将需要 giga-segy-core

[dependencies]
# I am using `giga-segy-out` for my writer.
giga-segy-out = "0.3.1"
# I only need core as a dependency because I want C bindings for the headers.
giga-segy-core = { version = "0.3.1", features = ["gen_cbindings"]}

以下是一个使用 giga-segy 的非常简单的 SEG-Y 解析器的示例。

use giga_segy_out::SegyFile;
use giga_segy_core::{BinHeader, SegySettings, TraceHeader};
use giga_segy_core::enums::*;
use giga_segy_out::create_headers::{CreateBinHeader, CreateTraceHeader};
    
let dir = std::path::PathBuf::from("/keep/my/segy/here");
let path = dir.path().join("my-first-segy.sgy");

// Create a pretty much empty binary header. Only the byte indices are set.
// Everything else is `0` or something to the effect. 
let mut bin_header = BinHeader::default();
// We will attempt to convert all data to this format when writing.
bin_header.sample_format_code = SampleFormatCode::Float32;
// The number of samples in either the binary or trace header must equal data vector length.
bin_header.no_samples = 50;

// Here we create the file and write the tape label, binary header and text header.
let mut file = SegyFile::<SegySettings>::create_file(
    path,
    Default::default(),
    // This is just a fake text header. NB: Text header must be 3200 bytes long.
    std::iter::repeat('x').take(3200).collect::<String>(),
    bin_header,
    None,
).unwrap();

// Now we can add the data.
for i in 0..10 {
    // First we must create the trace header.
    let trace_header = TraceHeader::new_2d(1, 1, 0);
    // Then we take our data... (NB: As an example here is some fake data).
    // (NB: To disable lossy writing (eg f64 as f32), use `add_trace_lossless`)
    let data = (i..(i+50)).map(|x| x as f64).collect::<Vec<f64>>();
    // Finally write the trace, header and data, to the file.
    file.add_trace(trace_header, None, data).unwrap();
}

风味

该库的设计初衷是用于 GiGainfosystems 代码库,因此具有某种“GiGa 风味”。


许可证

依赖关系

~1–1.6MB
~39K SLoC