Skip to main content

egml_core/
lib.rs

1//! Core primitives and operations for processing GML (Geography Markup Language) data.
2//!
3//! `egml-core` implements a subset of [ISO 19136 GML 3.2](https://www.ogc.org/standards/gml)
4//! focused on 3-D geometry. It provides the geometry model, bounding-box computations,
5//! triangulation, and distance queries needed to work with GML-based datasets.
6//!
7//! # Module overview
8//!
9//! | Module | Contents |
10//! |--------|----------|
11//! | [`model::base`] | Root GML types: [`AbstractGml`](model::base::AbstractGml), [`Id`](model::base::Id) |
12//! | [`model::basic_types`] | Primitive GML scalar types: [`Code`](model::basic_types::Code), [`Measure`](model::basic_types::Measure) |
13//! | [`model::feature`] | Abstract GML feature class |
14//! | [`model::geometry`] | Full geometry hierarchy: primitives, aggregates, and complexes |
15//! | [`util::plane`] | Plane in R³ — point + unit normal |
16//! | [`util::triangulate`] | Earcut-based polygon triangulation |
17//!
18//! # Geometry hierarchy
19//!
20//! ```text
21//! AbstractGeometry
22//! └── AbstractGeometricPrimitive
23//!     ├── Point
24//!     ├── AbstractCurve  →  LineString
25//!     ├── AbstractSurface  →  Surface, TriangulatedSurface, Polygon, Triangle
26//!     └── AbstractSolid  →  Solid
27//! AbstractGeometricAggregate
28//!     ├── MultiCurve
29//!     └── MultiSurface
30//! CompositeSurface
31//! ```
32//!
33//! # Quick-start example
34//!
35//! ```rust
36//! use egml_core::model::geometry::DirectPosition;
37//! use egml_core::model::geometry::primitives::LinearRing;
38//! use egml_core::model::geometry::Envelope;
39//!
40//! let pts = vec![
41//!     DirectPosition::new(0.0, 0.0, 0.0).unwrap(),
42//!     DirectPosition::new(1.0, 0.0, 0.0).unwrap(),
43//!     DirectPosition::new(1.0, 1.0, 0.0).unwrap(),
44//!     DirectPosition::new(0.0, 1.0, 0.0).unwrap(),
45//! ];
46//! let ring = LinearRing::new(pts).unwrap();
47//! let envelope = Envelope::from_points(ring.points()).unwrap();
48//! assert!(envelope.size_x() > 0.0);
49//! ```
50
51mod error;
52pub mod model;
53pub mod resolver;
54pub mod util;
55
56#[doc(inline)]
57pub use error::Error;