Project
use qgis_render :: Project;
The central object of the library. A Project owns a parsed .qgs/.qgz
document and gives access to its layers, CRS, extent, print layouts, and the
renderer.
Opening a project
let project = Project :: open ( " map.qgs " ) ? ;
let project = Project :: open ( " map.qgz " ) ? ;
// From bytes, for example an upload
let project = Project :: from_bytes ( & xml_bytes ) ? ;
let project = Project :: open_with ( " map.qgs " , OpenOptions :: new ()
. trust_layer_metadata ( true )
. skip_invalid_layers ( true )
. bad_layer_handler ( | uri | {
eprintln! ( " bad layer: {uri} " );
None // or Some(replacement_uri)
OpenOptions methodDefault Description .trust_layer_metadata(bool)falseSkip recomputing extents and CRS per layer. Faster for large projects. .skip_invalid_layers(bool)falseKeep going when a layer cannot be read. .bad_layer_handler(f)fail Callback for missing data sources; return a replacement URI or None.
Method Returns title()Option<&str>crs()Crsextent()Extentpath()Option<&Path>
Layers
Method Returns layers()Vec<&Layer>layer(name)Option<&Layer>layer_by_id(id)Option<&Layer>layer_tree()&LayerTreelayouts()Vec<&PrintLayout>layout(name)Result<&PrintLayout, QgisError>
let buildings = project . layer ( " buildings " ) . unwrap ();
println! ( " {} features " , buildings . feature_count ());
for group in project . layer_tree () . groups () {
println! ( " {}: {:?} " , group . name (), group . layers ());
Rendering
See the render module for the full surface:
let image = project . render_to_image (RenderSettings :: new ( 1024 , 768 )) ? ;
Errors
Project::open and friends return Result<T, QgisError>:
Variant Cause FileNotFound(path)The file does not exist. InvalidProject { message }The document could not be parsed. BadLayer { name, uri }A data source is missing and no handler replaced it.
See also