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
//! Natively read and write [ASPRS //! LAS](https://www.asprs.org/committee-general/laser-las-file-format-exchange-activities.html) data. //! //! # Reading //! //! `Reader`s can be created from paths: //! //! ``` //! use las::Reader; //! let reader = Reader::from_path("tests/data/autzen.las").unwrap(); //! ``` //! //! Or anything that implements `Read`: //! //! ``` //! use std::io::BufReader; //! use std::fs::File; //! # use las::Reader; //! let read = BufReader::new(File::open("tests/data/autzen.las").unwrap()); //! let reader = Reader::new(read).unwrap(); //! ``` //! //! Your performance will be better if your `Read` is actually a `BufRead`. `Reader::from_path` //! takes care of this for you, but `Reader::new` doesn't. //! //! Read points one-by-one with `read`: //! //! ``` //! # use las::Reader; //! # let mut reader = Reader::from_path("tests/data/autzen.las").unwrap(); //! let point = reader.read().unwrap().unwrap(); //! ``` //! //! # Writing //! //! Create a `Writer` from something that implements `Write` and a `Header`: //! //! ``` //! use std::io::Cursor; //! use las::Writer; //! let writer = Writer::new(Cursor::new(Vec::new()), Default::default()).unwrap(); //! ``` //! //! Use the `Header` to customize the output data formats: //! //! ``` //! # use std::io::Cursor; //! # use las::Writer; //! use las::Header; //! let header = Header { version: (1, 3), point_format: 2.into(), ..Default::default() }; //! let writer = Writer::new(Cursor::new(Vec::new()), header).unwrap(); //! ``` //! //! You can also write out to a path (automatically buffered): //! //! ``` //! # use las::Writer; //! let writer = Writer::from_path("/dev/null", Default::default()); //! ``` //! //! Write points one at a time: //! //! ``` //! # use std::io::Cursor; //! # use las::Writer; //! # let mut writer = Writer::new(Cursor::new(Vec::new()), Default::default()).unwrap(); //! use las::Point; //! let point = Point { x: 1., y: 2., z: 3., ..Default::default() }; //! writer.write(&point).unwrap(); //! ``` #![deny(missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts, trivial_numeric_casts, unsafe_code, unstable_features, unused_import_braces, unused_qualifications)] extern crate byteorder; extern crate chrono; pub mod header; pub mod point; pub mod reader; pub mod vlr; mod bounds; mod error; mod transform; mod utils; mod vector; mod writer; pub use bounds::Bounds; pub use error::Error; pub use header::Header; pub use reader::Reader; pub use point::Point; pub use transform::Transform; pub use vector::Vector; pub use vlr::Vlr; pub use writer::Writer; /// Crate-specific result type. pub type Result<T> = std::result::Result<T, Error>;