Re: [Jts-topo-suite-user] Invalid polygon resulting from Vectorization
Brought to you by:
dr_jts
From: Martin D. <mtn...@gm...> - 2014-04-30 17:21:26
|
Michael's suggestion is the easiet way to handle this situation, although it does have some pitfalls as noted in the FAQ: http://tsusiatsoftware.net/jts/jts-faq/jts-faq.html#G On Tue, Apr 29, 2014 at 5:36 PM, Michael Bedward <mic...@gm...>wrote: > Hi Rob, > > Doing poly.buffer(0) on that one seems to give what you are after. > > Michael > > > On 30 April 2014 07:44, Rob Emanuele <rde...@gm...> wrote: > > Hi JTS folk, > > > > This is Rob from the GeoTrellis team. We have an algorithm that performs > > vectorization against raster data that does a RegionGroup operation over > the > > raster and then vectorizes each region along the cell borders. > > > > We're wrapping JTS in scala code (you can find it here: > > > https://github.com/geotrellis/geotrellis/tree/master/feature/src/main/scala/geotrellis/feature > ). > > This is replacing some earlier wrapping work contained in GeoTrellis <= > > 0.9.X. One difference between the two wrappers is that the current > Polygon > > checks to see that the JTS geometry is valid in the constructor (as does > > each geometry type). > > > > This is causing one of our previous Vectorization unit tests to fail. In > > this case, the Raster looks like this: > > > > X X X X X > > X P P P X > > X P X P X > > X X P P X > > X X X X X > > > > Where X represents NoData, and P represents a value (The letter choice is > > arbitrary). The algorithm creates a vector who's border LineString goes > > around the perimeter of the region of P's. > > > > The problem is, the algorithm creates a border with two points being the > > same: > > ______ > > | __ | > > |__| _| | > > | __ | > > > > (apologies for the very rough ASCII art, I hope it translates). > > > > So because the border intersects itself, it's considered an invalid > polygon. > > The algorithm could possibly changed to consider the outside perimeter as > > the LineRing and the space in the middle as a hole; this would require > some > > significant changes to an already complex algorithm, and I'm not sure it > > could handle all of the edge cases. > > > > My question is, is there a way to solve this in JTS? To take a LineString > > that is invalid for the border of the polygon, and separate it out into a > > valid border and a hole, and to create a valid polygon from it, in a > generic > > way? > > > > Thanks, > > Rob > > > > > > > ------------------------------------------------------------------------------ > > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > > Instantly run your Selenium tests across 300+ browser/OS combos. Get > > unparalleled scalability from the best Selenium testing platform > available. > > Simple to use. Nothing to install. Get started now for free." > > http://p.sf.net/sfu/SauceLabs > > _______________________________________________ > > Jts-topo-suite-user mailing list > > Jts...@li... > > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > > > > > ------------------------------------------------------------------------------ > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > Instantly run your Selenium tests across 300+ browser/OS combos. Get > unparalleled scalability from the best Selenium testing platform available. > Simple to use. Nothing to install. Get started now for free." > http://p.sf.net/sfu/SauceLabs > _______________________________________________ > Jts-topo-suite-user mailing list > Jts...@li... > https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user > |