-
Notifications
You must be signed in to change notification settings - Fork 165
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
Validity Handling #275
Validity Handling #275
Commits on Jan 13, 2022
-
Added tests that should fail because of issue #218, fixed floating po…
…int error on buffer_with_style test
Configuration menu - View commit details
-
Copy full SHA for b647059 - Browse repository at this point
Copy the full SHA b647059View commit details -
Improve geos multipolygon creation performance (#251)
Replace a manual validity check on MultiPolygon, which was iterating on each polygon combination, by a direct call of GEOSisValid.
Configuration menu - View commit details
-
Copy full SHA for 4da6790 - Browse repository at this point
Copy the full SHA 4da6790View commit details -
Added Segment#segment_intersection to get points from intersections, …
…created SweeplineIntersector class to compute intersections on groups of segments. Segment#segment_intersection sligtly modifies the code from intersects_segment? and actually computes the intersection point (or nil if none). Edge cases for colinear segments are handled by return a single point from the intersection. intersects_segment? was modified to just check if segment_intersection is not nil. A SweeplineIntersector class was added that uses a basic sweepline algorithm to compute the intersections in a set of segments. This should be faster or as fast as the current validate_geometry intersection algorithm being used (more testing needed), since it only compares segments where their y-range includes the y value of the event the sweepline is handling. There are options to return all intersections or proper intersections that will filter out the connections in LineStrings. In the future, it is possible to make a Sweepline class and have the SweeplineIntersector inherit from it. This would allow us to use the sweepline more generically in other applications (some polygon clipping algos use a sweepline).
Configuration menu - View commit details
-
Copy full SHA for af7e100 - Browse repository at this point
Copy the full SHA af7e100View commit details -
Move SweeplineIntersector to its own file. Remove Queue, replace obse…
…rved_segments with Set, condense event creation branching.
Configuration menu - View commit details
-
Copy full SHA for 59466e9 - Browse repository at this point
Copy the full SHA 59466e9View commit details -
Configuration menu - View commit details
-
Copy full SHA for 291f85c - Browse repository at this point
Copy the full SHA 291f85cView commit details -
Add PlanarGraph Implementation
Adds a PlanarGraph implementation based on a Doubly Connected Edge List (DCEL). A DCEL is a graph data structure of vertices and half-edges. Half-edges are directed edges where one segment can be represented by a pair of half-edges. Half-edges are linked so that faces can be traversed (although faces are not stored). The PlanarGraph accepts an array of segments to build it and additional edges can be added via the add_edge and add_edges methods. When edges are added, intersections are automatically recomputed and handled. When possible, existing half-edges are preserved so that geometries can reference those half-edges. Also adds GeometryGraph which is a convenient way to interface geometries to a planar graph and provides ways to find important half-edges in each geometry. I haven't done a full performance test yet, but one notable area of improvement is that everytime an edge or edges is added, all of the half-edges are re-linked when we likely only need to re-link the half-edges that originate at new vertices.
Configuration menu - View commit details
-
Copy full SHA for 92f085f - Browse repository at this point
Copy the full SHA 92f085fView commit details -
Change HalfEdge#each to cycle, simplify some methods, raise on invali…
…d class in GeometryGraph
Configuration menu - View commit details
-
Copy full SHA for 152d79c - Browse repository at this point
Copy the full SHA 152d79cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 49592e9 - Browse repository at this point
Copy the full SHA 49592e9View commit details -
Configuration menu - View commit details
-
Copy full SHA for 91cd3ec - Browse repository at this point
Copy the full SHA 91cd3ecView commit details -
Change structure to Cartesian::PlanarGraph, Cartesian::PlanarGraph::H…
…alfEdge and Cartesian::GeometryGraph
Configuration menu - View commit details
-
Copy full SHA for e54e976 - Browse repository at this point
Copy the full SHA e54e976View commit details -
Configuration menu - View commit details
-
Copy full SHA for 44b965f - Browse repository at this point
Copy the full SHA 44b965fView commit details -
Change HalfEdge#and_connected to return and enumerator instead of set…
… if no block is given
Configuration menu - View commit details
-
Copy full SHA for 50c7302 - Browse repository at this point
Copy the full SHA 50c7302View commit details -
Add ImplHelper::ValidOp module to provide a uniform interface for val…
…idity checking of geometries. The ValidOp module provides methods based on simple geometric predicates to determine validity for a geometry and can be used as a fallback or overridden. The module can be overriden fully (in the case of Cartesian polygons) or just by implementing #invalid_reason (FFI and CAPI factories). Removes #validate_geometry from all classes and replaces them with #prepare_geometry. Any required validations were moved to the constructors. Adds the ValidityTest module to test/common to ensure that all classes of geometries validate in the same way.
Configuration menu - View commit details
-
Copy full SHA for c979c1d - Browse repository at this point
Copy the full SHA c979c1dView commit details -
Configuration menu - View commit details
-
Copy full SHA for bb6ca22 - Browse repository at this point
Copy the full SHA bb6ca22View commit details -
Split ValidOp into ValidOp and ValidOpHelpers
ValidOp is to be included in feature classes and has the invalid_reason and valid? methods, as well as feature type specific methods that walk through the validity flow for each geometry type. ValidOpHelpers is a collection of functions where an object is passed to them. These perform the specific checks and return the invalid reason if applicable. Also added overrides for both modules for cartesian functions.
Configuration menu - View commit details
-
Copy full SHA for c2e93eb - Browse repository at this point
Copy the full SHA c2e93ebView commit details -
Configuration menu - View commit details
-
Copy full SHA for 7833e63 - Browse repository at this point
Copy the full SHA 7833e63View commit details -
Implement #crosses? and #intersects? between spherical line strings a…
…nd fix tests, ValidOp so the spherical factory passes validity checks
Configuration menu - View commit details
-
Copy full SHA for 16f61f6 - Browse repository at this point
Copy the full SHA 16f61f6View commit details -
Configuration menu - View commit details
-
Copy full SHA for d36cdf3 - Browse repository at this point
Copy the full SHA d36cdf3View commit details -
Configuration menu - View commit details
-
Copy full SHA for 9c30b7c - Browse repository at this point
Copy the full SHA 9c30b7cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 6e19eab - Browse repository at this point
Copy the full SHA 6e19eabView commit details -
Add validity check per method and validity API (#276)
Co-authored-by: Keith Doggett <keith.doggett887@gmail.com>
Configuration menu - View commit details
-
Copy full SHA for 2827250 - Browse repository at this point
Copy the full SHA 2827250View commit details -
Configuration menu - View commit details
-
Copy full SHA for 23d64d2 - Browse repository at this point
Copy the full SHA 23d64d2View commit details
Commits on Jan 14, 2022
-
I've added our `.yardopts` to make sure our options are used by rubydoc.info I've made examples point images to github to be sure we always see an image, wether we're on rubydoc or github. Completed TODOs. Added Klaxit to the gallery :)
Configuration menu - View commit details
-
Copy full SHA for 41228d5 - Browse repository at this point
Copy the full SHA 41228d5View commit details
Commits on Jan 15, 2022
-
Configuration menu - View commit details
-
Copy full SHA for c098786 - Browse repository at this point
Copy the full SHA c098786View commit details -
Configuration menu - View commit details
-
Copy full SHA for 05d39d2 - Browse repository at this point
Copy the full SHA 05d39d2View commit details
Commits on Jan 19, 2022
-
Fix make_valid and operator methods
(1) `make_valid` should raise when it cannot produce a geometry, not return nil. (2) +, -, * operator methods would generate uncallable `unsafe_+` methods, hence we alias those with text.
Configuration menu - View commit details
-
Copy full SHA for fccbf67 - Browse repository at this point
Copy the full SHA fccbf67View commit details
Commits on Jan 24, 2022
-
Configuration menu - View commit details
-
Copy full SHA for 22dd912 - Browse repository at this point
Copy the full SHA 22dd912View commit details