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.