Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to intelligently degrade or smooth GIS data (simplifying polygons)?

I have detailed US county maps, from the TIGER LINE data sets. How might I sample, smooth, or degrade the data so that I get straighter, more boxy, less "noisy" shapes to represent the geographical features -- in this case just county boundaries and state lines, but maybe also in the general case?

The sampling could happen at rendering time if that can be done efficiently, or a parallel data set could be generated and stored. I am using PostGIS, and the lines are multi-polylines generated by shp2pgsql -- but any solution where you take a squiggly line and reduce it to a smoother line of roughly the same significance to a human interpreter would be very useful.

like image 801
unmounted Avatar asked Dec 04 '09 21:12

unmounted


People also ask

How do you smooth a polygon in Qgis?

Open the layer that you wish to smooth, make the layer editable and select the feature to smooth. From the Advanced Digitising Toolbar choose the Simplify Feature Tool. Then in the map window click on the polygon/polyline object to smooth.

What is the purpose of the Simplify polygons option?

Summary. Simplifies polygon features by removing relatively extraneous vertices while preserving essential shape.

What is smooth polygon?

Each smoothed polygon may have more vertices than its source polygon. The Smoothing Tolerance parameter controls the length of a moving path used in calculating the new vertices. The shorter the length, the more detail that will be preserved and the longer the processing time.


1 Answers

Douglas-Peucker is definitely the right approach. There are some simple ways to access implementations of it in PostGIS and QGIS that I thought I would add here for those who come across this post with a similar question. The goal is to start with something like this:

alt text

and end up with something like this:

alt text

In PostGIS Douglas-Peucker is implemented as simplify, the syntax, detailed here at bostongis.org, is some variant of:

SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table

This worked very well even on the full national dataset, with some few errors that seem due to bad underlying data. It also turns out that in QGIS the menu item Tools > Geometry Tools > Simplify Geometries will export a simplified shapefile of any geometry and add it as a layer to your current project.

This is a pretty fundamental tool-set and I asked the question at too low a level, though it was nice to learn the underlying math, there is a good explanation of that here: http://www.mappinghacks.com/code/PolyLineReduction/, along with sample code that turns out not to be too necessary!

like image 75
unmounted Avatar answered Sep 18 '22 09:09

unmounted