# [postgis-users] IsSimple doesn't work correctly?

Martin Davis mbdavis at VividSolutions.com
Mon Apr 5 08:58:45 PDT 2004

```Two points:

1) The definition of "simple" used by JTS, GEOS and PostGIS is taken from the OGC Simple Features for SQL specification.  It states that Polygons are always simple geometries (sec. 2.1.10).

2) In any case, at least two (#10 & 12) of your geometries are not valid polygons (#10 self-intersects, and #12 contains a hole which self-intersects).  JTS/GEOS functions are not guaranteed to return correct results for invalid geometries.  You should ensure all your geometries are valid before using analytic functions.

Martin Davis, Senior Technical Architect
Vivid Solutions Inc.
Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046

> -----Original Message-----
> From: Michael Schiller [mailto:MichaelAntonSchiller at gmx.de]
> Sent: April 5, 2004 3:41 AM
> To: postgis user list
> Subject: [postgis-users] IsSimple doesn't work correctly?
>
>
> Hello,
>
> I am using Postgis 0.8.1 with PostgreSQL 7.4.1 and GEOS 1.0.0
>
> I  tried the method IsSimple  and I think that it doesn't
> work correctly.
>
> select id, issimple(poly), poly from test;
>  id | issimple |
>
>
>
> poly
>
> ----+----------+----------------------------------------------
> ----------
> ----+----------+----------------------------------------------
> --------------------------------------------------------------
> --------------------------------------------------------------
> -----------------------------------------------------
>   1 | t        | SRID=-1;MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))
>   2 | t        | SRID=-1;MULTIPOLYGON(((0 5,0 10,5 10,5 5,0 5)))
>   3 | t        | SRID=-1;MULTIPOLYGON(((5 0,5 5,10 5,10 0,5 0)))
>   4 | t        | SRID=-1;MULTIPOLYGON(((5 5,5 10,10 10,10 5,5 5)))
>   5 | t        | SRID=-1;MULTIPOLYGON(((0 10,0 15,5 15,5 10,0 10)))
>   6 | t        | SRID=-1;MULTIPOLYGON(((10 0,10 5,15 5,15 0,10 0)))
>  10 | t        | SRID=-1;MULTIPOLYGON(((50 50,50 55,56 55,56
> 50,53 50,55
> 52,53 54,51 52,53 50,50
> 50)))
>  11 | t        | SRID=-1;MULTIPOLYGON(((60 60,60 65,66 65,66
> 60,60 60),(63
> 60,61 62,63 64,65 62,63
> 60)))
>  12 | t        | SRID=-1;MULTIPOLYGON(((70 70,70 76,74 76,74
> 70,70 70),(72
> 71,72 75,73 75,71 73,73
> 71,72 71)))
>  13 | t        | SRID=-1;MULTIPOLYGON(((80 80,80 86,84 86,84
> 80,80 80),(82
> 81,82 82,83 81,82 81),(82
> 82,81 83,82 84,82 82),(82 84,82 85,83 85,82 84)))
>  14 | t        | SRID=-1;MULTIPOLYGON(((90 90,90 96,94 96,94
> 90,90 90),(92
> 92,91 93,92 94,92 92)))
>  15 | t        | SRID=-1;MULTIPOLYGON(((100 100,100 105,105
> 105,105 100,100
> 100),(101 101,101
> 102,102 102,102 101,101 101),(103 103,103 104,104 104,104
> 103,103 103)),((110 110,110 115,115
> 115,115 110,110 110),(111 111,111 112,112 112,112 111,111
> 111),(113 113,113 114,114 114,114
> 113,113 113)))
>  16 | t        | SRID=-1;MULTIPOLYGON(((121 120,121 124,123
> 124,120 122,123
> 120,121 120)))
>  17 | t        | SRID=-1;MULTIPOLYGON(((130 130,132 132,130
> 132,132 130,130
> 130)))
>  18 | t        | SRID=-1;MULTIPOLYGON(((140 141,140 144,143
> 144,143 141,140
> 141),(142 140,141
> 142,142 143,142 140)))
>  19 | t        | SRID=-1;MULTIPOLYGON(((150 150,150 154,156
> 154,156 150,150
> 150),(153 150,151
> 152,153 154,155 152,153 150)))
>  20 | t        | SRID=-1;MULTIPOLYGON(((160 160,160 164,163
> 164,161 162,163
> 160,160 160)),((163
> 160,165 162,163 164,166 164,166 160,163 160)))
> (17 rows)
>
> There are some Polygons in this Example that are not simple
> (id = 10, id = 12, id = 16, id = 17, id = 18,
> id = 19).
> The Method IsSimple answers only with true.
>
> Where is the error?
>
> thanks, Mich
>
> --
> +++ NEU bei GMX und erstmalig in Deutschland: TÜV-geprüfter
> Virenschutz
> +++ +++
> 100% Virenerkennung nach Wildlist. Infos:
> http://www.gmx.net/virenschutz
>
>
> _______________________________________________
> postgis-users mailing list postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>

```