#多边形 #合并 #修复 #多重多边形 #图形

geo-repair-polygon

一个尝试修复根据geo-validator无效的geo类型(多)多边形的特性和一个将多边形合并为有效多边形的特性

3个版本

0.1.2 2020年6月5日
0.1.1 2020年4月21日
0.1.0 2020年4月17日

#197 in 地理空间

每月下载量 29次

MIT许可证

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