3 unstable releases
0.1.0 | Jan 23, 2025 |
---|---|
0.0.3 | Jan 23, 2025 |
0.0.2 | Jan 23, 2025 |
#368 in Algorithms
327 downloads per month
95KB
1.5K
SLoC
geo-buf
The geo-buf
crate provides methods to buffer (to enlarge or reduce) certain
primitive geometric types in the GeoRust ecosystem via a straight skeleton.
It is forked from the geo-buffer
crate published here
This crate can handle simple polygons properly as well as non-convex polygons, (valid) sets of polygons, and polygons with one or more holes. Note that each method assumes valid primitives as a parameter, but Polygon/MultiPolygon modules do not enforce this validity automatically nor does this crate. (See more details on 'Validity' in Polygon/MultiPolygon and OGC standards.)
This crate uses a straight skeleton to buffer (multi-)polygons. You can also compute a straight skeleton separately by proper methods.
For now, the only viable geometric primitives are Polygon and MultiPolygon (the rest of the primitives will be added as well).
You can choose a style of convex corners with either options; mitter-joined or round-joined. (See more details on the document.)
Quick Guide
The buffer_polygon()
function (resp. buffer_multi_polygon()
function) produces a MultiPolygon
after applying
an buffer operation to the given Polygon
(resp. MultiPolygon
). The absolute value of the argument passed with
determines the distance between each edge of the result multi-polygon and the original input. The sign determines the direction
where the result expands. Positive values mean it goes outward — that is, it inflates, — and negative values mean goes inward
— it deflates —.
Code snippets below is a brief guide to use this crate. Click 'Result' to expand the visualized result. (The red polygon designates the input, and the orange one designates the results.)
Example
use geo_buf::buffer_polygon;
use geo::{Polygon, MultiPolygon, LineString};
let p1 = Polygon::new(
LineString::from(vec![(0., 0.), (1., 0.), (1., 1.), (0., 1.)]), vec![],
);
let p2: MultiPolygon = buffer_polygon(&p1, -0.2);
let expected_exterior = LineString::from(vec![(0.2, 0.2), (0.8, 0.2), (0.8, 0.8), (0.2, 0.8), (0.2, 0.2)]);
assert_eq!(&expected_exterior, p2.0[0].exterior())
Result
Usage
[dependencies]
geo-buf = "0.0.3"
Dependencies
[dependencies]
geo-types = "0.7.15"
geo = "0.29.3"
Main Contributor
License
The geo-buf crate is licensed under the Apache License (Version 2.0)
- Details : LICENSE-APACHE
Contact
- Nicholas Witthoeft / https://github.com/njwitthoeft
Dependencies
~8.5MB
~143K SLoC