3个版本
0.1.2 | 2020年6月5日 |
---|---|
0.1.1 | 2020年4月21日 |
0.1.0 | 2020年4月17日 |
#197 in 地理空间
每月下载量 29次
64KB
833 行代码
rust-geo-repair-polygon
包含以下内容的包
- 一个尝试修复根据geo-validator无效的geo类型(多)多边形的特性
- 一个将所有多边形合并为单个有效多边形的特性
修复(多边形/多边形)
在运行修复时,它将尽力生成符合OGC标准的(多)多边形。一些非常无效的多边形可能仍然失败,但大多数都会通过非常小的变化而有效。
示例
use geo_repair_polygon::repair::Repair;
use geo_types::polygon;
let bowtie = polygon![
(x: 0_f64, y: 0.),
(x: 0., y: 20.),
(x: 20., y: 0.),
(x: 20., y: 20.),
(x: 0., y: 0.)];
let expected = polygon![
(x: 0_f64, y: 0.),
(x: 9.999999999999996, y: 9.999999999999996),
(x: 10.000000000000004, y: 9.999999999999996),
(x: 20., y: 0.),
(x: 20., y: 20.),
(x: 10.000000000000004, y: 10.000000000000004),
(x: 9.999999999999996, y: 10.000000000000004),
(x: 0., y: 20.),
(x: 0., y: 0.)];
let repaired_bowtie = bowtie.repair();
assert!(repaired_bowtie.is_some());
assert_eq!(repaired_bowtie.unwrap(), expected);
连接(多边形)
多边形连接特性将所有多边形合并为单个有效多边形。这可能涉及并集或在小桥中创建非重叠多边形的最接近点之间。
示例
use geo_repair_polygon::join::Join;
use geo_types::{polygon, MultiPolygon};
let separate_polygons: MultiPolygon<f64> = vec![
polygon![
(x: 0_f64, y: 0.),
(x: 10., y: 0.),
(x: 10., y: 10.),
(x: 0., y: 10.),
(x: 0., y: 0.)],
polygon![
(x: 11_f64, y: 11.),
(x: 20., y: 11.),
(x: 20., y: 20.),
(x: 11., y: 20.),
(x: 11., y: 11.)],
].into();
let expected = polygon![
(x: 10_f64, y: 10.),
(x: 11., y: 11.),
(x: 20., y: 11.),
(x: 20., y: 20.),
(x: 11., y: 20.),
(x: 11., y: 11.000000000000004),
(x: 9.999999999999996, y: 10.),
(x: 0., y: 10.),
(x: 0., y: 0.),
(x: 10., y: 0.),
(x: 10., y: 10.)];
let merged = separate_polygons.join();
assert_eq!(merged, expected);
依赖关系
~3MB
~50K SLoC