#多边形 #偏移 #布尔 #地理

geo-clipper

多边形上的布尔运算

11个版本 (7个破坏性版本)

0.8.0 2023年10月19日
0.7.3 2022年3月16日
0.7.1 2021年11月13日
0.7.0 2021年7月10日
0.1.0 2019年8月19日

#215算法

Download history 1180/week @ 2024-04-14 1152/week @ 2024-04-21 798/week @ 2024-04-28 948/week @ 2024-05-05 1242/week @ 2024-05-12 1256/week @ 2024-05-19 1025/week @ 2024-05-26 1484/week @ 2024-06-02 1362/week @ 2024-06-09 1698/week @ 2024-06-16 1406/week @ 2024-06-23 1933/week @ 2024-06-30 1268/week @ 2024-07-07 1257/week @ 2024-07-14 1203/week @ 2024-07-21 1942/week @ 2024-07-28

5,713 每月下载量
7 crates 中使用

ISC 许可证

45KB
1K SLoC

geo-clipper

此crate允许对多边形执行布尔和偏移操作。

crate.io docs.rs

它使用clipper-sys,这是Clipper C++版本的绑定。

示例

以下示例展示了如何计算两个多边形的交集。提供了intersection方法(以及differenceunionxor)由Clipper trait提供,该trait实现了geo-types

use geo_types::{Coord, LineString, Polygon};
use geo_clipper::Clipper;

let subject = Polygon::new(
    LineString(vec![
        Coord { x: 180.0, y: 200.0 },
        Coord { x: 260.0, y: 200.0 },
        Coord { x: 260.0, y: 150.0 },
        Coord { x: 180.0, y: 150.0 },
    ]),
    vec![LineString(vec![
        Coord { x: 215.0, y: 160.0 },
        Coord { x: 230.0, y: 190.0 },
        Coord { x: 200.0, y: 190.0 },
    ])],
);

let clip = Polygon::new(
    LineString(vec![
        Coord { x: 190.0, y: 210.0 },
        Coord { x: 240.0, y: 210.0 },
        Coord { x: 240.0, y: 130.0 },
        Coord { x: 190.0, y: 130.0 },
    ]),
    vec![],
);

let result = subject.intersection(&clip, 1.0);

依赖项

~1MB
~23K SLoC