#seg-y #segy #seismic

sys giga-segy-core

一个包含用于处理 SEG-Y 的基本结构的库

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日

#167 in 地理空间

Download history 90/week @ 2024-03-13 171/week @ 2024-03-20 113/week @ 2024-03-27 144/week @ 2024-04-03 90/week @ 2024-04-10 79/week @ 2024-04-17 103/week @ 2024-04-24 86/week @ 2024-05-01 64/week @ 2024-05-08 131/week @ 2024-05-15 107/week @ 2024-05-22 166/week @ 2024-05-29 349/week @ 2024-06-05 153/week @ 2024-06-12 84/week @ 2024-06-19 282/week @ 2024-06-26

910 每月下载量
用于 2 crates

MIT/Apache

120KB
2.5K SLoC

giga-segy-core

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

giga-segy-coregiga-segy 库工作区的一部分,这是一个用于处理 SEG-Y 格式数据的工具。该 giga-segy-core 库提供了由 giga-segy-ingiga-segy-out 共享的核心结构和功能。

该库相当轻量级,但提供了通过 serde/serde_json 进行序列化和反序列化的选项(功能标志)以及通过 cbindgen 生成 C 绑定的功能。


入门

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

[dependencies]
# I am using `giga-segy-in` for my parser.
giga-segy-in = "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 std::path::PathBuf;
use giga_segy_in::SegyFile;

let dir = PathBuf::from("/my/data/lives/here");
let full_path = dir.join("MyFavouriteSEGYDataset.sgy");

let file = SegyFile::open(name.to_str().unwrap(), Default::default()).unwrap();

// I want to get the text header and dump it to the terminal.
let text_header: &str = file.get_text_header();
println!("Text header: {:?}", text_header);

// Oops. SEG-Y headers look messy if we don't go line by line...
for line in file.get_text_header_lines() {
    println!("{}", line);
}

// Now to have a look at the binary header.
let bin_header = file.get_bin_header();
println!("Bin header: {}", bin_header);

// Get the data in the order of appearance of traces in the file.
// Of course there are more organised ways of doing this,
// but I just want to see the data...
for trace in file.traces_iter() {
    // First a quick peek at the trace header.
    println!("Trace header: {}", trace.get_header());
    // ..And then the data.
    // NB: trace data is not loaded to RAM until this is called.
    let data:Vec<f32> = file.get_trace_data_as_f32_from_trace(trace).unwrap();
    println!("Data: {:?}", data);
}

风味

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


许可证

依赖项

~0.7–2.3MB
~40K SLoC