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 地理空间
762 每月下载次数
在 4 crates 中使用
105KB
2.5K SLoC
地理形状的布尔运算
这是在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