Module gdal::vector

source ·
Expand description

GDAL Vector Data API

This example opens a vector Dataset and iterates over the various levels of structure within it. The GDAL vector data model is quite sophisticated, so please refer to the GDAL Vector Data Model document for specifics.

use gdal::{Dataset, Metadata};
// The `LayerAccess` trait enables reading of vector specific fields from the `Dataset`.
use gdal::vector::LayerAccess;
use gdal::vector::geometry_type_to_name;
let dataset = Dataset::open("fixtures/roads.geojson")?;
println!("Dataset description: {}", dataset.description()?);
let layer_count = dataset.layer_count();
println!("Number of layers: {layer_count}");
// Unlike raster bands, layers are zero-based
for l in 0..layer_count {
    // We have to get a mutable borrow on the layer because the `Layer::features` iterator
    // requires it.
    let mut layer = dataset.layer(l)?;
    let feature_count = layer.feature_count();
    println!("  Layer {l}, name='{}', features={}", layer.name(), feature_count);
    for feature in layer.features() {
        // The fid is important in cases where the vector dataset is large can you
        // need random access.
        let fid = feature.fid().unwrap_or(0);
        // Summarize the geometry
        let geometry = feature.geometry();
        let geom_type = geometry_type_to_name(geometry.geometry_type());
        let geom_len = geometry.get_point_vec().len();
        println!("    Feature fid={fid:?}, geometry_type='{geom_type}', geometry_len={geom_len}");
        // Get all the available fields and print their values
        for field in feature.fields() {
            let name = field.0;
            let value = field.1.and_then(|f| f.into_string()).unwrap_or("".into());
            println!("      {name}={value}");
        }
    }
}

The resulting (truncated) output looks like this:

Dataset description: fixtures/roads.geojson
Number of layers: 1
  Layer 0, name='roads', features=21
    Feature fid=236194095, geometry_type='Line String', geometry_len=3
      kind=path
      sort_key=
      is_link=no
      is_tunnel=no
      is_bridge=no
      railway=
      highway=footway
    Feature fid=236194098, geometry_type='Line String', geometry_len=3
      ...
...

Modules

Structs

Layer definition
OGR Feature
OGR Geometry
Layer in a vector dataset
Layer in a vector dataset

Enums

Layer capabilities

Traits

An intersection between Geometry/Geometry returning the same type.
Convert object to a GDAL geometry.

Functions