Expand description
Read and write ASPRS LAS point cloud data.
§Reading
Create a Reader
from a Path
:
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();
§Prefer BufRead
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
Read points one-by-one with Reader::read
:
use las::{Read, Reader};
let mut reader = Reader::from_path("tests/data/autzen.las").unwrap();
let point = reader.read().unwrap().unwrap();
Or iterate over all points with Reader::points
:
use las::{Read, Reader};
let mut reader = Reader::from_path("tests/data/autzen.las").unwrap();
for wrapped_point in reader.points() {
let point = wrapped_point.unwrap();
println!("Point coordinates: ({}, {}, {})", point.x, point.y, point.z);
if let Some(color) = point.color {
println!("Point color: red={}, green={}, blue={}",
color.red,
color.green,
color.blue,
);
}
}
§Writing
Create a Writer
from a Write
and a Header
:
use std::io::Cursor;
use las::{Writer, Header};
let write = Cursor::new(Vec::new());
let header = Header::default();
let writer = Writer::new(write, header).unwrap();
You can also write out to a path (automatically buffered with BufWriter
):
use las::Writer;
let writer = Writer::from_path("/dev/null", Default::default());
Use a Builder
to customize the las data:
use std::io::Cursor;
use las::{Writer, Builder};
use las::point::Format;
let mut builder = Builder::from((1, 4));
builder.point_format = Format::new(2).unwrap();
let header = builder.into_header().unwrap();
let write = Cursor::new(Vec::new());
let writer = Writer::new(write, header).unwrap();
If compiled with laz you can compress the data written
use std::io::Cursor;
use las::{Writer, Builder};
use las::point::Format;
let mut builder = Builder::from((1, 4));
builder.point_format = Format::new(2).unwrap();
// asking to compress data
builder.point_format.is_compressed = true;
let header = builder.into_header().unwrap();
let write = Cursor::new(Vec::new());
let is_compiled_with_laz = cfg!(feature = "laz");
let result = Writer::new(write, header);
if is_compiled_with_laz {
assert_eq!(result.is_ok(), true);
} else {
assert_eq!(result.is_err(), true);
}
The from_path will use the extension of the output file to determine wether the data should be compressed or not ‘laz’ => compressed ‘las’ => not compressed
§Prefer BufWrite
Just like the Reader
, your performance will improve greatly if you use a BufWrite
instead
of just a Write
.
§Write points
Write points one at a time:
use std::io::Cursor;
use las::{Write, Writer, Point};
let mut writer = Writer::default();
let point = Point { x: 1., y: 2., z: 3., ..Default::default() };
writer.write(point).unwrap();
Re-exports§
pub use crate::feature::Feature;
pub use crate::header::Builder;
pub use crate::header::Header;
pub use crate::point::Point;
pub use crate::reader::Read;
pub use crate::reader::Reader;
pub use crate::vlr::Vlr;
pub use crate::writer::Write;
pub use crate::writer::Writer;
Modules§
- Programatically determine whether a las version supports a feature.
- A
Header
describes the configuration and properties of las data. - Attributed three-dimensional points.
- Raw structures that map directly to their definitions in the las format specifications.
- Read las points.
- Variable length records are used to store additional metadata not defined in the header.
- Write las points.
Structs§
- Minimum and maximum bounds in three dimensions.
- A RGB color value.
- A scale and an offset that transforms xyz coordinates.
- An xyz collection.
- LAS version.
Enums§
- Crate-specific error enum.
- The meaning of GPS time in the point records.
Type Aliases§
- Crate-specific result type.