Re: [Jts-topo-suite-user] Newbie question about Polygonizer
Brought to you by:
dr_jts
From: Martin D. <mb...@re...> - 2010-01-21 17:59:21
|
Well, I did say that this was NOT a general purpose technique! Polygonizer does not use thresholds - it assumes exact noding. To do this more generally requires a snapping/noding system which does use tolerances. JTS currently does not have code to do this. M Sanjay Rana wrote: > Okay but it looks like that I may have spoken too soon. A much simpler > configuration failed to produce the desirable result. Here are the > LineStrings: > > [0] = {LINESTRING(434980.3309478318 5724889.6955940686 > 116.323,434975.45594999986 5724891.47745 116.323)} > [1] = {LINESTRING(434981.75349999964 5724893.5876 > 112.323,434978.90840000007 5724885.8036 112.323)} > [2] = {LINESTRING(434978.90840000007 5724885.8036 > 112.323,434974.03340000007 5724887.5855 112.323)} > [3] = {LINESTRING(434974.03340000007 5724887.5855 > 112.323,434976.87849999964 5724895.3694 112.323)} > [4] = {LINESTRING(434976.87849999964 5724895.3694 > 112.323,434981.75349999964 5724893.5876 112.323)} > > Are there any thresholds used by the Polygonizer methods? > > Best, > Sanjay. > > > > > > 2010/1/21 Martin Davis <mtn...@te...>: > >> Yes, that's exact what I did. >> >> You don't need to union the linestrings before collecting them into a >> MultiLineString, since MLSes have no constraints on the geometry of the >> lines they contain (unlike MultiPolygons). >> >> Sanjay Rana wrote: >> >>> Hello again, >>> >>> I just managed to replicate your results. I basically created >>> Multilinestring using its ordinary simple constructor and then ran >>> union on multilinestring. Polygonizer then produced the results >>> correctly. >>> >>> Thanks a lot for the idea! >>> Sanjay. >>> >>> 2010/1/21 Sanjay Rana <san...@gm...>: >>> >>> >>>> Hi Martin, >>>> >>>> It does look like the correct shape. >>>> >>>> "One of the side effects of the union() method is that it nodes and >>>> dissolves (merges) linework, where there is exact coincidence. So I >>>> tried converting your lines to a MultiLineString, then unioning it >>>> with itself. This did create a clean noded geometry, which then >>>> polygonized correctly." >>>> >>>> Does the above indicate that you first union-ed the linestring to turn >>>> them into a Multilinestring and then union-ed the multilinestring with >>>> itself to create the full-noded geometry, which was then polygonized? >>>> >>>> Thanks, >>>> Sanjay. >>>> >>>> 2010/1/20 Martin Davis <mtn...@te...>: >>>> >>>> >>>>> I don't actually have code - I did this in the JTS TestBuilder. It's >>>>> quite handy for running small experiments like this. >>>>> >>>>> The results are: >>>>> >>>>> GEOMETRYCOLLECTION (POLYGON ((433359.015400001 5719394.21955, >>>>> 433361.6749999998 5719395.0363, 433365.6593000004 5719382.0622000005, >>>>> 433362.999705575 5719381.245431844, 433362.1041884376 5719384.161509676, >>>>> 433359.015400001 5719394.21955)), >>>>> POLYGON ((433355.89919999987 5719385.4471, 433358.5491000004 >>>>> 5719386.2609, 433362.1041884376 5719384.161509676, 433356.7947500007 >>>>> 5719382.530999998, 433355.89919999987 5719385.4471)), >>>>> POLYGON ((433358.5491000004 5719386.2609, 433356.3558 >>>>> 5719393.402799999, 433359.015400001 5719394.21955, 433362.1041884376 >>>>> 5719384.161509676, 433358.5491000004 5719386.2609)), >>>>> POLYGON ((433360.3401549162 5719380.428677129, 433357.6902999999 >>>>> 5719379.6149, 433356.7947500007 5719382.530999998, 433362.1041884376 >>>>> 5719384.161509676, 433360.3401549162 5719380.428677129)), >>>>> POLYGON ((433362.1041884376 5719384.161509676, 433362.999705575 >>>>> 5719381.245431844, 433360.3401549162 5719380.428677129, >>>>> 433362.1041884376 5719384.161509676))) >>>>> >>>>> >>>>> Sanjay Rana wrote: >>>>> >>>>> >>>>>> Wonderful - thanks for the tips, so may I see the code and results please? >>>>>> >>>>>> 2010/1/20 Martin Davis <mtn...@te...>: >>>>>> >>>>>> >>>>>> >>>>>>> One of the side effects of the union() method is that it nodes and dissolves >>>>>>> (merges) linework, where there is exact coincidence. So I tried converting >>>>>>> your lines to a MultiLineString, then unioning it with itself. This did >>>>>>> create a clean noded geometry, which then polygonized correctly. >>>>>>> >>>>>>> However, this is NOT a general technique for cleaning linework, since >>>>>>> usually non-noded endpoints never lie 100% exactly on another segment. I'm >>>>>>> a bit surprised that it worked for your case. >>>>>>> >>>>>>> To handle the more general case requires code to snap endpoints to nearby >>>>>>> endpoints, and crack edges by nearby endpoints. This would require some >>>>>>> significant development effort to provide generally usable code. There's >>>>>>> lots of similar code around however - check out JUMP and/or JCS for >>>>>>> examples. >>>>>>> >>>>>>> Sanjay Rana wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>>> Martin, >>>>>>>> >>>>>>>> Thanks for responding. I have indeed read your FOSS4G presentation >>>>>>>> about noding linestrings for the purpose polygonization. >>>>>>>> >>>>>>>> So, I did indeed union the linestring. As far I know the edges are all >>>>>>>> snapped. It would be great if you could post a piece of example code >>>>>>>> that takes in a List<LineString), "nodify" them and does the >>>>>>>> polygonization. >>>>>>>> >>>>>>>> Many thanks! >>>>>>>> Sanjay. >>>>>>>> >>>>>>>> 2010/1/20 Martin Davis <mtn...@te...>: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> There are a couple of issues with your data which prevents it from being >>>>>>>>> polygonized as it stands: >>>>>>>>> >>>>>>>>> - The lines are not noded together correctly (eg one line terminates in >>>>>>>>> the middle of another). They need to be noded together (which will >>>>>>>>> probably require snapping as well) >>>>>>>>> - There is a duplicate line down the middle of the geometry >>>>>>>>> - I haven't verified this, but there may be endpoints which are not >>>>>>>>> exactly coincident (snapped) >>>>>>>>> >>>>>>>>> Polygonize requires fully noded, snapped input to work correctly. As >>>>>>>>> you see, it does the best it can with the geometry provided, but it >>>>>>>>> can't correct bad input. >>>>>>>>> >>>>>>>>> In fact, there's nothing in JTS right now which will do snapping to a >>>>>>>>> tolerance as is required here. You might try looking at JUMP - it has >>>>>>>>> some tools for this. >>>>>>>>> >>>>>>>>> Martin >>>>>>>>> >>>>>>>>> Sanjay Rana wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> Hi Everyone, >>>>>>>>>> >>>>>>>>>> I have the following 12 LineString that I would like to Polygonize: >>>>>>>>>> >>>>>>>>>> [0] = {LINESTRING(433356.7947500007 5719382.5309999976 >>>>>>>>>> 84.187,433362.10418843757 5719384.1615096759 84.187)} >>>>>>>>>> [1] = {LINESTRING(433362.10418843757 5719384.1615096759 >>>>>>>>>> 84.187,433362.999705575 5719381.2454318441 84.187)} >>>>>>>>>> [2] = {LINESTRING(433362.999705575 5719381.2454318441 >>>>>>>>>> 84.187,433359.015400001 5719394.21955 84.187)} >>>>>>>>>> [3] = {LINESTRING(433359.015400001 5719394.21955 >>>>>>>>>> 84.187,433362.10418843757 5719384.1615096759 84.187)} >>>>>>>>>> [4] = {LINESTRING(433357.6902999999 5719379.6149 >>>>>>>>>> 80.687,433355.89919999987 5719385.4471 80.687)} >>>>>>>>>> [5] = {LINESTRING(433355.89919999987 5719385.4471 >>>>>>>>>> 80.687,433358.54910000041 5719386.2609 80.687)} >>>>>>>>>> [6] = {LINESTRING(433358.54910000041 5719386.2609 80.687,433356.3558 >>>>>>>>>> 5719393.4027999993 80.687)} >>>>>>>>>> [7] = {LINESTRING(433356.3558 5719393.4027999993 >>>>>>>>>> 80.687,433361.67499999981 5719395.0363 80.687)} >>>>>>>>>> [8] = {LINESTRING(433361.67499999981 5719395.0363 >>>>>>>>>> 80.687,433365.65930000041 5719382.0622000005 80.687)} >>>>>>>>>> [9] = {LINESTRING(433365.65930000041 5719382.0622000005 >>>>>>>>>> 80.687,433357.6902999999 5719379.6149 80.687)} >>>>>>>>>> [10] = {LINESTRING(433360.34015491622 >>>>>>>>>> 5719380.4286771286,433362.10418843757 5719384.1615096759)} >>>>>>>>>> [11] = {LINESTRING(433362.10418843757 >>>>>>>>>> 5719384.1615096759,433358.54910000041 5719386.2609)} >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> There should be five polygons in theory but I can't seem to be able to >>>>>>>>>> achieve that. >>>>>>>>>> >>>>>>>>>> Any help will be much appreciated! >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Sanjay. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> ------------------------------------------------------------------------ >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> No virus found in this incoming message. >>>>>>>>>> Checked by AVG - www.avg.com >>>>>>>>>> Version: 8.5.432 / Virus Database: 271.1.1/2634 - Release Date: 01/20/10 >>>>>>>>>> 09:12:00 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>>>>>> world's best and brightest in the field, creating opportunities for >>>>>>>>> Conference >>>>>>>>> attendees to learn about information security's most important issues >>>>>>>>> through >>>>>>>>> interactions with peers, luminaries and emerging and established >>>>>>>>> companies. >>>>>>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>>>>>> _______________________________________________ >>>>>>>>> Jts-topo-suite-user mailing list >>>>>>>>> Jts...@li... >>>>>>>>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> ------------------------------------------------------------------------ >>>>>>>> >>>>>>>> >>>>>>>> No virus found in this incoming message. >>>>>>>> Checked by AVG - www.avg.com Version: 8.5.432 / Virus Database: >>>>>>>> 271.1.1/2634 - Release Date: 01/20/10 09:12:00 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>> ------------------------------------------------------------------------ >>>>>> >>>>>> >>>>>> No virus found in this incoming message. >>>>>> Checked by AVG - www.avg.com >>>>>> Version: 8.5.432 / Virus Database: 271.1.1/2634 - Release Date: 01/20/10 09:12:00 >>>>>> >>>>>> >>>>>> >>>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>> world's best and brightest in the field, creating opportunities for Conference >>>>> attendees to learn about information security's most important issues through >>>>> interactions with peers, luminaries and emerging and established companies. >>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>> _______________________________________________ >>>>> Jts-topo-suite-user mailing list >>>>> Jts...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user >>>>> >>>>> >>>>> >>>> -- >>>> ---News--- >>>> Journal of Location Based Services Special Issue on NeoGeography at >>>> http://bit.ly/2f7qiu >>>> >>>> See the story behind the first ever demonstration of fare-based >>>> railways travel at >>>> http://www.steamcircus.info >>>> >>>> Plot Road Traffic Injury Locations within UK and USA at >>>> http://www.road-injuries.info >>>> >>>> Find out about the unique Jewish Heritage in the Roman City of Bath at >>>> http://www.devonshire-roundhouse.info >>>> >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------ >>> >>> >>> No virus found in this incoming message. >>> Checked by AVG - www.avg.com >>> Version: 8.5.432 / Virus Database: 271.1.1/2634 - Release Date: 01/20/10 09:12:00 >>> >>> >>> >> ------------------------------------------------------------------------------ >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for Conference >> attendees to learn about information security's most important issues through >> interactions with peers, luminaries and emerging and established companies. >> http://p.sf.net/sfu/rsaconf-dev2dev >> _______________________________________________ >> Jts-topo-suite-user mailing list >> Jts...@li... >> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user >> >> > > > > -- Martin Davis Senior Technical Architect Refractions Research, Inc. (250) 383-3022 |