Menu

#289 Generalization will remove full polygons for high tolerance

closed-fixed
nobody
5
2013-04-06
2013-03-14
Sean
No

Take for instance a US Zip and set it to .01 or even as low as .0001 and you will end up with less polygons than the original file. You will actually remove full zip codes. As you turn the tolerance down they gradually appear back. Upon physical inspection of the shapefile it is clear that it is the smallest zips in the file that get stripped first. Other opensource tools have this issue as well.

Discussion

1 2 > >> (Page 1 of 2)
  • michael michaud

    michael michaud - 2013-03-14

    Jukka is right about the difference between DouglasPeuckerSimplifier and TopologyPreservingSimplifier.
    However, I don't remember I have seen geometries disappearing with DouglasPeuckerSimplifier.
    On the other hand, I just check our Simplify Polygon Coverage plugin and found a flaw which could explain that small polygons disappear (just added some comments in the code of SimplifyPolygonCoveragePlugIn). I've no patch yet and I'll try to find a solution with the help of Stefan.

     
  • Jukka Rahkonen

    Jukka Rahkonen - 2013-03-14

    I made some tests. I had originally 84031 polygons and 28 of them has self-intersections. Simplify Polygon Coverage gave only 82970 simplified polygons in 35 minutes. There were no topology errors in those.
    Spatialite (or geos and thus fundamentally JTS) found the same 28 invalid polygons from source data. Function Simplify converted all the 84031 polygons in 15 seconds and in the resultset there were 3663 invalid polygons. Function SimplifyPreserveTopology took 95 seconds and result contained 24 invalid polygons.

    People tend to believe that SimplifyPreserveTopology preserves layer topology. However, it preserves topology only feature by feature and the resulting layer may have gaps and overlaps. If OJ will use this JTS function some day I would suggest showing a comment about layer topology for the users.

     
  • michael michaud

    michael michaud - 2013-03-14

    Thanks for the tests Jukka,

    Simplify : did you check that you had 84031 polygons in the result.
    SimplifyPreserveTopology : I know there are cases where a small hole finishes out of the exterior ring after simplification. If you have stranger cases, it maybe worth pointing them to Martin.
    Simplyfy Polygon Coverage : the flaw I identified is about polygons which have only two edges in the graph, and the simplification of both edges give the same result. The polygon disappears.

    Agree to add a warning for simplify plugin. It i more difficult with Analysis>Geometry functions

     
  • Jukka Rahkonen

    Jukka Rahkonen - 2013-03-14

    Both Spatialite functions created 84031 polygons. Of those 3663 were invalid when Simplify was used, and 24 when SimplifyPreserveTopology was used. However, for the latter also the original features had topology errors and SimplifyPreserveTopology seems to be reliable.

     
  • Jukka Rahkonen

    Jukka Rahkonen - 2013-03-14

    I did not even remember that generalization D-P and Preserve Topology can be found from Analysis - Geometry functions because the upper menu level Tools - Generalization meets the eye first.

     
  • Sean

    Sean - 2013-03-14

    Just to add my detailed testing of simplifying a 500Mb zip layer. Also, please note that this DP algorithm seems to do really well with the layer level topology support. This is the reason we use it.

    Original zip - 30363 polygons 524Mb
    Original zip Unioned to remove muli-entries - 30357 polygons 524Mb (manually verified correct)

    simp01 - 32853
    simp01 - unioned - 29885 out of expected 30357 (16Mb)

    simp005 - 34751
    simp005 - unioned - 30164 out of expected 30357

    simp001 - 40331
    simp001 - unioned - 30346 out of expected 30357

    simp0005 - 43170
    simp0005 - unioned - 30351 out of expected 30357 (65Mb)

    simp0001 - 46372
    simp0001 unioned- 30356 out of expected 30357 (158Mb)

    simp00001 - 46500
    simp00001 - unioned - 30357 out of expected 30357 back to original polygon number (400Mb)

     
  • Sean

    Sean - 2013-03-14

    One item I forgot to mention is that other tools that have had issues similar in nature have suggested that it occurs when the ring size is less than the tolerance and the entire poly gets wiped rather than ignored.

     
  • michael michaud

    michael michaud - 2013-03-16

    Hi,
    I found another problem in the attribute tranfer.

    My dataset :
    36673 polygons
    36572 simplified polygons only (101 polygon missing)
    593 polygons have inherited attributes from a feature which is not the source polygon

    I'm on the way to find a solution for both problem.
    It will not be 100% robust but should solve most problems.

    stay tuned

    Michaël

     
  • michael michaud

    michael michaud - 2013-03-17

    Should be mostly fixed in r3349 (with a peformance penalty of nearly 50%).
    Please try it so I can close the ticket.

     
  • Sean

    Sean - 2013-03-19

    Original Zip

     
  • Sean

    Sean - 2013-03-19

    Simplified001

     
  • Sean

    Sean - 2013-03-19

    Simplified001-Unioned

     
  • Sean

    Sean - 2013-03-19

    Sorry if this shows as multiple posts... the file uploads keep removing my comments...

    The simplification keeps the correct number of polygons now after simplify and union. I have attached 3 files that show an issue. In a multipolygon case, the smaller polygon is getting assigned to a larger nearby polygon when the smaller polygon falls within the bounds of that other polygon.

    3 files attached. Original zip, simplified, simplified unioned.

    60643 has two polys, the smaller disappears but then gets reassigned the poly from 60827 and 60827 also keeps its duplicate polygon as well. So you will see a hole where the smaller poly disappeared and now you have two overlapping identical polys for 2 different zips.

     
  • michael michaud

    michael michaud - 2013-03-19

    Hi,

    Quite strange ! It would help if you could send the polygons involved in your example, a few polygons around and the tolerance distance you used.

    Thanks,

    Michaël

     
  • Sean

    Sean - 2013-03-19

    ZipsToSimplify file... run .001 tolerance simplification on this

     
  • Sean

    Sean - 2013-03-19

    Added small set of zips as file. Just simplify as .001 tolerance and you should see the problem.

    Thanks

     
  • michael michaud

    michael michaud - 2013-03-21

    added a test for this corner case, if you want to check it works on your whole dataset.
    Thanks for your help,

    Michaël

     
  • michael michaud

    michael michaud - 2013-03-21

    Sorry, forgot to say, fix is available in 3382+

     
  • Sean

    Sean - 2013-03-22

    Looks like a good fix. Nice work.

    Thanks

     
  • Sean

    Sean - 2013-03-22

    I found another case where a polygon is enclosing and capturing another during simplification of another zip dataset. File attached.

     
  • Sean

    Sean - 2013-03-22

    simplify at .001

     
  • michael michaud

    michael michaud - 2013-03-24

    OK, I completed my previous fix, and this case should now be handled as well,

    Thanks for your help,

    Michaël

     
  • Sean

    Sean - 2013-03-28

    I have run a full simplification on the 500mb zip layer and it looks good at many levels now. I will continue testing this in more detail, but it looks good.

     
  • Sean

    Sean - 2013-03-28

    Simplification tests from .01 and smaller are great. We do see reoccurrence of the duplicated (and holes resulting from) zips. uploading a new test case if you want to see it. I am not sure if this reaches the point of oversimplification or even a case you want to handle. But just in case you do, the new zip file showing the issue is there.

     
1 2 > >> (Page 1 of 2)

Log in to post a comment.