Presentation on theme: "Polyline Simplification Finally, a Topologically Consistent Algorithm!! Alan Saalfeld The Ohio State University."— Presentation transcript:
Polyline Simplification Finally, a Topologically Consistent Algorithm!! Alan Saalfeld The Ohio State University
What is Polyline Simplification? A polyline is a connected non-self-intersecting path in the plane made up of line segments Simplification involves replacing the original polylines with polylines of fewer segments Restrictions are placed on the replacement polylines: –Each should be “close” to the original polyline –All should preserve “sidedness” (topology)
It all boils down to replacing a sub-polyline with a line segment Areas inverted by replacing a subpolyline P ij by a single segment e ij vivi vjvj vivi vjvj
Some “sidedness” is always lost in simplification + = Above line Below line
What makes simplification hard? Not nearness constraints (that’s easy!!) –Douglas-Peucker algorithm (1973)--our model! –Many other algorithms work on isolated lines Topological conflicts can be hard to detect –End-point representation of vectors hinders one’s ability to quickly recognize potential feature conflicts –Conflicting points change as the algorithm runs: alleviating one conflict can result in another! –Don’t want to have to check all possible interactions (O(n 2 )) at every stage of the process
Testing for topological changes Polyline Straight line approximation vs
Sidedness for the straight line segment Below the lineAbove the line
Sidedness for the polyline Below the polylineAbove the polyline
Sidedness differences Above both lines Below both lines Above one line, below the other
Testing for topological correctness A same-sidedness test is identical to inside/outside testing for polygons: namely, determine the parity (odd or even) of the number of crossings (of both the polyline and the simplifying segment) of any ray (vertical is easy) emanating from the test point
What topological problems arise? Polylines “move” when the simplified version replaces the original version –Labeled points wind up on the wrong side of the replacement polyline –Simplified polylines cross other polylines –A simplified polyline may even cross itself
Labeled points wind up on the wrong side of the replacement polyline p q
Soundings wind up on the wrong side of the replacement coastline
Simplified polylines cross other polylines
Contour lines cross contour lines
A simplified polyline crosses itself
The Douglas-Peucker Algorithm Recursive procedure: –Asks “Does a single segment adequately (i.e., within ) represent the current sub- polyline?” –If not, then two segments are chosen, each representing a smaller sub-polyline; and each of them gets asked the same question.
The Douglas-Peucker Algorithm Key properties: –We examine one polyline at a time. –A subset of vertices are chosen. –Vertices are added one at a time and never removed from the growing simplified polyline (a greedy algorithm). –Each new candidate vertex lies on the convex hull of the sub-polyline currently under consideration for being approximated by a single segment. –The new candidate vertex is unique up to ties in distance. –Each recursive call is a “whole new ballgame”.
Douglas-Peucker Node Insertion Tree
Hull Lemma I Any conflicts with the simplified polyline must occur within the closed convex hull of the original polyline. –Proof: Vertices of the simplified polyline form a subset of polyline vertices; a line segment joining two points in a convex region remains entirely inside the convex region.
Hull Lemma II Any line passing completely through the hull must cross the original polyline that generated the hull.
Corollary I to Hull Lemmas I & II not at least one end pointAny line segment that intersects the simplified version, but does not intersect the original polyline, must have at least one end point inside the convex hull of the original polyline.
Corollary II to Hull Lemmas I & II We need only examine the topological correctness of “foreign” point features (including shape points and segment endpoints) lying within the convex hull of the current sub-polyline being represented by a single line segment.
Another way to look at it: What changes if we represent the polyline by two line segments instead of by a single line segment? Replacing a line segment by two segments toggles the topological correctness or incorrectness of all points inside the triangle (and only those points). p q
Effect of replacing sub-polyline by a single segment Points stay on same side(+)Points change side(-)
Effect of replacing sub-polyline by two segments Points stay on same side (+) Points change side (-)
Effect of replacing a single segment simplification with two segments Points keep relative orientation: Points change relative orientation: (same)(different) (same to different or vice versa)
Convergence results Nested subhulls give us ever smaller regions in which to search for conflicts The set of potentially conflicting points decreases with each iteration, except for original polyline points that may conflict with other sub-polylines One may always achieve correct topology with enough iterations
Hull Lemma III Vertices appear in order on both the upper hull and the lower hull
Convex hull generation (Pop CW section back to “2” Push “12” onto both sections) Current clockwise (CW) section: 1, 2, 4, 5, 6, 11 Current counter-clockwise (C-CW) section: 1, 7, 9, (Pop both sections: Pop CW section back to “5”; Pop C-CW section back to “9”; Push “12” onto both sections) 12 (Pop C-CW section back to “2”; Push “12” onto both sections) A double-ended queue (deque): 11, 9, 7, 1, 2, 4, 5, 6, 11
Detecting self-intersections A potential conflict exists when subhulls overlap Subhulls overlap if and only if the right subhull starts off to the left of the left subhull. In that case, at least one subhull must contain points of the other subhull’s polyline.
Our Basic Algorithm Run Douglas-Peucker to get segments that approximate each sub-polyline to within On each resulting segment find the sub-polyline’s hull and identify any external points in that hull Classify all external points by “sidedness” Continue Douglas-Peucker, adding nodes until: –All sidedness is correct (including any “new” external points from other portions of the sub-polyline) (Change “sidedness” flag in one triangle at a time) –Furthest node is within
What’s next? Write code to apply our basic algorithm to real data from NOAA, USGS, and NIMA. Determine performance in terms of: –Number of extra points required to fix topology. –Aesthetic considerations of polylines generated. –Effects due to choices made (e.g., contours). Look at possible alternatives to our basic algorithm.
Variants on the Basic Algorithm Change the next-point selection criterion from “furthest point” to something else (The condition that the selected point belong to the hull may no longer hold.) Correct “sidedness” problems first, then apply the -threshold constraint Choose the next point from among interior points of segments of the polyline (This requires adding vertices to the polyline without changing its trace.) Examine algorithms that do not subsample vertices