Function buffer_multi_polygon

Source
pub fn buffer_multi_polygon(
    input_multi_polygon: &MultiPolygon,
    distance: f64,
) -> MultiPolygon
Expand description

This function returns the buffered (multi-)polygon of the given multi-polygon. This function creates a miter-joint-like corners around each convex vertex.

§Arguments

  • input_multi_polygon: MultiPolygon to buffer.
  • distance: determine how distant from each edge of original polygon to each edge of the result polygon. The sign will be:
    • + for to enlarge (to add paddings, make bigger) the given polygon, and,
    • - for to deflate (to add margins, make smaller) the given polygon

§Example

use geo_buffer::buffer_multi_polygon;
use geo::{Polygon, MultiPolygon, LineString};

let p1 = Polygon::new(
    LineString::from(vec![(0., 0.), (2., 0.), (2., 2.), (0., 2.)]), vec![],
);
let p2 = Polygon::new(
    LineString::from(vec![(3., 3.), (5., 3.), (5., 5.), (3., 5.)]), vec![],
);
let mp1 = MultiPolygon::new(vec![p1, p2]);
let mp2 = buffer_multi_polygon(&mp1, 1.);
let expected_exterior = LineString::from(vec![(-1., -1.), (3., -1.), (3., 2.), (6., 2.), (6., 6.), (2., 6.), (2., 3.), (-1., 3.), (-1., -1.)]);
assert_eq!(&expected_exterior, mp2.0[0].exterior())