Opened 17 years ago

Closed 15 years ago

#155 closed defect (invalid)

TopologyException: found non-noded intersection

Reported by: frederick.sauvage@… Owned by: pramsey
Priority: major Milestone: 3.2.0
Component: tests Version: 3.0.0
Severity: Significant Keywords: imported, phpbugtracker
Cc: mloskot

Description (last modified by mloskot)

I can't do the union between a polygon and a multi-polygon. The multi-polygon seems invalid, but I don't understand how it's possible.

This is the result when I launch my program :

i=1 j=2 nbPoints=12

xA=3.448432 yA=50.316982 xB=3.448499 yB=50.316856
pente=-1.885714
xAlpha=3.439598 yAlpha=50.312298 xBeta=3.457267 yBeta=50.321667 xGamma=3.457334 yGamma=50.321541 xDelta=3.439665 yDelta=50.312172
maRequete= select GeomFromText('POLYGON((3.439598 50.312298, 3.457267 50.321667, 3.457334 50.321541, 3.439665 50.312172, 3.439598 50.312298))')

I create a polygon with (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta)

i=2 j=3 nbPoints=12

xA=3.448499 yA=50.316856 xB=3.448553 yB=50.316730
pente=-2.357143
xAlpha=3.439293 yAlpha=50.312950 xBeta=3.457705 yBeta=50.320763 xGamma=3.457758 yGamma=50.320637 xDelta=3.439347 yDelta=50.312824
maRequete= select GeomUnion(GeomFromText('POLYGON((3.439293 50.312950, 3.457705 50.320763, 3.457758 50.320637, 3.439347 50.312824, 3.439293 50.312950))'),'010300000001000000050000009818CBF44B840B40984D8061F9274940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA9674128294940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F9274940')

I create a polygon which is the Union between the last polygon and a new polygon (with the new (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta))

i=3 j=4 nbPoints=12

xA=3.448553 yA=50.316730 xB=3.448587 yB=50.316605
pente=-3.641379
xAlpha=3.438910 yAlpha=50.314083 xBeta=3.458196 yBeta=50.319378 xGamma=3.458230 yGamma=50.319252 xDelta=3.438944 yDelta=50.313957
maRequete= select GeomUnion(GeomFromText('POLYGON((3.438910 50.314083, 3.458196 50.319378, 3.458230 50.319252, 3.438944 50.313957, 3.438910 50.314083))'),'0103000000010000000D000000D2E4620CAC830B4040A4DFBE0E2849408F28E45468930B4011B4D79479284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A294940F4B7E4A6A7930B401564116376284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F92749403AD870DA87900B4022508D2C6128494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E284940')

I create a polygon which is the Union between the last polygon and a new polygon (with the new (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta))

i=4 j=5 nbPoints=12

xA=3.448587 yA=50.316605 xB=3.448622 yB=50.316479
pente=-3.641379
xAlpha=3.438944 yAlpha=50.313957 xBeta=3.458230 yBeta=50.319252 xGamma=3.458265 yGamma=50.319126 xDelta=3.438979 yDelta=50.313831
maRequete= select GeomUnion(GeomFromText('POLYGON((3.438944 50.313957, 3.458230 50.319252, 3.458265 50.319126, 3.438979 50.313831, 3.438944 50.313957))'),'010300000001000000140000005019FF3EE3820B40629D2ADF3328494057FBAA3D1B940B407505B6827F284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A2949400F4B7436A2960B40C486BE9C8A2849409E4319AA62AA0B40EC87D860E12849405F5E807D74AA0B405F97E13FDD2849404C9EEE98C8940B405925F70C7E284940F4B7E4A6A7930B401564116376284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F92749403AD870DA87900B4022508D2C6128494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E28494045964C0CC0920B4023AA481E7528494011346612F5820B40D6AC33BE2F2849405019FF3EE3820B40629D2ADF33284940')

I create a polygon which is the Union between the last polygon and a new polygon (with the new (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta))

i=5 j=6 nbPoints=12

xA=3.448622 yA=50.316479 xB=3.448644 yB=50.316410
pente=-3.130435
xAlpha=3.439096 yAlpha=50.313435 xBeta=3.458148 yBeta=50.319523 xGamma=3.458169 yGamma=50.319454 xDelta=3.439118 yDelta=50.313366
maRequete= select GeomUnion(GeomFromText('POLYGON((3.439096 50.313435, 3.458148 50.319523, 3.458169 50.319454, 3.439118 50.313366, 3.439096 50.313435))'),'0103000000030000001500000011346612F5820B40D6AC33BE2F2849405019FF3EE3820B40629D2ADF3328494057FBAA3D1B940B407505B6827F284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A2949400F4B7436A2960B40C486BE9C8A2849409E4319AA62AA0B40EC87D860E12849405F5E807D74AA0B405F97E13FDD28494026361FD786AA0B40D2A6EA1ED9284940789609E43A930B40834756C872284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F92749403AD870DA87900B4022508D2C6128494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E284940E53F1D66E5900B408912A98768284940D80B056C07830B4049BC3C9D2B28494011346612F5820B40D6AC33BE2F2849400400000011346612F5820B40D6AC33BE2F284940F4954C0CC0920B4021AA481E7528494045964C0CC0920B4023AA481E7528494011346612F5820B40D6AC33BE2F284940040000005F5E807D74AA0B405F97E13FDD2849404C9EEE98C8940B405925F70C7E284940289EEE98C8940B405825F70C7E2849405F5E807D74AA0B405F97E13FDD284940')

I create a polygon which is the Union between the last polygon and a new polygon (with the new (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta))

i=6 j=7 nbPoints=12

xA=3.448644 yA=50.316410 xB=3.448675 yB=50.316334
pente=-2.461538
xAlpha=3.439379 yAlpha=50.312645 xBeta=3.457908 yBeta=50.320175 xGamma=3.457939 yGamma=50.320099 xDelta=3.439410 yDelta=50.312569
maRequete= select GeomUnion(GeomFromText('POLYGON((3.439379 50.312645, 3.457908 50.320175, 3.457939 50.320099, 3.439410 50.312569, 3.439379 50.312645))'),'0103000000050000001F000000726F7EC344830B40FC3559A31E2849406A106567618E0B408A17447357284940E53F1D66E5900B408912A98768284940D80B056C07830B4049BC3C9D2B28494011346612F5820B40D6AC33BE2F2849405019FF3EE3820B40629D2ADF3328494057FBAA3D1B940B407505B6827F284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A2949400F4B7436A2960B40C486BE9C8A284940021CB96116A30B40F01BCF51C12849408DD2A57F49AA0B40EFA83121E62849400454388254AA0B40C74961DEE32849400A1DBFEE88A60B40F312B376D02849409E4319AA62AA0B40EC87D860E12849405F5E807D74AA0B405F97E13FDD28494026361FD786AA0B40D2A6EA1ED92849400D194B08359A0B4051E08A6E91284940E653874BBD910B40B2D7DF2266284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F927494014BB6C572B900B40CD54AE1B5E284940107ED7DFCD8F0B40494DC83D5C28494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E2849400395916CE58C0B40951B665F4D284940EFAD484C50830B40D4D688601C284940726F7EC344830B40FC3559A31E2849400400000011346612F5820B40D6AC33BE2F284940F4954C0CC0920B4021AA481E7528494045964C0CC0920B4023AA481E7528494011346612F5820B40D6AC33BE2F284940040000005F5E807D74AA0B405F97E13FDD2849405883DA9460A00B402DE7CBFAB02849401883DA9460A00B402CE7CBFAB02849405F5E807D74AA0B405F97E13FDD28494004000000EB7E152F7A920B40B2EE68656C2849405FF8184EC1960B400CEA7B4482284940789609E43A930B40834756C872284940EB7E152F7A920B40B2EE68656C2849400500000088826571ED9C0B40211C53D3A1284940DD826571ED9C0B40231C53D3A12849404C9EEE98C8940B405925F70C7E284940289EEE98C8940B405825F70C7E28494088826571ED9C0B40211C53D3A1284940')

I create a polygon which is the Union between the last polygon and a new polygon (with the new (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta))

i=7 j=8 nbPoints=12

xA=3.448675 yA=50.316334 xB=3.448710 yB=50.316265
pente=-1.920000
xAlpha=3.439806 yAlpha=50.311714 xBeta=3.457544 yBeta=50.320953 xGamma=3.457580 yGamma=50.320885 xDelta=3.439841 yDelta=50.311646
maRequete= select GeomUnion(GeomFromText('POLYGON((3.439806 50.311714, 3.457544 50.320953, 3.457580 50.320885, 3.439841 50.311646, 3.439806 50.311714))'),'01030000000700000028000000BB641C23D9830B40042159C004284940D74D9B7D818B0B40B15C098B3628494014BB6C572B900B40CD54AE1B5E284940107ED7DFCD8F0B40494DC83D5C28494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E2849400395916CE58C0B40951B665F4D284940EFAD484C50830B40D4D688601C284940726F7EC344830B40FC3559A31E2849406A106567618E0B408A17447357284940E53F1D66E5900B408912A98768284940D80B056C07830B4049BC3C9D2B28494011346612F5820B40D6AC33BE2F2849405019FF3EE3820B40629D2ADF3328494057FBAA3D1B940B407505B6827F284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A2949400F4B7436A2960B40C486BE9C8A284940394A7DC22F9C0B40EB8C5901A3284940399D64ABCBA90B4097FF907EFB284940E98024ECDBA90B40BC3D0801F9284940E07D7817909D0B4050FF140DA9284940021CB96116A30B40F01BCF51C12849408DD2A57F49AA0B40EFA83121E62849400454388254AA0B40C74961DEE32849400A1DBFEE88A60B40F312B376D02849409E4319AA62AA0B40EC87D860E12849405F5E807D74AA0B405F97E13FDD28494026361FD786AA0B40D2A6EA1ED92849400D194B08359A0B4051E08A6E9128494019993463E9980B40C38ED6CE8A284940A8417830B68C0B40D7050E7B3B284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F927494050D11E770A8A0B405C39511D2A2849406B48DC63E9830B40295FD04202284940BB641C23D9830B40042159C0042849400400000011346612F5820B40D6AC33BE2F284940F4954C0CC0920B4021AA481E7528494045964C0CC0920B4023AA481E7528494011346612F5820B40D6AC33BE2F284940040000005F5E807D74AA0B405F97E13FDD2849401883DA9460A00B402CE7CBFAB02849405883DA9460A00B402DE7CBFAB02849405F5E807D74AA0B405F97E13FDD284940040000005FBEF4362D8E0B402D29C6E84728494094804067D2960B404B10751F80284940E653874BBD910B40B2D7DF22662849405FBEF4362D8E0B402D29C6E84728494005000000E0186991159A0B4038F4E5559528494001196991159A0B4039F4E555952849404C9EEE98C8940B405925F70C7E284940289EEE98C8940B405825F70C7E284940E0186991159A0B4038F4E5559528494005000000A14C64E6759B0B409E66A1619B284940894C64E6759B0B409D66A1619B28494088826571ED9C0B40211C53D3A1284940DD826571ED9C0B40231C53D3A1284940A14C64E6759B0B409E66A1619B28494004000000EB7E152F7A920B40B2EE68656C2849405FF8184EC1960B400CEA7B4482284940789609E43A930B40834756C872284940EB7E152F7A920B40B2EE68656C284940')

I create a polygon which is the Union between the last polygon and a new polygon (with the new (xAlpha,yAlpha) (xBeta,yBeta) (xGamma, yGamma) (xDelta, yDelta))

i=8 j=9 nbPoints=12

xA=3.448710 yA=50.316265 xB=3.448770 yB=50.316189
pente=-1.290323
xAlpha=3.440806 yAlpha=50.310139 xBeta=3.456614 yBeta=50.322392 xGamma=3.456674 yGamma=50.322315 xDelta=3.440866 yDelta=50.310062
maRequete= select GeomUnion(GeomFromText('POLYGON((3.440806 50.310139, 3.456614 50.322392, 3.456674 50.322315, 3.440866 50.310062, 3.440806 50.310139))'),'0103000000090000003100000036AD1402B9840B4049DA8D3EE6274940C65D9F23E6960B4001D791B87D284940A8417830B68C0B40D7050E7B3B284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F927494050D11E770A8A0B405C39511D2A2849406B48DC63E9830B40295FD04202284940BB641C23D9830B40042159C004284940D74D9B7D818B0B40B15C098B3628494014BB6C572B900B40CD54AE1B5E284940107ED7DFCD8F0B40494DC83D5C28494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E2849400395916CE58C0B40951B665F4D284940EFAD484C50830B40D4D688601C284940726F7EC344830B40FC3559A31E2849406A106567618E0B408A17447357284940E53F1D66E5900B408912A98768284940D80B056C07830B4049BC3C9D2B28494011346612F5820B40D6AC33BE2F2849405019FF3EE3820B40629D2ADF3328494057FBAA3D1B940B407505B6827F284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940EF3FE19B91A30B405443D34EE728494023D923D40CA90B40CC46E7FC14294940F06DFAB31FA90B4073637AC2122949405050868F68A50B40C65558CCF3284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A29494042CECD4141A20B401750DC84D928494044777C7F2F9B0B40AC1DA39B9E284940394A7DC22F9C0B40EB8C5901A3284940399D64ABCBA90B4097FF907EFB284940E98024ECDBA90B40BC3D0801F9284940E07D7817909D0B4050FF140DA9284940021CB96116A30B40F01BCF51C12849408DD2A57F49AA0B40EFA83121E62849400454388254AA0B40C74961DEE32849400A1DBFEE88A60B40F312B376D02849409E4319AA62AA0B40EC87D860E12849405F5E807D74AA0B405F97E13FDD28494026361FD786AA0B40D2A6EA1ED92849400D194B08359A0B4051E08A6E9128494019993463E9980B40C38ED6CE8A28494010EEB56072980B40CD1A02C987284940FD84B35BCB840B40F1F62004E427494036AD1402B9840B4049DA8D3EE62749400400000011346612F5820B40D6AC33BE2F284940F4954C0CC0920B4021AA481E7528494045964C0CC0920B4023AA481E7528494011346612F5820B40D6AC33BE2F284940040000005F5E807D74AA0B405F97E13FDD2849401883DA9460A00B402CE7CBFAB02849405883DA9460A00B402DE7CBFAB02849405F5E807D74AA0B405F97E13FDD284940050000006654AE3157990B40147B9E11922849408254AE3157990B40147B9E11922849404C9EEE98C8940B405925F70C7E284940289EEE98C8940B405825F70C7E2849406654AE3157990B40147B9E119228494004000000242A2744779A0B4020E756729B28494052F53F706AA00B403E401208CD2849400F4B7436A2960B40C486BE9C8A284940242A2744779A0B4020E756729B284940050000007BC838640F9A0B400C12C43A952849405FC838640F9A0B400B12C43A95284940E0186991159A0B4038F4E5559528494001196991159A0B4039F4E555952849407BC838640F9A0B400C12C43A95284940040000005FBEF4362D8E0B402D29C6E84728494094804067D2960B404B10751F80284940E653874BBD910B40B2D7DF22662849405FBEF4362D8E0B402D29C6E84728494005000000A14C64E6759B0B409E66A1619B284940894C64E6759B0B409D66A1619B28494088826571ED9C0B40211C53D3A1284940DD826571ED9C0B40231C53D3A1284940A14C64E6759B0B409E66A1619B28494004000000EB7E152F7A920B40B2EE68656C2849405FF8184EC1960B400CEA7B4482284940789609E43A930B40834756C872284940EB7E152F7A920B40B2EE68656C284940')

NOTICE:  TopologyException: found non-noded intersection between 3.44871 50.3163, 3.44945 50.3168 and 3.44765 50.3163, 3.44945 50.3168 3.44945 50.3168
SELECT failed: ERROR:  GEOS union() threw an error!

I tried this request :

select isvalid(GeomFromText('POLYGON((3.440806 50.310139, 3.456614 50.322392, 3.456674 50.322315, 3.440866 50.310062, 3.440806 50.310139))')), isvalid('0103000000090000003100000036AD1402B9840B4049DA8D3EE6274940C65D9F23E6960B4001D791B87D284940A8417830B68C0B40D7050E7B3B284940159161156F840B400B5D8940F52749409818CBF44B840B40984D8061F927494050D11E770A8A0B405C39511D2A2849406B48DC63E9830B40295FD04202284940BB641C23D9830B40042159C004284940D74D9B7D818B0B40B15C098B3628494014BB6C572B900B40CD54AE1B5E284940107ED7DFCD8F0B40494DC83D5C28494005C4245CC8830B40B3B3E89D0A284940D2E4620CAC830B4040A4DFBE0E2849400395916CE58C0B40951B665F4D284940EFAD484C50830B40D4D688601C284940726F7EC344830B40FC3559A31E2849406A106567618E0B408A17447357284940E53F1D66E5900B408912A98768284940D80B056C07830B4049BC3C9D2B28494011346612F5820B40D6AC33BE2F2849405019FF3EE3820B40629D2ADF3328494057FBAA3D1B940B407505B6827F284940FC51D4997BA80B40E9995E622C29494079CA6ABA9EA80B405DA96741282949406E06C9F487960B40D5BEE1C98E284940EF3FE19B91A30B405443D34EE728494023D923D40CA90B40CC46E7FC14294940F06DFAB31FA90B4073637AC2122949405050868F68A50B40C65558CCF3284940B6B9313D61A90B40286211C30E294940E4DBBB067DA90B409B711AA20A29494042CECD4141A20B401750DC84D928494044777C7F2F9B0B40AC1DA39B9E284940394A7DC22F9C0B40EB8C5901A3284940399D64ABCBA90B4097FF907EFB284940E98024ECDBA90B40BC3D0801F9284940E07D7817909D0B4050FF140DA9284940021CB96116A30B40F01BCF51C12849408DD2A57F49AA0B40EFA83121E62849400454388254AA0B40C74961DEE32849400A1DBFEE88A60B40F312B376D02849409E4319AA62AA0B40EC87D860E12849405F5E807D74AA0B405F97E13FDD28494026361FD786AA0B40D2A6EA1ED92849400D194B08359A0B4051E08A6E9128494019993463E9980B40C38ED6CE8A28494010EEB56072980B40CD1A02C987284940FD84B35BCB840B40F1F62004E427494036AD1402B9840B4049DA8D3EE62749400400000011346612F5820B40D6AC33BE2F284940F4954C0CC0920B4021AA481E7528494045964C0CC0920B4023AA481E7528494011346612F5820B40D6AC33BE2F284940040000005F5E807D74AA0B405F97E13FDD2849401883DA9460A00B402CE7CBFAB02849405883DA9460A00B402DE7CBFAB02849405F5E807D74AA0B405F97E13FDD284940050000006654AE3157990B40147B9E11922849408254AE3157990B40147B9E11922849404C9EEE98C8940B405925F70C7E284940289EEE98C8940B405825F70C7E2849406654AE3157990B40147B9E119228494004000000242A2744779A0B4020E756729B28494052F53F706AA00B403E401208CD2849400F4B7436A2960B40C486BE9C8A284940242A2744779A0B4020E756729B284940050000007BC838640F9A0B400C12C43A952849405FC838640F9A0B400B12C43A95284940E0186991159A0B4038F4E5559528494001196991159A0B4039F4E555952849407BC838640F9A0B400C12C43A95284940040000005FBEF4362D8E0B402D29C6E84728494094804067D2960B404B10751F80284940E653874BBD910B40B2D7DF22662849405FBEF4362D8E0B402D29C6E84728494005000000A14C64E6759B0B409E66A1619B284940894C64E6759B0B409D66A1619B28494088826571ED9C0B40211C53D3A1284940DD826571ED9C0B40231C53D3A1284940A14C64E6759B0B409E66A1619B28494004000000EB7E152F7A920B40B2EE68656C2849405FF8184EC1960B400CEA7B4482284940789609E43A930B40834756C872284940EB7E152F7A920B40B2EE68656C284940')
Answer : t;f

I don't understand how the second polygon can be invalid

Change History (7)

comment:1 by benjubb@…, 17 years ago

What version of PostGIS and/or GEOS are you using?

comment:2 by mloskot, 16 years ago

Cc: mloskot added
Description: modified (diff)

comment:3 by mloskot, 16 years ago

Milestone: imported

comment:4 by mloskot, 16 years ago

Owner: strk@… removed
Priority: 4major
Severity: AnnoyanceSignificant
Status: assignednew

comment:5 by pramsey, 15 years ago

Milestone: 3.2.0

comment:6 by pramsey, 15 years ago

Owner: set to pramsey

I will attempt to reproduce and close if I cannot.

comment:7 by pramsey, 15 years ago

Resolution: invalid
Status: newclosed

Unable to recreate against trunk (to be 3.2) so I am closing.

Note: See TracTickets for help on using tickets.