wbvector 0.1.1

Pure-Rust library for reading and writing vector GIS formats
Documentation
//! GPX read/write example.
//!
//! Usage: cargo run --example gpx_io

use wbvector::feature::{FieldDef, FieldType, Layer};
use wbvector::geometry::{Coord, Geometry, GeometryType};
use wbvector::{gpx, Result};
use std::path::PathBuf;

fn data_dir() -> PathBuf {
    let dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
        .join("data")
        .join("gpx_io");
    std::fs::create_dir_all(&dir).unwrap();
    dir
}

fn main() -> Result<()> {
    let mut layer = Layer::new("tracks")
        .with_geom_type(GeometryType::LineString)
        .with_epsg(4326);

    layer.add_field(FieldDef::new("gpx_type", FieldType::Text));
    layer.add_field(FieldDef::new("name", FieldType::Text));
    layer.add_field(FieldDef::new("time", FieldType::DateTime));

    layer.add_feature(
        Some(Geometry::line_string(vec![
            Coord::xy(-79.40, 43.70),
            Coord::xy(-79.39, 43.71),
            Coord::xy(-79.38, 43.72),
        ])),
        &[
            ("gpx_type", "trk".into()),
            ("name", "Morning Run".into()),
            ("time", "2026-03-12T07:30:00Z".into()),
        ],
    )?;

    let dir = data_dir();
    let path = dir.join("tracks.gpx");
    gpx::write(&layer, &path)?;
    let back = gpx::read(&path)?;

    println!("Wrote {} feature(s) to {}", layer.len(), path.display());
    println!("Read back {} feature(s), {} field(s)", back.len(), back.schema.len());

    Ok(())
}