14 unstable releases (6 breaking)
0.6.0 | Mar 23, 2024 |
---|---|
0.5.0 | Aug 8, 2023 |
0.4.0 | Feb 27, 2023 |
0.3.0 | Apr 28, 2021 |
0.0.1 | Jan 21, 2015 |
#33 in Geospatial
16,496 downloads per month
Used in 10 crates
(9 directly)
200KB
4.5K
SLoC
shapefile-rs
Rust library to read & write shapefiles .dbf files supported via the dbase crate
let mut reader = shapefile::Reader::from_path(filename).unwrap();
for result in reader.iter_shapes_and_records() {
let (shape, record) = result.unwrap();
println ! ("Shape: {}, records: ", shape);
for (name, value) in record {
println ! ("\t{}: {:?}, ", name, value);
}
println ! ();
}
You can check out examples in the examples folder
lib.rs
:
Read & Write Shapefile in Rust
A shapefile is in reality a collection of 3 mandatory files:
- .shp (feature geometry aka shapes)
- .shx (index of feature geometry)
- .dbf (attribute information, aka records)
As different shapefiles can store different type of shapes (but one shapefile can only store the same type of shapes) This library provide two ways of reading the shapes:
- Reading as Shape and then do a
match
to handle the different shapes - Reading directly as concrete shapes (ie Polyline, PolylineZ, Point, etc) this of course only works if the file actually contains shapes that matches the requested type
Shapefiles shapes
The Point
, PointM
and PointZ
are the base data types of shapefiles,
the other shapes (Polyline, Multipoint
, ...) are collections of these type of points
with different semantics (multiple parts or no, closed parts or no, ...)
With the exception of the Multipatch
shape, each shape as a variant for each type
of point. (Multipatch
always uses PointZ
)
Eg: For the polyline, there is Polyline
, PolylineM
, PolylineZ
Reading
For more details see the reader module
Writing
To write a file see the writer module
Features
The geo-types
feature can be enabled to have access to From
and TryFrom
implementations allowing to convert (or try to) back and forth between shapefile's type and
the one in geo_types
Dependencies
~1MB
~22K SLoC