#geospatial #gis #geography

geo-booleanop

Rust语言的Martinez-Rueda多边形裁剪算法实现

7个版本

0.3.2 2020年6月27日
0.3.0 2020年5月18日
0.2.2 2020年4月28日
0.2.0 2019年7月2日
0.1.4 2019年1月22日

#103 in 地理空间

Download history 320/week @ 2024-03-29 216/week @ 2024-04-05 170/week @ 2024-04-12 322/week @ 2024-04-19 225/week @ 2024-04-26 376/week @ 2024-05-03 289/week @ 2024-05-10 237/week @ 2024-05-17 241/week @ 2024-05-24 235/week @ 2024-05-31 216/week @ 2024-06-07 180/week @ 2024-06-14 182/week @ 2024-06-21 155/week @ 2024-06-28 117/week @ 2024-07-05 258/week @ 2024-07-12

762 每月下载次数
4 crates 中使用

MIT 许可证

105KB
2.5K SLoC

Build Status crates.io

地理形状的布尔运算

这是在Rust语言中实现Martinez-Rueda多边形裁剪算法,以便能够无缝地集成到现有的地理空间库georust/geo

实际上,该实现紧密遵循JavaScript中的"参考"实现: https://github.com/w8r/martinez。大多数概念和固定装置都来自那里。

目前,该实现包含自己的splay树实现(从https://github.com/alexcrichton/splay-rs修改而来),因为JavaScript实现也使用了splay-tree。这可能在将来被重构,以便使用标准集合类型(如BTreeSet)。

重要提示:如何报告错误

请注意(到目前为止),此实现基于JavaScript版本。如果您发现错误(即两个多边形没有产生预期的结果),则原始算法可能存在相同的问题。因此,请首先与https://github.com/w8r/martinez联系并提交报告。一旦有修复方案,我将非常乐意将其移植到Rust版本。

如果您不知道如何这样做(您理解Rust但不理解JavaScript?...我是说...真的?),您可以看看这个示例:https://gist.github.com/untoldwind/e95b7eff8ad61527a5dc4bdd889169b0

即只需创建package.json,将您的示例坐标插入main.js,然后执行npm install,然后执行node main.js

用法

相当简单

geo-booleanop = "0.2.1"
extern create geo;
extern crate geo_booleanop;

use geo_booleanop::boolean::BooleanOp;

fn main() {
    let poly1 : geo::Polygon<f64> = ...
    let poly2 : geo::Polygon<f64> = ...

    let intersect = poly1.intersection(&poly2);
    let union = poly1.union(&poly2);
    let diff = poly1.difference(&poly2);
    let xor = poly1.xor(&poly2);

    ...
}

也支持MultiPolygon。

依赖关系

~1MB