Skip to content

GiGainfosystems/geo-buffer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

geo-buffer

geo-buffer on crates.io Rust 1.68+ Cargo 1.68+ Documentation

The geo-buffer crate provides methods to buffer (to enlarge or reduce) certain primitive geometric types in the GeoRust ecosystem via a straight skeleton.

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_buffer::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-buffer = "0.2.1"

Dependencies

[dependencies]
geo-types = "0.7.9"
geo = "0.24.1"

Main Contributor

License

The geo-buffer crate is licensed under the Apache License (Version 2.0)

Contact

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%