1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
//! [FlatGeobuf](https://bjornharrtell.github.io/flatgeobuf/) is a performant binary encoding //! for geographic data based on [flatbuffers](http://google.github.io/flatbuffers/) that //! can hold a collection of [Simple Features](https://en.wikipedia.org/wiki/Simple_Features) //! including circular interpolations as defined by SQL-MM Part 3. //! //! //! ## Installation //! //! ```ini //! [dependencies] //! flatgeobuf = "0.3" //! ``` //! //! ## Reading a FlatGeobuf file //! //! ```rust //! use flatgeobuf::*; //! # use std::fs::File; //! # use std::io::BufReader; //! //! # fn read_fbg() -> geozero::error::Result<()> { //! let mut filein = BufReader::new(File::open("countries.fgb")?); //! let mut fgb = FgbReader::open(&mut filein)?; //! fgb.select_bbox(8.8, 47.2, 9.5, 55.3)?; //! while let Some(feature) = fgb.next()? { //! let props = feature.properties()?; //! println!("{}", props["name"]); //! } //! # Ok(()) //! # } //! ``` //! //! ## Zero-copy geometry reader //! //! Geometries can be accessed by implementing the `GeomProcessor` trait. //! //! ```rust //! use geozero::{GeomProcessor, error::Result}; //! # use flatgeobuf::*; //! # use std::fs::File; //! # use std::io::BufReader; //! //! struct CoordPrinter; //! //! impl GeomProcessor for CoordPrinter { //! fn xy(&mut self, x: f64, y: f64, _idx: usize) -> Result<()> { //! println!("({} {})", x, y); //! Ok(()) //! } //! } //! //! # fn read_fbg() -> geozero::error::Result<()> { //! # let mut filein = BufReader::new(File::open("../../test/data/countries.fgb")?); //! # let mut fgb = FgbReader::open(&mut filein)?; //! # let geometry_type = fgb.header().geometry_type(); //! # fgb.select_all()?; //! # let feature = fgb.next()?.unwrap(); //! let mut coord_printer = CoordPrinter {}; //! let geometry = feature.geometry().unwrap(); //! geometry.process(&mut coord_printer, geometry_type)?; //! # Ok(()) //! # } //! ``` //! //! ## Zero-copy feature access //! //! Properties can be accessed by implementing the `PropertyProcessor` trait. //! //! ```rust //! use geozero::{PropertyProcessor, ColumnValue, error::Result}; //! # use flatgeobuf::*; //! # use std::fs::File; //! # use std::io::BufReader; //! //! struct PropertyPrinter; //! //! impl PropertyProcessor for PropertyPrinter { //! fn property(&mut self, i: usize, n: &str, v: &ColumnValue) -> Result<bool> { //! println!("columnidx: {} name: {} value: {:?}", i, n, v); //! Ok(false) // don't abort //! } //! } //! //! # fn read_fbg() -> geozero::error::Result<()> { //! # let mut filein = BufReader::new(File::open("../../test/data/countries.fgb")?); //! # let mut fgb = FgbReader::open(&mut filein)?; //! # fgb.select_all()?; //! # let feature = fgb.next()?.unwrap(); //! let mut prop_printer = PropertyPrinter {}; //! let _ = feature.process_properties(&mut prop_printer)?; //! # Ok(()) //! # } //! ``` //! //! ## Reading FlatGeobuf via HTTP //! //! ```rust //! use flatgeobuf::*; //! //! # async fn read_fbg() -> geozero::error::Result<()> { //! let mut fgb = HttpFgbReader::open("https://pkg.sourcepole.ch/countries.fgb").await?; //! fgb.select_bbox(8.8, 47.2, 9.5, 55.3).await?; //! while let Some(feature) = fgb.next().await? { //! let props = feature.properties()?; //! println!("{}", props["name"]); //! } //! # Ok(()) //! # } //! ``` //! mod driver; #[allow(dead_code, unused_imports, non_snake_case)] mod feature_generated; mod file_reader; mod geometry_reader; #[allow(dead_code, unused_imports, non_snake_case)] mod header_generated; mod http_client; mod http_reader; mod packed_r_tree; mod properties_reader; pub use driver::*; pub use feature_generated::flat_geobuf::*; pub use file_reader::*; pub use geometry_reader::*; pub use header_generated::flat_geobuf::*; pub use http_client::*; pub use http_reader::*; pub use packed_r_tree::*; pub use properties_reader::*; pub const VERSION: u8 = 3; pub const MAGIC_BYTES: [u8; 8] = [b'f', b'g', b'b', VERSION, b'f', b'g', b'b', 0];