141 lines
5.0 KiB
Rust
141 lines
5.0 KiB
Rust
pub mod structures;
|
||
pub mod read;
|
||
pub mod write;
|
||
pub mod examples;
|
||
use std::vec;
|
||
|
||
use serde::{Deserialize, Serialize};
|
||
use serde_json::json;
|
||
pub use structures::{TimeStruct, SpectralData, ImageInfo, OneIRISData};
|
||
pub use read::{read_time, read_spectral_data, read_image_info, read_iris_file};
|
||
pub use write::*;
|
||
pub use examples::{spectral_data_roundtrip};
|
||
|
||
pub fn explortirisdatatojson(path:&String)->(){
|
||
let irisdata=read_iris_file(path).unwrap();
|
||
|
||
// let irisjson=serde_json::to_string(&irisdata).unwrap(); 转字符串是用两个空格
|
||
let irisjson = serde_json::to_string_pretty(&irisdata).unwrap();
|
||
//将irisjson写入到path中 后缀iris改成.json
|
||
let json_path = path.replace(".iris", ".json");
|
||
|
||
std::fs::write(json_path, irisjson).expect("Unable to write JSON file");
|
||
println!("IRIS data exported to JSON successfully!");
|
||
|
||
|
||
|
||
}
|
||
|
||
pub fn explortirisdatatocsv(path:&String)->(){
|
||
let irisdata=read_iris_file(path).unwrap();
|
||
|
||
//将irisdata转换为csv格式
|
||
let mut csv_data = String::new();
|
||
|
||
let mut envermentinfo=serde_json::json!({});
|
||
let mut devinfo=Vec::new();
|
||
for spectral_info in &irisdata.spectral_info_section {
|
||
if spectral_info["info_type"] == "environment" {
|
||
envermentinfo = spectral_info.clone();
|
||
} else {
|
||
devinfo.push(spectral_info.clone());
|
||
}
|
||
}
|
||
// 添加环境信息 第一行
|
||
csv_data.push_str("EnvironmentalContext");
|
||
//获取环境信息的所有键和值
|
||
for (key, value) in envermentinfo.as_object().unwrap() {
|
||
if key == "info_type" {
|
||
continue; // 跳过info_type
|
||
|
||
}
|
||
if key == "date"{
|
||
//将 yyyy-mm-dd hh:mm:ss 转换为 yyyy_mm_dd hh:mm:ss
|
||
let date_str = value.as_str().unwrap_or("");
|
||
let formatted_date = date_str.replace("-", "_");
|
||
csv_data.push_str(&format!(",{},{}", key, formatted_date));
|
||
continue; // 跳过date
|
||
|
||
}
|
||
//如果value是object类型,则将其转换为字符串
|
||
if value.is_object() {
|
||
for (key1,value1) in value.as_object().unwrap() {
|
||
csv_data.push_str(&format!(",{}", key1));
|
||
csv_data.push_str(&format!(",{}", value1));
|
||
}
|
||
continue; // 跳过object类型的value
|
||
}
|
||
csv_data.push_str(&format!(",{},{}", key, value));
|
||
}
|
||
csv_data.push_str("\n");
|
||
// 添加设备信息
|
||
let mut indexofdevinfo = 1;
|
||
for info in devinfo {
|
||
csv_data.push_str(&format!("FS{}_Info", indexofdevinfo));
|
||
indexofdevinfo += 1;
|
||
//获取设备信息的所有键和值
|
||
for (key, value) in info.as_object().unwrap() {
|
||
if key == "info_type" {
|
||
continue; // 跳过info_type
|
||
}
|
||
if key=="wave_coeff" {
|
||
continue; // 跳过wave_coeff
|
||
}
|
||
if value.is_object() {
|
||
// 如果value是object类型,则将其转换为字符串
|
||
for (key1, value1) in value.as_object().unwrap() {
|
||
csv_data.push_str(&format!(",{}", key1));
|
||
csv_data.push_str(&format!(",{}", value1));
|
||
}
|
||
continue; // 跳过object类型的value
|
||
}
|
||
csv_data.push_str(&format!(",{},{}", key, value));
|
||
}
|
||
csv_data.push_str("\n");
|
||
let wavecoeff1=info["wave_coeff"]["a1"].as_f64().unwrap_or(0.0);
|
||
let wavecoeff2=info["wave_coeff"]["a2"].as_f64().unwrap_or(0.0);
|
||
let wavecoeff3=info["wave_coeff"]["a3"].as_f64().unwrap_or(0.0);
|
||
let wavecoeff4=info["wave_coeff"]["a4"].as_f64().unwrap_or(0.0);
|
||
let bandnum= info["bandnum"].as_u64().unwrap_or(0);
|
||
let wavelist: Vec<f64> = (0..bandnum)
|
||
.map(|i| wavecoeff4 + wavecoeff3 * (i as f64) + wavecoeff2 * (i as f64).powi(2) + wavecoeff1 * (i as f64).powi(3))
|
||
.collect();
|
||
// 添加波长信息
|
||
csv_data.push_str(&format!("Wavelength"));
|
||
for (i, wave) in wavelist.iter().enumerate() {
|
||
csv_data.push_str(&format!(",{}" ,wave));
|
||
}
|
||
csv_data.push_str("\n");
|
||
|
||
|
||
|
||
|
||
}
|
||
// 添加光谱数据
|
||
csv_data.push_str("Data Section\n");
|
||
for SpectralData in &irisdata.spectral_data_section {
|
||
csv_data.push_str(&format!("{}_P{}", SpectralData.sensor_id,SpectralData.fiber_id));
|
||
if SpectralData.valid_flag== 1 {
|
||
csv_data.push_str(",Valid");
|
||
} else {
|
||
csv_data.push_str(",Invalid");
|
||
}
|
||
csv_data.push_str(&format!(",{}", SpectralData.exposure));
|
||
let vector_size = SpectralData.Get_Spectral_Data();
|
||
|
||
for value in &vector_size {
|
||
csv_data.push_str(&format!(",{}", value));
|
||
}
|
||
csv_data.push_str("\n");
|
||
}
|
||
|
||
|
||
|
||
|
||
//将csv_data写入到path中 后缀iris改成.csv
|
||
let csv_path = path.replace(".iris", ".csv");
|
||
|
||
std::fs::write(csv_path, csv_data).expect("Unable to write CSV file");
|
||
println!("IRIS data exported to CSV successfully!");
|
||
|
||
} |