]> granicus.if.org Git - postgis/commitdiff
#3172, ST_AddMeasure refuses to set measure of zero-length line
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 22 Jul 2015 16:03:10 +0000 (16:03 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 22 Jul 2015 16:03:10 +0000 (16:03 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@13830 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/lwline.c
regress/tickets.sql
regress/tickets_expected

index 582ac91f683f8b2348a623dc412e43c48463f3b2..58f0d6727e04c0e81bb83040cdb78ad7bd60646a 100644 (file)
@@ -407,6 +407,9 @@ lwline_measured_from_lwline(const LWLINE *lwline, double m_start, double m_end)
                length_so_far += distance2d_pt_pt(&a, &b);
                if ( length > 0.0 )
                        m = m_start + m_range * length_so_far / length;
+               /* #3172, support (valid) zero-length inputs */
+               else if ( length == 0.0 && npoints > 1 )
+                       m = m_start + m_range * i / (npoints-1);
                else
                        m = 0.0;
                q.x = p2.x;
index 4c99a953358124c8ed7305aa5470154b82d669c0..71687bd3ec830ee6e7bb7a132ba5c3a72afadfd4 100644 (file)
@@ -906,5 +906,7 @@ SELECT '#2870', ST_Summary('Point(151.215289 -33.856885)'::geometry::bytea::geog
 
 SELECT '#2956', st_astwkb(null,0) is null;
 
+SELECT '#3172', ST_AsText(ST_AddMeasure('LINESTRING(0 0,0 0)', 1, 2));
+
 -- Clean up
 DELETE FROM spatial_ref_sys;
index ae4b42dd25a579f87ec3d78139a22367895a5bbc..860cdc2e107a1f4574ed0fb8ddcbb047cae7752a 100644 (file)
@@ -265,3 +265,4 @@ ERROR:  invalid GML representation
 #2788|f|Self-intersection|POINT(1 1)
 #2870|Point[GS]
 #2956|t
+#3172|LINESTRING M (0 0 1,0 0 2)