use gdal::{vector::LayerAccess, DriverManager};
fn run() -> gdal::errors::Result<()> {
use chrono::Duration;
use gdal::vector::{Defn, Feature, FieldDefn, FieldValue};
use gdal::Dataset;
use std::ops::Add;
use std::path::Path;
println!("gdal crate was build with datetime support");
let dataset_a = Dataset::open(Path::new("fixtures/points_with_datetime.json"))?;
let mut layer_a = dataset_a.layer(0)?;
let path = std::env::temp_dir().join("later.geojson");
let _ = std::fs::remove_file(&path);
let drv = DriverManager::get_driver_by_name("GeoJSON")?;
let mut ds = drv.create_vector_only(path.to_str().unwrap())?;
let lyr = ds.create_layer(Default::default())?;
for field in layer_a.defn().fields() {
let field_defn = FieldDefn::new(&field.name(), field.field_type())?;
field_defn.set_width(field.width());
field_defn.add_to_layer(&lyr)?;
}
let defn = Defn::from_layer(&lyr);
for feature_a in layer_a.features() {
let mut ft = Feature::new(&defn)?;
ft.set_geometry(feature_a.geometry().clone())?;
for field in defn.fields() {
ft.set_field(
&field.name(),
&match feature_a.field(&field.name())?.unwrap() {
FieldValue::DateValue(value) => {
println!("{} = {}", field.name(), value);
FieldValue::DateValue(value.add(Duration::days(1)))
}
FieldValue::DateTimeValue(value) => {
println!("{} = {}", field.name(), value);
FieldValue::DateTimeValue(value.add(Duration::hours(6)))
}
v => v,
},
)?;
}
ft.create(&lyr)?;
}
Ok(())
}
fn main() {
run().unwrap();
}