]> granicus.if.org Git - postgis/commitdiff
Fixed the inappropriate minpoint checking of circular strings within curvepoly, as...
authorMark Leslie <mark.leslie@lisasoft.com>
Thu, 2 Jul 2009 00:32:31 +0000 (00:32 +0000)
committerMark Leslie <mark.leslie@lisasoft.com>
Thu, 2 Jul 2009 00:32:31 +0000 (00:32 +0000)
git-svn-id: http://svn.osgeo.org/postgis/branches/1.4@4244 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/lwgparse.c
regress/sql-mm-curvepoly.sql
regress/sql-mm-curvepoly_expected

index 87827f99d576798e3e1f558e61a5f537f56dcc4d..cb131457488d82cd28b9c570565bdeca4f32df68 100644 (file)
@@ -770,8 +770,8 @@ check_curvepolygon_minpoints()
        tuple *tp = the_geom.stack->next; /* Current tuple */
        int i, j, k; /* Loop counters */
        int num, mum, lum; /* subgeom, point counts */
+       int minpoints;
        int count = 0; /* Running counter for compound curve */
-       int minpoints = 4;
        num = tp->uu.nn.num;
 
        LWDEBUG(3, "check_curvepolygon_minpoints");
@@ -779,6 +779,7 @@ check_curvepolygon_minpoints()
        /* Check each sub-geom for minpoints */
        for (i = 0; i < num; i++)
        {
+               minpoints = 3;
                tp = tp->next;
                LWDEBUGF(5, "Subgeom type %d: %p", tp->uu.nn.type, tp);
                switch (TYPE_GETTYPE(tp->uu.nn.type))
@@ -808,6 +809,7 @@ check_curvepolygon_minpoints()
                        }
                        break;
                case LINETYPE:
+                       minpoints = 4;
                case CIRCSTRINGTYPE:
                        tp = tp->next;
                        mum = tp->uu.nn.num;
@@ -818,7 +820,7 @@ check_curvepolygon_minpoints()
                        if (mum < minpoints)
                        {
                                LWDEBUGF(5, "Minpoint check failed: needed %d, got %d",
-                                        minpoints, count);
+                                        minpoints, mum);
                                LWGEOM_WKT_VALIDATION_ERROR(PARSER_ERROR_MOREPOINTS, tp->uu.nn.parse_location);
                        }
                        break;
index 8e4c3a1e3fbf37e919031ba6d10786b135b463e8..337dab11f715e850708d4bc67e10b982ceaab9a3 100644 (file)
@@ -505,3 +505,6 @@ SELECT 'segmentize count', ST_NPoints(ST_CurveToLine(ST_GeomFromEWKT('CURVEPOLYG
 SELECT 'segmentize/desegmentize 1', ST_NRings(ST_LineToCurve(ST_CurveToLine(ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0,2 1,2 3,4 3),(4 3,4 5,1 4,0 0)))'))));\r
 SELECT 'segmentize/desegmentize 2', ST_NPoints(ST_LineToCurve(ST_CurveToLine(ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0,2 1,2 3,4 3),(4 3,4 5,1 4,0 0)))'))));\r
 SELECT 'segmentize/desegmentize 3', ST_NPoints(ST_ExteriorRing(ST_LineToCurve(ST_CurveToLine(ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0,2 1,2 3,4 3),(4 3,4 5,1 4,0 0)))')))));\r
+SELECT ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.7 1) )');\r
+SELECT ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0)), (1.7 1, 1.4 0.4, 1.7 1) )');\r
+SELECT ST_GeomFromEWKT('CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 0 0)), CIRCULARSTRING(1.7 1, 1.4 0.4, 1.7 1) )');\r
index 55b1beb87e124ab8bae57e6c190a1bc323394263..83e26307bf01fffccfb2fbd4cadfcc83440a4272 100644 (file)
@@ -161,3 +161,7 @@ segmentize count|132
 segmentize/desegmentize 1|0
 segmentize/desegmentize 2|9
 segmentize/desegmentize 3|9
+010D0000000200000001090000000200000001080000000500000000000000000000000000000000000000000000000000004000000000000000000000000000000040000000000000F03F00000000000000400000000000000840000000000000104000000000000008400102000000040000000000000000001040000000000000084000000000000010400000000000001440000000000000F03F000000000000104000000000000000000000000000000000010800000003000000333333333333FB3F000000000000F03F666666666666F63F9A9999999999D93F333333333333FB3F000000000000F03F
+ERROR:  geometry requires more points
+HINT:  "..., 1 4, 0 0)), (1.7 1, 1.4 0.4, 1.7 1)" <-- parse error at position 112 within geometry
+010D0000000200000001090000000200000001080000000500000000000000000000000000000000000000000000000000004000000000000000000000000000000040000000000000F03F00000000000000400000000000000840000000000000104000000000000008400102000000020000000000000000001040000000000000084000000000000000000000000000000000010800000003000000333333333333FB3F000000000000F03F666666666666F63F9A9999999999D93F333333333333FB3F000000000000F03F