[postgis-tickets] [PostGIS] #5133: ST_IsValid gives false positives for some "nested shells" geometries

PostGIS trac at osgeo.org
Fri May 20 11:35:28 PDT 2022


#5133: ST_IsValid gives false positives for some "nested shells" geometries
-------------------------+---------------------------
  Reporter:  pegautreau  |      Owner:  pramsey
      Type:  defect      |     Status:  new
  Priority:  high        |  Milestone:  PostGIS 3.2.2
 Component:  postgis     |    Version:  3.2.x
Resolution:              |   Keywords:  st_isvalid
-------------------------+---------------------------

Old description:

> {{{
> SELECT ST_IsValid('MULTIPOLYGON(((3.1159647327776
> 45.8945466579793,3.11592656973335 45.8945439935178,3.1159138351383
> 45.8945878526115,3.11589617446883 45.894648677432,3.11600330801231
> 45.8946565084663,3.11603320098284 45.8946586935046,3.11603527270572
> 45.8946587702646,3.11609428533829 45.8946608396878,3.11610373994251
> 45.8946138820922,3.11611597473274 45.8945572172376,3.116021407765
> 45.8945506148806,3.1159647327776 45.8945466579793),(3.11598841113043
> 45.8945526196915,3.11598348641025 45.8945522352619,3.11597871955898
> 45.8945518631556,3.11598841113043 45.8945526196915),(3.11597871955898
> 45.8945518631556,3.11597826359897 45.8945518275627,3.11597770228232
> 45.8945517837456,3.11597871955898 45.8945518631556),(3.11597770228232
> 45.8945517837456,3.11597253456926 45.8945513803472,3.11596794047477
> 45.894551021726,3.11596362983417 45.8945506852314,3.11597770228232
> 45.8945517837456),(3.11596216348313 45.8945560394174,3.11601944954132
> 45.8945611821445,3.11604532510409 45.8945635050552,3.11603525837852
> 45.8945986795711,3.11602781011054 45.8945979166658,3.11595429350387
> 45.8945903865383,3.11596216348313 45.8945560394174)),((3.11600928183286
> 45.8945542488812,3.1160078379169 45.8945541361677,3.11600858297084
> 45.8945541943273,3.11600928183286 45.8945542488812)))');
>
> }}}
>
> The function returns true with postgis3 but returns false with postgis2.
> It seems that a lot of invalid geometries of type "nested shells" are no
> more recognized as it should be by postgis3.

New description:

 {{{
 SELECT ST_IsValid('MULTIPOLYGON(((3.1159647327776
 45.8945466579793,3.11592656973335 45.8945439935178,3.1159138351383
 45.8945878526115,3.11589617446883 45.894648677432,3.11600330801231
 45.8946565084663,3.11603320098284 45.8946586935046,3.11603527270572
 45.8946587702646,3.11609428533829 45.8946608396878,3.11610373994251
 45.8946138820922,3.11611597473274 45.8945572172376,3.116021407765
 45.8945506148806,3.1159647327776 45.8945466579793),(3.11598841113043
 45.8945526196915,3.11598348641025 45.8945522352619,3.11597871955898
 45.8945518631556,3.11598841113043 45.8945526196915),(3.11597871955898
 45.8945518631556,3.11597826359897 45.8945518275627,3.11597770228232
 45.8945517837456,3.11597871955898 45.8945518631556),(3.11597770228232
 45.8945517837456,3.11597253456926 45.8945513803472,3.11596794047477
 45.894551021726,3.11596362983417 45.8945506852314,3.11597770228232
 45.8945517837456),(3.11596216348313 45.8945560394174,3.11601944954132
 45.8945611821445,3.11604532510409 45.8945635050552,3.11603525837852
 45.8945986795711,3.11602781011054 45.8945979166658,3.11595429350387
 45.8945903865383,3.11596216348313 45.8945560394174)),((3.11600928183286
 45.8945542488812,3.1160078379169 45.8945541361677,3.11600858297084
 45.8945541943273,3.11600928183286 45.8945542488812)))');

 }}}

 The function returns true with postgis3 but returns false with postgis2.
 It seems that a lot of invalid geometries of type "nested shells" are no
 more recognized as it should be by postgis3.

--
Comment (by pramsey):

 I cannot replicate this, and I'm testing on postgis 3.3 and geos 3.11, so
 the latest of everything.
 {{{
 =# SELECT ST_IsValid('MULTIPOLYGON(((3.1159647327776
 45.8945466579793,3.11592656973335 45.8945439935178,3.1159138351383
 45.8945878526115,3.11589617446883 45.894648677432,3.11600330801231
 45.8946565084663,3.11603320098284 45.8946586935046,3.11603527270572
 45.8946587702646,3.11609428533829 45.8946608396878,3.11610373994251
 45.8946138820922,3.11611597473274 45.8945572172376,3.116021407765
 45.8945506148806,3.1159647327776 45.8945466579793),(3.11598841113043
 45.8945526196915,3.11598348641025 45.8945522352619,3.11597871955898
 45.8945518631556,3.11598841113043 45.8945526196915),(3.11597871955898
 45.8945518631556,3.11597826359897 45.8945518275627,3.11597770228232
 45.8945517837456,3.11597871955898 45.8945518631556),(3.11597770228232
 45.8945517837456,3.11597253456926 45.8945513803472,3.11596794047477
 45.894551021726,3.11596362983417 45.8945506852314,3.11597770228232
 45.8945517837456),(3.11596216348313 45.8945560394174,3.11601944954132
 45.8945611821445,3.11604532510409 45.8945635050552,3.11603525837852
 45.8945986795711,3.11602781011054 45.8945979166658,3.11595429350387
 45.8945903865383,3.11596216348313 45.8945560394174)),((3.11600928183286
 45.8945542488812,3.1160078379169 45.8945541361677,3.11600858297084
 45.8945541943273,3.11600928183286 45.8945542488812)))');
 NOTICE:  Nested shells at or near point 3.1160092818328602
 45.894554248881199
  st_isvalid
 ------------
  f
 (1 row)

 pramsey=# select postgis_full_version();
 postgis_full_version
 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  POSTGIS="3.3.0dev 3.2.0-867-g216aca648" [EXTENSION] PGSQL="140"
 GEOS="3.11.0dev-CAPI-1.16.0" PROJ="9.1.0" LIBXML="2.9.4" LIBJSON="0.15"
 LIBPROTOBUF="1.4.0" WAGYU="0.5.0 (Internal)"
 }}}
-- 
Ticket URL: <https://trac.osgeo.org/postgis/ticket/5133#comment:1>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.


More information about the postgis-tickets mailing list