Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement SpadeBoolops trait #1089

Open
wants to merge 33 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e30504c
expose stitch in geo
RobWalt Aug 13, 2024
5525afe
seal StitchTriangles properly
RobWalt Aug 13, 2024
2bd7cc7
fixup docs
RobWalt Aug 13, 2024
379023b
chore(cleanup): use pr suggestions
RobWalt Jan 19, 2024
6008142
chore: move change from changelog to unreleased
RobWalt Dec 12, 2023
58a4d3e
Add inverse method to AffineTransform
urschrei Oct 16, 2023
c8ab39d
feat: implement boolops based on spade
RobWalt Oct 11, 2023
f70e7c2
refactor: create directory for spade boolops
RobWalt Oct 28, 2023
1aa3433
refactor: split up spade boolops module
RobWalt Oct 28, 2023
722081f
chore: add spade boolops unit test data in wkt form
RobWalt Oct 28, 2023
d160549
chore: implement simple wkt loader fn for tests
RobWalt Oct 28, 2023
a76599f
chore: implement test helpers and write first proper test
RobWalt Oct 28, 2023
84393ed
chore: add second test which fails for some reason
RobWalt Oct 28, 2023
9e62731
fix: big oopsie: called the wrong triangulation method
RobWalt Oct 28, 2023
1060fab
chore: added missing num vertex assertions
RobWalt Oct 28, 2023
c7efaca
chore: added test definition macro and further tests
RobWalt Oct 28, 2023
89d7936
chore: add some more tests
RobWalt Oct 28, 2023
70f383f
chore: add all tests and restructure test layout
RobWalt Oct 28, 2023
1104e8d
chore: rename data dir to test_data
RobWalt Oct 28, 2023
bcc809a
chore: add legacy tests
RobWalt Oct 31, 2023
c160f82
chore: add test for issue 1103
RobWalt Oct 31, 2023
047bf3b
chore: add test for issue 1053
RobWalt Oct 31, 2023
c171ffc
chore: add must_use attributes to boolean operations
RobWalt Oct 31, 2023
71a946e
chore: add test for issue 1064
RobWalt Oct 31, 2023
e6162fe
chore: add tests for issue 913
RobWalt Oct 31, 2023
2aad752
chore: add first iteration of docs
RobWalt Oct 31, 2023
70926a0
feat: implement cheap intersection checks for MultiPolygon performance
RobWalt Nov 2, 2023
5df5957
chore: fixes after rebase
RobWalt Nov 6, 2023
c7c54c4
chore: add changelog entry
RobWalt Dec 12, 2023
9fc916c
chore: fix things from merge && adjust tests
RobWalt Dec 12, 2023
fd272b7
chore(rebase): cleanup after rebase
RobWalt Jan 19, 2024
4f643a8
fix errors after rebase
RobWalt Jul 26, 2024
a50681e
fix export
RobWalt Aug 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 2 additions & 15 deletions geo/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
* <https://github.com/georust/geo/pull/1201>
* Add `StitchTriangles` trait which implements a new kind of combining algorithm for `Triangle`s
* <https://github.com/georust/geo/pull/1087>
* Add `SpadeBoolops` trait which implements panic-less boolean operations based on triangulation
* <https://github.com/georust/geo/pull/1089>

## 0.28.0

Expand Down Expand Up @@ -48,21 +50,6 @@
* <https://github.com/georust/geo/pull/1123>
* PERF: small improvements to TriangulateSpade trait
* <https://github.com/georust/geo/pull/1122>
* POSSIBLY BREAKING: Minimum supported version of Rust (MSRV) is now 1.70
* <https://github.com/georust/geo/pull/1134>
* Add topological equality comparison method:
* <https://github.com/georust/geo/pull/1133>
* Add docs to Relate trait
* <https://github.com/georust/geo/pull/1135>
* Add remaining Relate predicates
* <https://github.com/georust/geo/pull/1136>
* Update rstar to v0.12.0
* Implement `CoordsIter` for arrays and slices. This is useful when you'd like to use traits
implemented for `CoordsIter` without re-allocating (e.g., creating a `MultiPoint`).
* Add `compose_many` method to `AffineOps`
* <https://github.com/georust/geo/pull/1148>
* Point in `Triangle` and `Rect` performance improvemnets
* <https://github.com/georust/geo/pull/1057>

## 0.27.0

Expand Down
22 changes: 12 additions & 10 deletions geo/src/algorithm/affine_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ use std::{fmt, ops::Mul, ops::Neg};
/// line_string![(x: 2.0, y: 2.0),(x: 4.0, y: 4.0)]
/// );
/// ```
pub trait AffineOps<T: CoordNum> {
pub trait AffineOps<T: CoordNum + Neg> {
/// Apply `transform` immutably, outputting a new geometry.
#[must_use]
fn affine_transform(&self, transform: &AffineTransform<T>) -> Self;
Expand All @@ -45,7 +45,9 @@ pub trait AffineOps<T: CoordNum> {
fn affine_transform_mut(&mut self, transform: &AffineTransform<T>);
}

impl<T: CoordNum, M: MapCoordsInPlace<T> + MapCoords<T, T, Output = Self>> AffineOps<T> for M {
impl<T: CoordNum + Neg, M: MapCoordsInPlace<T> + MapCoords<T, T, Output = Self>> AffineOps<T>
for M
{
fn affine_transform(&self, transform: &AffineTransform<T>) -> Self {
self.map_coords(|c| transform.apply(c))
}
Expand Down Expand Up @@ -124,16 +126,16 @@ impl<T: CoordNum, M: MapCoordsInPlace<T> + MapCoords<T, T, Output = Self>> Affin
/// ```

#[derive(Copy, Clone, PartialEq, Eq)]
pub struct AffineTransform<T: CoordNum = f64>([[T; 3]; 3]);
pub struct AffineTransform<T: CoordNum + Neg = f64>([[T; 3]; 3]);

impl<T: CoordNum> Default for AffineTransform<T> {
impl<T: CoordNum + Neg> Default for AffineTransform<T> {
fn default() -> Self {
// identity matrix
Self::identity()
}
}

impl<T: CoordNum> AffineTransform<T> {
impl<T: CoordNum + Neg> AffineTransform<T> {
/// Create a new affine transformation by composing two `AffineTransform`s.
///
/// This is a **cumulative** operation; the new transform is *added* to the existing transform.
Expand Down Expand Up @@ -376,7 +378,7 @@ impl<T: CoordNum + Neg> AffineTransform<T> {
}
}

impl<T: CoordNum> fmt::Debug for AffineTransform<T> {
impl<T: CoordNum + Neg> fmt::Debug for AffineTransform<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("AffineTransform")
.field("a", &self.0[0][0])
Expand All @@ -389,13 +391,13 @@ impl<T: CoordNum> fmt::Debug for AffineTransform<T> {
}
}

impl<T: CoordNum> From<[T; 6]> for AffineTransform<T> {
impl<T: CoordNum + Neg + Mul> From<[T; 6]> for AffineTransform<T> {
fn from(arr: [T; 6]) -> Self {
Self::new(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5])
}
}

impl<T: CoordNum> From<(T, T, T, T, T, T)> for AffineTransform<T> {
impl<T: CoordNum + Neg + Mul> From<(T, T, T, T, T, T)> for AffineTransform<T> {
fn from(tup: (T, T, T, T, T, T)) -> Self {
Self::new(tup.0, tup.1, tup.2, tup.3, tup.4, tup.5)
}
Expand Down Expand Up @@ -489,7 +491,7 @@ impl<U: CoordFloat> AffineTransform<U> {
#[cfg(any(feature = "approx", test))]
impl<T> RelativeEq for AffineTransform<T>
where
T: AbsDiffEq<Epsilon = T> + CoordNum + RelativeEq,
T: AbsDiffEq<Epsilon = T> + CoordNum + RelativeEq + Neg,
{
#[inline]
fn default_max_relative() -> Self::Epsilon {
Expand Down Expand Up @@ -525,7 +527,7 @@ where
#[cfg(any(feature = "approx", test))]
impl<T> AbsDiffEq for AffineTransform<T>
where
T: AbsDiffEq<Epsilon = T> + CoordNum,
T: AbsDiffEq<Epsilon = T> + CoordNum + Neg,
T::Epsilon: Copy,
{
type Epsilon = T;
Expand Down
8 changes: 6 additions & 2 deletions geo/src/algorithm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,12 @@ pub mod simplify_vw;
pub use simplify_vw::{SimplifyVw, SimplifyVwIdx, SimplifyVwPreserve};

/// Stitch together triangles with adjacent sides. Alternative to unioning triangles via BooleanOps.
#[allow(dead_code)]
pub(crate) mod stitch;
pub mod stitch;
pub use stitch::StitchTriangles;

/// Boolean Operations based on constrained triangulation
pub mod spade_boolops;
pub use spade_boolops::SpadeBoolops;

/// Transform a geometry using PROJ.
#[cfg(feature = "use-proj")]
Expand Down
19 changes: 19 additions & 0 deletions geo/src/algorithm/spade_boolops/error.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
use crate::stitch::LineStitchingError;
use crate::triangulate_spade::TriangulationError;
use geo_types::MultiPolygon;

#[derive(Debug)]
pub enum SpadeBoolopsError {
TriangulationError(TriangulationError),
StitchError(LineStitchingError),
}

impl std::fmt::Display for SpadeBoolopsError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}

impl std::error::Error for SpadeBoolopsError {}

pub type SpadeBoolopsResult<T> = Result<MultiPolygon<T>, SpadeBoolopsError>;
15 changes: 15 additions & 0 deletions geo/src/algorithm/spade_boolops/helper.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
use geo_types::{Point, Triangle};

use crate::triangulate_spade::SpadeTriangulationFloat;
use crate::{Centroid, Contains, Scale};

pub fn contains_triangle<P, T>(p: &P, tri: &Triangle<T>) -> bool
where
P: Contains<Point<T>> + Scale<T>,
T: SpadeTriangulationFloat,
{
// this scaling is to prevent tiny triangles that can potentially occur on the outer boundary
// of the poly to be included into the result
p.scale(<T as From<f32>>::from(0.9999))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this will have the opposite effect on concave polygons

.contains(&tri.centroid())
}
10 changes: 10 additions & 0 deletions geo/src/algorithm/spade_boolops/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
pub mod error;
pub mod helper;
pub mod trait_def;
pub mod trait_impl;

pub use error::SpadeBoolopsError;
pub use trait_def::SpadeBoolops;

#[cfg(test)]
pub mod tests;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-18.5 1.1148996,-18.5 -4.554501,2.8999994 -4.242997,2.8999991 0.99029636,-18.5 1.1148996)),POLYGON((-18.5 6.85,2.899999 7.5,2.8999996 -9,-18.5 -9,-18.5 6.85)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-3.466464 0.9141397,-3.4187205 2.2369194,-10.025221 2.4116945,-10.090524 -0.048262052,-3.466464 0.9141397)),POLYGON((-10.090524 -0.048262052,-3.466464 0.9141397,-3.2192326 7.763933,-9.885997 7.6562467,-10.090524 -0.048262052)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-7.0219817 4.148702,-9.554118 0.5560738,-12.323914 1.7359772,-12.50497 4.1031623,-7.0219817 4.148702)),POLYGON((-7.392356 9.639786,-7.0219817 4.148702,-9.554118 0.5560738,-12.230486 0.5144694,-12.91143 9.417376,-7.392356 9.639786)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-0.70531404 1.6649652,-13.588498 1.7720098,-12.138729 -0.48307407,-8.598329 -1.9073501,-0.70531404 1.6649652)),POLYGON((-10.151698 -0.48403928,-8.598329 -1.9073501,-8.529049 -0.4848275,-10.151698 -0.48403928)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((0 0,5 0,5 2.5,2.5 2.5,2.5 7.5,5 7.5,5 10,0 10,0 0)),POLYGON((10 10,5 10,5 7.5,7.5 7.5,7.5 2.5,5 2.5,5 0,10 0,10 10)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0),(2.5 2.5,5 2.5,5 5,2.5 5,2.5 2.5)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-3.383462 0.16653681,-10.665726 -0.6342745,-12.017065 -6.967066,-2.395382 -6.1546187,-3.383462 0.16653681)),POLYGON((-14 2.7,0.39999905 3.949998,0.39999962 -8.95,-13.999999 -8.95,-14 2.7)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((10 10,9 10,9 11,1 11,1 10,0 10,0 0,10 0,10 10)),POLYGON((7.5 7.5,6 7.5,6 8,4 8,4 7.5,2.5 7.5,2.5 2.5,7.5 2.5,7.5 7.5)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-12.503868 -2.113399,-6.3538685 -1.113399,-7.1038685 1.4866009,-11.703869 1.4866009,-12.503868 -2.113399)),POLYGON((-16.1 5.2000003,-1.5 7.3,-1.5500001 -5.15,-15.85 -5.35,-16.1 5.2000003)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-8.340716 -0.29907477,-8.790716 0.4509253,-11.703869 1.4866009,-12.503868 -2.113399,-8.340716 -0.29907477)),POLYGON((-12.503868 -2.113399,-6.3538685 -1.113399,-7.1038685 1.4866009,-11.703869 1.4866009,-12.503868 -2.113399)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-10.579803 -13.75,-10.579803 -4.753352,-20.800001 -5.1445236,-20.800001 -25.355036,-16.0562 -25.355036,-16.056202 -13.75,-10.579803 -13.75)),POLYGON((-14.379889 -0.2594614,-8.145693 -0.5267252,-7.7950563 -8.07181,-14.332443 -7.882949,-14.379889 -0.2594614)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-20.800001 -5.1445236,-20.800001 -25.355036,-16.0562 -25.355036,-16.056202 -13.75,-10.579803 -13.75,-10.579803 -7.99136,-14.332443 -7.882949,-14.351022 -4.897693,-20.800001 -5.1445236)),POLYGON((-8.145693 -0.5267252,-7.7950563 -8.07181,-10.579803 -7.99136,-10.579803 -4.753352,-14.351022 -4.897693,-14.379889 -0.2594614,-8.145693 -0.5267252)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-20.800001 -5.1445236,-20.800001 -25.355036,-16.0562 -25.355036,-16.056202 -13.75,-10.579803 -13.75,-10.579803 -7.99136,-14.332443 -7.882949,-14.351022 -4.897693,-20.800001 -5.1445236)),POLYGON((-20.800001 7.25,-20.800001 -13.75,-14.295929 -13.75,-14.332443 -7.882949,-14.379889 -0.2594614,-14.423152 6.6920257,-20.800001 7.25)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((9.334806 -60.840466,12.238895 -61.407673,12.238895 -70.09725,7.701256 -70.09725,9.334806 -60.840466)),POLYGON((14.961479 -61.770683,13.509435 -70.09725,12.261583 -70.09725,12.261583 -61.407673,14.961479 -61.770683)),POLYGON((7.338245 -71.75349,7.701256 -70.09725,12.238895 -70.09725,12.238895 -72.456825,7.338245 -71.75349)),POLYGON((13.146423 -72.66102,12.261583 -72.456825,12.261583 -70.09725,13.509435 -70.09725,13.146423 -72.66102)))
1 change: 1 addition & 0 deletions geo/src/algorithm/spade_boolops/test_data/simple_union.wkt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((9.356785 -60.8609,12.261583 -61.42824,12.261583 -70.11994,7.722836 -70.11994,9.356785 -60.8609)),POLYGON((14.962138 -61.791344,13.509739 -70.11994,12.261583 -70.11994,12.261583 -61.42824,14.962138 -61.791344)))
1 change: 1 addition & 0 deletions geo/src/algorithm/spade_boolops/test_data/star.wkt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((-2.875 -0.25,-5.225 1.9,-4.375 -1.75,-7.375 -1.3000001,-3.575 -3.6000001,-7.0750003 -4.85,-3.825 -5.5,-6.425 -8.3,-2.575 -6.55,-2.575 -9.6,-0.725 -7.4500003,1.225 -9.7,1.025 -7.25,3.825 -6.9500003,2.075 -5,4.725 -2.25,1.875 -2.25,3.425 1,0.22500001 -0.45000002,0.125 2.45,-1.6750001 0.05,-2.575 3,-2.875 -0.25)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((0 0,5 0,5 2.5,2.5 2.5,2.5 7.5,5 7.5,5 12.5,2.5 12.5,2.5 17.5,5 17.5,5 20,0 20,0 0)),POLYGON((10 20,5 20,5 17.5,7.5 17.5,7.5 12.5,5 12.5,5 7.5,7.5 7.5,7.5 2.5,5 2.5,5 0,10 0,10 20)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((12.937555 -26.36888,9.630956 -28.502926,9.842015 -47.076164,22.036566 -47.076164,21.989664 -44.613804,22.76355 -44.05098,29.611258 -47.076164,51.16278 -47.076164,51.16278 -61.0999,52.40569 -61.662724,54.21142 -60.91229,60.42595 -63.82022,60.590107 -63.445004,67.179855 -66.51709,67.78958 -68.557335,69.90018 -69.44848,71.58865 -68.58079,81.93057 -73.3648,81.10979 -75.053276,85.35442 -76.74175,86.03451 -75.264336,91.96763 -77.96121,97.61933 -64.73481,12.937555 -26.36888)),POLYGON((49.966778 -60.583977,49.56811 -58.8486,47.926537 -58.098164,44.66684 -56.620747,44.971703 -56.011017,35.68508 -51.696022,35.450573 -49.679234,30.408594 -47.427933,29.611258 -47.076164,51.16278 -47.076164,51.16278 -61.0999,49.966778 -60.583977)),POLYGON((44.127464 -116.11608,25.577677 -116.04573,13.406576 -116.16299,10.686254 -113.34886,10.451743 -89.59293,10.240684 -73.64622,9.93582 -56.409687,9.842015 -47.076164,22.036566 -47.076164,22.153822 -57.11322,22.177273 -59.927345,22.97461 -59.903896,22.99806 -64.64101,23.795395 -64.59411,23.912651 -69.143616,25.132107 -69.09671,25.179008 -71.98119,23.959553 -71.98119,24.12371 -77.28113,25.343166 -77.32803,25.413519 -80.44702,24.170612 -80.44702,24.194063 -81.43197,24.264418 -84.12884,25.390068 -84.05849,25.413519 -87.88101,24.33477 -87.90446,24.428574 -91.51592,25.624578 -91.49247,25.601128 -95.12739,24.522379 -95.15084,24.663084 -101.50607,41.524395 -101.365364,41.524395 -100.63838,42.579693 -99.676895,45.511078 -99.65344,46.566376 -100.63838,46.613277 -101.31847,51.16278 -101.29501,51.16278 -116.04573,44.127464 -116.11608)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((44.127464 -116.11608,25.577677 -116.04573,13.406576 -116.16299,10.686254 -113.34886,10.451743 -89.59293,10.240684 -73.64622,9.93582 -56.409687,9.842015 -47.076164,22.036566 -47.076164,22.153822 -57.11322,22.177273 -59.927345,22.97461 -59.903896,22.99806 -64.64101,23.795395 -64.59411,23.912651 -69.143616,25.132107 -69.09671,25.179008 -71.98119,23.959553 -71.98119,24.12371 -77.28113,25.343166 -77.32803,25.413519 -80.44702,24.170612 -80.44702,24.194063 -81.43197,24.264418 -84.12884,25.390068 -84.05849,25.413519 -87.88101,24.33477 -87.90446,24.428574 -91.51592,25.624578 -91.49247,25.601128 -95.12739,24.522379 -95.15084,24.663084 -101.50607,41.524395 -101.365364,41.524395 -100.63838,42.579693 -99.676895,45.511078 -99.65344,46.566376 -100.63838,46.613277 -101.31847,51.16278 -101.29501,51.16278 -116.04573,44.127464 -116.11608)),POLYGON((44.971703 -56.011017,44.66684 -56.620747,47.926537 -58.098164,49.56811 -58.8486,49.966778 -60.583977,52.40569 -61.662724,54.21142 -60.91229,60.42595 -63.82022,60.590107 -63.445004,65.608635 -65.79011,67.179855 -66.51709,67.78958 -68.557335,69.90018 -69.44848,71.58865 -68.58079,76.63063 -70.925896,81.93057 -73.3648,81.10979 -75.053276,85.35442 -76.74175,86.03451 -75.264336,91.96763 -77.96121,97.61933 -64.73481,26.609524 -32.935177,12.937555 -26.36888,9.630956 -28.502926,9.842015 -47.076164,22.036566 -47.076164,21.989664 -44.613804,22.76355 -44.05098,30.408594 -47.427933,35.450573 -49.679234,35.68508 -51.696022,44.971703 -56.011017)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((51.16278 -61.0999,52.40569 -61.662724,54.21142 -60.91229,60.42595 -63.82022,60.590107 -63.445004,67.179855 -66.51709,67.78958 -68.557335,69.90018 -69.44848,71.58865 -68.58079,81.93057 -73.3648,81.10979 -75.053276,85.35442 -76.74175,86.03451 -75.264336,91.96763 -77.96121,97.61933 -64.73481,88.89554 -60.88884,51.16278 -43.86337,51.16278 -61.0999)),POLYGON((89.90393 -115.506355,89.90393 -101.48262,82.14163 -101.43572,82.11818 -100.56803,81.156685 -99.84105,77.99079 -99.8176,77.28726 -100.52113,77.21691 -101.43572,71.91697 -101.34192,71.94042 -102.30341,67.27366 -102.373764,67.320564 -99.958305,65.186516 -100.028656,63.28698 -100.028656,63.310432 -101.31847,61.97372 -101.365364,51.16278 -101.29501,51.16278 -116.04573,89.90393 -115.506355)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((147.21832 -41.893482,147.21832 -47.076164,139.80779 -47.076164,147.21832 -41.893482)),POLYGON((138.35382 -46.98236,139.29187 -47.076164,138.33037 -47.076164,138.35382 -46.98236)),POLYGON((153.66736 3.6484768,153.19835 -4.559394,152.16649 -17.410574,151.11119 -29.112654,150.57182 -35.796204,151.22845 -36.78115,152.23685 -38.235115,156.8567 -34.905064,165.25218 -28.831242,172.00609 -23.976871,178.52548 -33.521454,159.17836 -47.076164,147.21832 -47.076164,147.21832 -41.893482,149.02405 -40.603672,148.03911 -39.19661,147.21832 -37.9537,147.21832 4.117498,153.66736 3.6484768)),POLYGON((146.86656 -37.46123,146.18648 -36.476288,139.33876 -36.030716,143.04404 4.422362,147.21832 4.117498,147.21832 -37.9537,146.86656 -37.46123)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((89.90393 -115.506355,89.90393 -101.48262,82.14163 -101.43572,82.11818 -100.56803,81.156685 -99.84105,77.99079 -99.8176,77.28726 -100.52113,77.21691 -101.43572,71.91697 -101.34192,71.94042 -102.30341,67.27366 -102.373764,67.320564 -99.958305,65.186516 -100.028656,63.28698 -100.028656,63.310432 -101.31847,61.97372 -101.365364,51.32694 -101.27156,61.856464 -115.95193,89.90393 -115.506355)),POLYGON((91.96763 -77.96121,97.61933 -64.73481,88.89554 -60.88884,26.609524 -32.935177,12.937555 -26.36888,9.630956 -28.502926,9.842015 -47.076164,22.036566 -47.076164,21.989664 -44.613804,22.76355 -44.05098,29.611258 -47.076164,51.16278 -47.076164,51.16278 -61.0999,52.40569 -61.662724,54.21142 -60.91229,60.42595 -63.82022,60.590107 -63.445004,67.179855 -66.51709,67.78958 -68.557335,69.90018 -69.44848,71.58865 -68.58079,81.93057 -73.3648,81.10979 -75.053276,85.35442 -76.74175,86.03451 -75.264336,91.96763 -77.96121)),POLYGON((44.127464 -116.11608,25.577677 -116.04573,13.406576 -116.16299,10.686254 -113.34886,10.451743 -89.59293,10.240684 -73.64622,9.93582 -56.409687,9.842015 -47.076164,22.036566 -47.076164,22.153822 -57.11322,22.177273 -59.927345,22.97461 -59.903896,22.99806 -64.64101,23.795395 -64.59411,23.912651 -69.143616,25.132107 -69.09671,25.179008 -71.98119,23.959553 -71.98119,24.12371 -77.28113,25.343166 -77.32803,25.413519 -80.44702,24.170612 -80.44702,24.194063 -81.43197,24.264418 -84.12884,25.390068 -84.05849,25.413519 -87.88101,24.33477 -87.90446,24.428574 -91.51592,25.624578 -91.49247,25.601128 -95.12739,24.522379 -95.15084,24.663084 -101.50607,41.524395 -101.365364,41.524395 -100.63838,42.579693 -99.676895,45.511078 -99.65344,46.566376 -100.63838,46.613277 -101.31847,51.16278 -101.29501,51.16278 -116.04573,44.127464 -116.11608)),POLYGON((49.966778 -60.583977,49.56811 -58.8486,47.926537 -58.098164,44.66684 -56.620747,44.971703 -56.011017,35.68508 -51.696022,35.450573 -49.679234,30.408594 -47.427933,29.611258 -47.076164,51.16278 -47.076164,51.16278 -61.0999,49.966778 -60.583977)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((12.937555 -26.36888,9.630956 -28.502926,9.842015 -47.076164,22.036566 -47.076164,21.989664 -44.613804,22.76355 -44.05098,29.611258 -47.076164,58.315357 -47.076164,47.152653 -42.034187,26.609524 -32.935177,12.937555 -26.36888)),POLYGON((77.240364 -55.61235,88.89554 -60.88884,97.61933 -64.73481,91.96763 -77.96121,86.03451 -75.264336,85.35442 -76.74175,81.10979 -75.053276,81.93057 -73.3648,76.63063 -70.925896,71.58865 -68.58079,69.90018 -69.44848,67.78958 -68.557335,67.179855 -66.51709,65.608635 -65.79011,60.590107 -63.445004,60.42595 -63.82022,54.21142 -60.91229,52.40569 -61.662724,51.16278 -61.0999,51.16278 -47.076164,58.315357 -47.076164,77.240364 -55.61235)),POLYGON((51.32694 -101.27156,61.97372 -101.365364,63.310432 -101.31847,63.28698 -100.028656,65.186516 -100.028656,67.320564 -99.958305,67.27366 -102.373764,71.94042 -102.30341,71.91697 -101.34192,77.21691 -101.43572,77.28726 -100.52113,77.99079 -99.8176,81.156685 -99.84105,82.11818 -100.56803,82.14163 -101.43572,89.90393 -101.48262,89.90393 -115.506355,80.26555 -115.67052,61.856464 -115.95193,51.16278 -116.04573,51.16278 -101.29501,51.32694 -101.27156)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((9.630956 -28.502926,12.937555 -26.36888,26.609524 -32.935177,47.152653 -42.034187,50.62341 -43.62886,51.16278 -43.86337,51.16278 -47.076164,29.611258 -47.076164,22.76355 -44.05098,21.989664 -44.613804,22.036566 -47.076164,9.842015 -47.076164,9.630956 -28.502926)),POLYGON((58.315357 -47.076164,51.16278 -47.076164,51.16278 -43.86337,58.315357 -47.076164)))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GEOMETRYCOLLECTION(POLYGON((51.16278 21.65889,73.7696 14.6001215,75.20012 29.139778,75.55189 34.369366,68.61037 39.458244,51.16278 48.979374,51.16278 21.65889)),POLYGON((37.092148 48.979374,51.105915 54.115463,37.045246 65.81724,36.904537 54.959396,37.092148 48.979374)),POLYGON((37.56117 25.903532,37.39701 38.801617,37.092148 48.979374,51.16278 48.979374,51.16278 21.65889,37.56117 25.903532)))
Loading
Loading