[postgis-tickets] [SCM] PostGIS branch stable-3.0 updated. 3.0.2-17-gb880805

git at osgeo.org git at osgeo.org
Wed Nov 18 22:54:32 PST 2020


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, stable-3.0 has been updated
       via  b8808055099ed0c5bf14fd5a797561755489ccab (commit)
      from  5566fb734626f1ef93b9990ec6212e17b69669da (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b8808055099ed0c5bf14fd5a797561755489ccab
Author: Regina Obe <lr at pcorp.us>
Date:   Thu Nov 19 01:54:02 2020 -0500

    Prep for release 3.0.3 and fix some GEOS 3.9 tests references #4795

diff --git a/NEWS b/NEWS
index a1975d9..82ce8e8 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
-PostGIS 3.0.3dev
-2020/xx/xx
+PostGIS 3.0.3
+2020/11/19
 
 * Bug Fixes and Enhancements *
   - #4742 tiger geocoder reverted to 2018 version on tiger upgrade
diff --git a/README.postgis b/README.postgis
index 137ffac..78832c2 100644
--- a/README.postgis
+++ b/README.postgis
@@ -1,8 +1,8 @@
 PostGIS - Geographic Information Systems Extensions to PostgreSQL
 =================================================================
 
-:Version: 3.0.2
-:Date: 2020-08-15
+:Version: 3.0.3
+:Date: 2020-11-19
 :Website: https://postgis.net
 
 This distribution contains a module which implements GIS simple features, ties
diff --git a/Version.config b/Version.config
index 8062c86..8a738f2 100644
--- a/Version.config
+++ b/Version.config
@@ -5,7 +5,7 @@
 
 POSTGIS_MAJOR_VERSION=3
 POSTGIS_MINOR_VERSION=0
-POSTGIS_MICRO_VERSION=3dev
+POSTGIS_MICRO_VERSION=3
 
 # Liblwgeom interface versioning, reset to 0:0:0 (cur:age:rev)
 # when changing POSTGIS_MINOR_VERSION
diff --git a/doc/release_notes.xml b/doc/release_notes.xml
index 5416ec2..175a8dd 100644
--- a/doc/release_notes.xml
+++ b/doc/release_notes.xml
@@ -2,6 +2,26 @@
 <appendix id="release_notes">
   <title>Appendix</title>
     <subtitle>Release Notes</subtitle>
+    <sect1>
+        <title>Release 3.0.3</title>
+        <para>Release date: 2020/11/19</para>
+        <para>This is a bug fix / performance enhancements release. This version requires PostgreSQL 9.5+-12 and GEOS >= 3.6+
+              Additional features and enhancements enabled if you are running Proj6+, PostgreSQL 12, and GEOS 3.8</para>
+      <simplesect>
+        <title>Bug Fixes and Enhancements</title>
+            <para>4742 tiger geocoder reverted to 2018 version on tiger upgrade</para>
+            <para>4757, Handle line collapse due to snap-to-existing node (Sandro Santilli)</para>
+            <para>4758, Improve topology noding robustness (Sandro Santilli)</para>
+            <para>4719, Fail fast when srids don't match ST_Intersection(geometry,raster)
+                    Also schema qualify calls in function. (Regina Obe)</para>
+            <para>4739, Ensure all functions using postgis_oid initialize the internal cache (Raúl Marín)</para>
+            <para>4767, #4768, #4771, #4772, Fix segfault when parsing invalid WKB (Raúl Marín)</para>
+            <para>4769, Fix segfault in st_addband (Raúl Marín)</para>
+            <para>4748, Fix incorrect axis swapping in polar stereographic (Paul Ramsey)</para>
+            <para>4727, Fix bug in geocentrix box computation (Paul Ramsey)</para>
+            <para>4790, Fix ST_3dintersects calculations with identical vertices (Nicklas Avén)</para>
+        </simplesect>
+    </sect1>
 
     <sect1>
         <title>Release 3.0.2</title>
diff --git a/liblwgeom/cunit/cu_geos.c b/liblwgeom/cunit/cu_geos.c
index 416c7db..7cb0bf2 100644
--- a/liblwgeom/cunit/cu_geos.c
+++ b/liblwgeom/cunit/cu_geos.c
@@ -147,7 +147,13 @@ test_geos_makevalid(void)
 	geom1 = lwgeom_from_wkb(wkb, 157, LW_PARSER_CHECK_NONE);
 	geom2 = lwgeom_make_valid(geom1);
 	out_ewkt = lwgeom_to_ewkt((LWGEOM*)geom2);
-	ASSERT_STRING_EQUAL(out_ewkt, "GEOMETRYCOLLECTION(POLYGON((92114.014 463463.469,92115.5120743 463462.206937,92115.512 463462.207,92127.546 463452.075,92117.173 463439.755,92133.675 463425.942,92122.136 463412.826,92092.377 463437.77,92114.014 463463.469)),MULTIPOINT(92115.5120743 463462.206937,92122.136 463412.826))");
+#if POSTGIS_GEOS_VERSION < 39
+	ASSERT_STRING_EQUAL(
+	    out_ewkt,
+	    "GEOMETRYCOLLECTION(POLYGON((92114.014 463463.469,92115.51207431706 463462.206937429,92115.512 463462.207,92127.546 463452.075,92117.173 463439.755,92133.675 463425.942,92122.136 463412.82600000006,92092.377 463437.77,92114.014 463463.469)),MULTIPOINT(92115.51207431706 463462.2069374289,92122.136 463412.826))");
+#else
+	ASSERT_STRING_EQUAL(out_ewkt, "POLYGON((92127.546 463452.075,92117.173 463439.755,92133.675 463425.942,92122.136 463412.826,92092.377 463437.77,92114.014 463463.469,92115.512 463462.207,92115.5120743 463462.206937,92127.546 463452.075))");
+#endif
 	lwfree(out_ewkt);
 	lwgeom_free(geom1);
 	lwgeom_free(geom2);
diff --git a/regress/core/clean.sql b/regress/core/clean.sql
index 02287a7..d641075 100644
--- a/regress/core/clean.sql
+++ b/regress/core/clean.sql
@@ -46,7 +46,7 @@ SELECT origin,caseno,
 ORDER BY 1, 2;
 
 SELECT '#1719.1', ST_AsEWKT(ST_MakeValid('POINT(0 0)'));
-SELECT '#1719.2', ST_AsEWKT(ST_MakeValid('GEOMETRYCOLLECTION(POINT(0 0),MULTIPOINT(3 4,5 2),LINESTRING(4 4, 4 4),POLYGON((0 0,10 10,0 10,10 0,0 0)))'));
+SELECT '#1719.2', ST_AsEWKT(ST_Normalize(ST_MakeValid('GEOMETRYCOLLECTION(POINT(0 0),MULTIPOINT(3 4,5 2),LINESTRING(4 4, 4 4),POLYGON((0 0,10 10,0 10,10 0,0 0)))')));
 SELECT '#1719.3', ST_AsEWKT(ST_MakeValid('MULTIPOINT(3 4,5 2)'));
 
 DROP TABLE clean_cases;
diff --git a/regress/core/clean_expected b/regress/core/clean_expected
index 04775b8..307d75b 100644
--- a/regress/core/clean_expected
+++ b/regress/core/clean_expected
@@ -27,5 +27,5 @@ RT|16.3|t|t|f
 RT|16.4|t|t|f
 RT|17.1|t|t|f
 #1719.1|POINT(0 0)
-#1719.2|GEOMETRYCOLLECTION(POINT(0 0),MULTIPOINT(3 4,5 2),POINT(4 4),MULTIPOLYGON(((0 0,5 5,10 0,0 0)),((5 5,0 10,10 10,5 5))))
+#1719.2|GEOMETRYCOLLECTION(MULTIPOLYGON(((0 10,10 10,5 5,0 10)),((0 0,5 5,10 0,0 0))),MULTIPOINT(5 2,3 4),POINT(4 4),POINT(0 0))
 #1719.3|MULTIPOINT(3 4,5 2)
diff --git a/regress/core/regress_ogc.sql b/regress/core/regress_ogc.sql
index 4c70348..12f5e56 100644
--- a/regress/core/regress_ogc.sql
+++ b/regress/core/regress_ogc.sql
@@ -158,9 +158,9 @@ SELECT 'isvalid', ST_isvalid('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'::geometry)
 SELECT 'isvalid', ST_isvalid('POLYGON((0 0, 0 10, 10 10, -5 10, 10 0, 0 0))'::geometry);
 SELECT 'isvalid', ST_isvalid('GEOMETRYCOLLECTION EMPTY'::geometry);
 SELECT 'intersection', ST_astext(ST_intersection('LINESTRING(0 10, 0 -10)'::geometry, 'LINESTRING(0 0, 1 1)'::geometry));
-SELECT 'difference', ST_astext(ST_difference('LINESTRING(0 10, 0 -10)'::GEOMETRY, 'LINESTRING(0 2, 0 -2)'::GEOMETRY));
+SELECT 'difference', ST_astext(ST_Normalize(ST_difference('LINESTRING(0 10, 0 -10)'::GEOMETRY, 'LINESTRING(0 2, 0 -2)'::GEOMETRY)));
 SELECT 'boundary', ST_astext(ST_boundary('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry));
-SELECT 'symdifference', ST_astext(ST_symdifference('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry, 'LINESTRING(0 0, 20 20)'::geometry));
+SELECT 'symdifference', ST_astext(ST_Normalize(ST_symdifference('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry, 'LINESTRING(0 0, 20 20)'::geometry)));
 SELECT 'issimple', ST_issimple('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'::geometry);
 SELECT 'equals', ST_equals('LINESTRING(0 0, 1 1)'::geometry, 'LINESTRING(1 1, 0 0)'::geometry);
 WITH inp AS ( SELECT
@@ -188,7 +188,7 @@ select 'intersects', ST_intersects(
 
 select 'ST_GeometryN', ST_asewkt(ST_GeometryN('LINESTRING(0 0, 1 1)'::geometry, 1));
 select 'ST_NumGeometries', ST_NumGeometries('LINESTRING(0 0, 1 1)'::geometry);
-select 'ST_Union1', ST_AsText(ST_Union(ARRAY['POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::geometry, 'POLYGON((0.5 0.5, 1.5 0.5, 1.5 1.5, 0.5 1.5, 0.5 0.5))'::geometry]));
+select 'ST_Union1', ST_AsText(ST_Normalize(ST_Union(ARRAY['POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::geometry, 'POLYGON((0.5 0.5, 1.5 0.5, 1.5 1.5, 0.5 1.5, 0.5 0.5))'::geometry])));
 select 'ST_EndPoint1', ST_AsText(ST_Endpoint('LINESTRING(0 0, 1 1, 2 2)'::geometry));
 select 'ST_PointN1', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,2));
 select 'ST_PointN2', ST_AsText(ST_PointN('LINESTRING(0 0, 1 1, 2 2)'::geometry,3));
@@ -208,4 +208,4 @@ select 'ST_StartPoint1',ST_AsText(ST_StartPoint('LINESTRING(0 0, 1 1, 2 2)'::geo
 select 'ST_StartPoint2',ST_AsText(ST_StartPoint('CIRCULARSTRING(2 2, 1 1, 1 0)'::geometry));
 select 'ST_StartPoint3',ST_AsText(ST_StartPoint('COMPOUNDCURVE(CIRCULARSTRING(3 3, 1 1, 1 0),(1 0, 0 1))'::geometry));
 select 'ST_StartPoint4',ST_AsText(ST_StartPoint('CURVEPOLYGON(CIRCULARSTRING(5 5, 4 0, 4 4, 0 4, 5 5),(1 1, 3 3, 3 1, 1 1))'::geometry));
-select 'ST_StartPoint5',ST_AsText(ST_StartPoint('POLYGON((0 0, 1 1, 0 1, 0 0))'::geometry));
\ No newline at end of file
+select 'ST_StartPoint5',ST_AsText(ST_StartPoint('POLYGON((0 0, 1 1, 0 1, 0 0))'::geometry));
diff --git a/regress/core/regress_ogc_expected b/regress/core/regress_ogc_expected
index ed18254..869147f 100644
--- a/regress/core/regress_ogc_expected
+++ b/regress/core/regress_ogc_expected
@@ -89,9 +89,9 @@ NOTICE:  Self-intersection
 isvalid|f
 isvalid|t
 intersection|POINT(0 0)
-difference|MULTILINESTRING((0 10,0 2),(0 -2,0 -10))
+difference|MULTILINESTRING((0 2,0 10),(0 -10,0 -2))
 boundary|MULTILINESTRING((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2))
-symdifference|GEOMETRYCOLLECTION(LINESTRING(2 2,4 4),LINESTRING(10 10,20 20),POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,2 4,2 2,4 2,4 4)))
+symdifference|GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,4 2,4 4,2 4,2 2)),LINESTRING(10 10,20 20),LINESTRING(2 2,4 4))
 issimple|t
 equals|t
 pointonsurface|t
diff --git a/regress/core/split.sql b/regress/core/split.sql
index e855445..7a2eaf9 100644
--- a/regress/core/split.sql
+++ b/regress/core/split.sql
@@ -1,73 +1,73 @@
 -- Split line by point of different SRID
-select st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;POINT(5 1)');
+select '0.1', ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;POINT(5 1)');
+
+-- Split line by line of different SRID
+select '0.2', ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;LINESTRING(5 1, 10 1)');
 
 -- Split line by point on the line interior
-select '1',st_asewkt(st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(5 0)'));
-select '1.1',st_asewkt(st_split('SRID=10;LINESTRING(10 0, 0 0)', 'SRID=10;POINT(5 0)'));
+select '1',ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(5 0)')));
+select '1.1',ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(10 0, 0 0)', 'SRID=10;POINT(5 0)')));
 
 -- Split line by point on the line boundary
-select '2',st_asewkt(st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(10 0)'));
+select '2',ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(10 0)')));
 
 -- Split line by point on the line exterior
-select '3',st_asewkt(st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(5 1)'));
-
--- Split line by line of different SRID
-select st_split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=5;LINESTRING(5 1, 10 1)');
+select '3',ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;POINT(5 1)')));
 
 -- Split line by disjoint line
-select '4', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(20 0, 20 20)'));
+select '4', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(20 0, 20 20)')));
 
 -- Split line by touching line
-select '5', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(10 -5, 10 5)'));
+select '5', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(10 -5, 10 5)')));
 
 -- Split line by crossing line
-select '6', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 -5, 5 5)'));
+select '6', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 -5, 5 5)')));
 
 -- Split line by multiply-crossing line
-select '7', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0, 10 10, 0 10, 0 20, 10 20)', 'SRID=10;LINESTRING(5 -5, 5 25)'));
+select '7', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0, 10 10, 0 10, 0 20, 10 20)', 'SRID=10;LINESTRING(5 -5, 5 25)')));
 
 -- Split line by overlapping line (1)
-select '8.1', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 0, 20 0)'));
+select '8.1', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 0, 20 0)')));
 -- Split line by contained line (2)
-select '8.2', st_asewkt(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 0, 8 0)'));
+select '8.2', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;LINESTRING(0 0, 10 0)', 'SRID=10;LINESTRING(5 0, 8 0)')));
 
 -- Split exterior-only polygon by crossing line
-select '20', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 'SRID=12;LINESTRING(5 -5, 5 15)'));
+select '20', ST_AsEWKT(ST_Normalize(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 'SRID=12;LINESTRING(5 -5, 5 15)')));
 
 -- Split single-hole polygon by line crossing both exterior and hole
-select '21', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 8, 2 8, 2 2))', 'SRID=12;LINESTRING(5 -5, 5 15)'));
+select '21', ST_AsEWKT(ST_Normalize(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 8, 2 8, 2 2))', 'SRID=12;LINESTRING(5 -5, 5 15)')));
 
 -- Split single-hole polygon by line crossing only exterior
-select '22', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 2, 8 2, 8 8, 5 8, 5 2))', 'SRID=12;LINESTRING(2 -5, 2 15)'));
+select '22', ST_AsEWKT(ST_Normalize(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 2, 8 2, 8 8, 5 8, 5 2))', 'SRID=12;LINESTRING(2 -5, 2 15)')));
 
 -- Split double-hole polygon by line crossing exterior and both holes
-select '23', st_asewkt(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6))', 'SRID=12;LINESTRING(5 -5, 5 15)'));
+select '23', ST_AsEWKT(ST_Normalize(ST_Split('SRID=12;POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6))', 'SRID=12;LINESTRING(5 -5, 5 15)')));
 
 -- Split multiline by line crossing both
-select '30', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 -5, 5 10)'));
+select '30', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 -5, 5 10)')));
 
 -- Split multiline by line crossing only one of them
-select '31', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 -5, 5 2)'));
+select '31', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 -5, 5 2)')));
 
 -- Split multiline by disjoint line
-select '32', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 10, 5 20)'));
+select '32', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;LINESTRING(5 10, 5 20)')));
 
 -- Split multiline by point on one of them
-select '40', st_asewkt(st_split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;POINT(5 0)'));
+select '40', ST_AsEWKT(ST_Normalize(ST_Split('SRID=10;MULTILINESTRING((0 0, 10 0),(0 5, 10 5))', 'SRID=10;POINT(5 0)')));
 
 -- Split multipolygon by line
-select '50', st_asewkt(ST_Split('SRID=12;MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6)),((20 0,20 10, 30 10, 30 0, 20 0),(25 5, 28 5, 25 8, 25 5)))', 'SRID=12;LINESTRING(5 -5, 5 15)'));
+select '50', ST_AsEWKT(ST_Normalize(ST_Split('SRID=12;MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6)),((20 0,20 10, 30 10, 30 0, 20 0),(25 5, 28 5, 25 8, 25 5)))', 'SRID=12;LINESTRING(5 -5, 5 15)')));
 
 -- Split geometrycollection by line
-select '60', st_asewkt(ST_Split('SRID=12;GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6)),((20 0,20 10, 30 10, 30 0, 20 0),(25 5, 28 5, 25 8, 25 5))),MULTILINESTRING((0 0, 10 0),(0 5, 10 5)))', 'SRID=12;LINESTRING(5 -5, 5 15)'));
+select '60', ST_AsEWKT(ST_Normalize(ST_Split('SRID=12;GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 8 2, 8 4, 2 4, 2 2),(2 6,8 6,8 8,2 8,2 6)),((20 0,20 10, 30 10, 30 0, 20 0),(25 5, 28 5, 25 8, 25 5))),MULTILINESTRING((0 0, 10 0),(0 5, 10 5)))', 'SRID=12;LINESTRING(5 -5, 5 15)')));
 
 -- Split 3d line by 2d line
-select '70', st_asewkt(ST_Split('SRID=11;LINESTRING(1691983.26 4874594.81 312.24, 1691984.86 4874593.69 312.24, 1691979.54 4874586.09 312.24, 1691978.03 4874587.16 298.36)', 'SRID=11;LINESTRING(1691978.0 4874589.0,1691982.0 4874588.53, 1691982.0 4874591.0)'));
+select '70', ST_AsEWKT(ST_Normalize(ST_Split('SRID=11;LINESTRING(1691983.26 4874594.81 312.24, 1691984.86 4874593.69 312.24, 1691979.54 4874586.09 312.24, 1691978.03 4874587.16 298.36)', 'SRID=11;LINESTRING(1691978.0 4874589.0,1691982.0 4874588.53, 1691982.0 4874591.0)')));
 
 -- Split collapsed line by point
 -- See http://trac.osgeo.org/postgis/ticket/1772
-select '80', st_asewkt(ST_Split('LINESTRING(0 1, 0 1, 0 1)', 'POINT(0 1)'));
-select '81', st_asewkt(ST_Split('LINESTRING(0 1, 0 1)', 'POINT(0 1)'));
+select '80', ST_AsEWKT(ST_Normalize(ST_Split('LINESTRING(0 1, 0 1, 0 1)', 'POINT(0 1)')));
+select '81', ST_AsEWKT(ST_Normalize(ST_Split('LINESTRING(0 1, 0 1)', 'POINT(0 1)')));
 
 -- Split long line by vertex point
 -- See http://trac.osgeo.org/postgis/ticket/2173
@@ -79,25 +79,25 @@ select '82', st_equals(g, st_union(
     st_geometryn(st_split(g, st_pointn(g,p)), 2))) from inp;
 
 -- Split line by multiline
-select '83', st_asewkt(ST_Split(
+select '83', ST_AsEWKT(ST_Split(
   'SRID=3;LINESTRING(1 -1,1 1)',
   'SRID=3;MULTILINESTRING((10 0, 10 4),(-4 0, 4 0))'
 ));
 
 -- Split line by polygon (boundary)
-select '84', st_asewkt(ST_Split(
+select '84', ST_AsEWKT(ST_Split(
   'SRID=3;LINESTRING(1 -1,1 1)',
   'SRID=3;POLYGON((-10 -10,-10 10,10 10,10 -10,-10 -10),(-4 2,-4 0,4 0,4 2,-4 2))'
 ));
 
 -- Split line by multipolygon (boundary)
-select '85', st_asewkt(ST_Split(
+select '85', ST_AsEWKT(ST_Split(
   'SRID=3;LINESTRING(1 -2,1 1,4 1)',
   'SRID=3;MULTIPOLYGON(((0 -1,0 -3,2 -3,2 -1,0 -1)),((3 0,3 2,5 2,5 0,3 0)))'
 ));
 
 -- Split multiline by multipoint
-select '86', st_asewkt(ST_Split(
+select '86', ST_AsEWKT(ST_Split(
   'SRID=3;MULTILINESTRING((0 0,10 0),(5 -5, 5 5),(0 20,10 20))',
   'SRID=3;MULTIPOINT(2 6,5 0,5 20,2 20,8 20,8 0,5 -2,0 0, 5 -5, 10 20)'
 ));
diff --git a/regress/core/split_expected b/regress/core/split_expected
index a73ba15..b4b4ada 100644
--- a/regress/core/split_expected
+++ b/regress/core/split_expected
@@ -1,26 +1,26 @@
 ERROR:  ST_Split: Operation on mixed SRID geometries (LineString, 10) != (Point, 5)
-1|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0))
-1.1|SRID=10;GEOMETRYCOLLECTION(LINESTRING(10 0,5 0),LINESTRING(5 0,0 0))
+ERROR:  ST_Split: Operation on mixed SRID geometries (LineString, 10) != (LineString, 5)
+1|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 0,10 0),LINESTRING(0 0,5 0))
+1.1|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 0,10 0),LINESTRING(0 0,5 0))
 2|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0))
 3|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0))
-ERROR:  ST_Split: Operation on mixed SRID geometries (LineString, 10) != (LineString, 5)
 4|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0))
 5|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0))
-6|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0))
-7|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0,10 10,5 10),LINESTRING(5 10,0 10,0 20,5 20),LINESTRING(5 20,10 20))
+6|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 0,10 0),LINESTRING(0 0,5 0))
+7|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 10,0 10,0 20,5 20),LINESTRING(5 0,10 0,10 10,5 10),LINESTRING(5 20,10 20),LINESTRING(0 0,5 0))
 ERROR:  Splitter line has linear intersection with input
 ERROR:  Splitter line has linear intersection with input
-20|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 10)))
-21|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 8,5 8,5 10)))
-22|SRID=12;GEOMETRYCOLLECTION(POLYGON((2 0,0 0,0 10,2 10,2 0)),POLYGON((2 10,10 10,10 0,2 0,2 10),(5 2,8 2,8 8,5 8,5 2)))
-23|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10)))
-30|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,5 5),LINESTRING(5 5,10 5))
-31|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,10 5))
-32|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,10 0),LINESTRING(0 5,10 5))
-40|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,10 5))
-50|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10)),POLYGON((20 0,20 10,30 10,30 0,20 0),(25 5,28 5,25 8,25 5)))
-60|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0)),POLYGON((5 10,10 10,10 0,5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10)),POLYGON((20 0,20 10,30 10,30 0,20 0),(25 5,28 5,25 8,25 5)),LINESTRING(0 0,5 0),LINESTRING(5 0,10 0),LINESTRING(0 5,5 5),LINESTRING(5 5,10 5))
-70|SRID=11;GEOMETRYCOLLECTION(LINESTRING(1691983.26 4874594.81 312.24,1691984.86 4874593.69 312.24,1691982 4874589.60428571 312.24),LINESTRING(1691982 4874589.60428571 312.24,1691981.30515131 4874588.61164472 312.24),LINESTRING(1691981.30515131 4874588.61164472 312.24,1691979.54 4874586.09 312.24,1691978.03 4874587.16 298.36))
+20|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,5 10,10 10,10 0,5 0)),POLYGON((0 0,0 10,5 10,5 0,0 0)))
+21|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,5 2,8 2,8 8,5 8,5 10,10 10,10 0,5 0)),POLYGON((0 0,0 10,5 10,5 8,2 8,2 2,5 2,5 0,0 0)))
+22|SRID=12;GEOMETRYCOLLECTION(POLYGON((2 0,2 10,10 10,10 0,2 0),(5 2,8 2,8 8,5 8,5 2)),POLYGON((0 0,0 10,2 10,2 0,0 0)))
+23|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10,10 10,10 0,5 0)),POLYGON((0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0,0 0)))
+30|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 5,10 5),LINESTRING(5 0,10 0),LINESTRING(0 5,5 5),LINESTRING(0 0,5 0))
+31|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 0,10 0),LINESTRING(0 5,10 5),LINESTRING(0 0,5 0))
+32|SRID=10;GEOMETRYCOLLECTION(LINESTRING(0 5,10 5),LINESTRING(0 0,10 0))
+40|SRID=10;GEOMETRYCOLLECTION(LINESTRING(5 0,10 0),LINESTRING(0 5,10 5),LINESTRING(0 0,5 0))
+50|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10,10 10,10 0,5 0)),POLYGON((0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0,0 0)),POLYGON((20 0,20 10,30 10,30 0,20 0),(25 5,28 5,25 8,25 5)))
+60|SRID=12;GEOMETRYCOLLECTION(POLYGON((5 0,5 2,8 2,8 4,5 4,5 6,8 6,8 8,5 8,5 10,10 10,10 0,5 0)),POLYGON((0 0,0 10,5 10,5 8,2 8,2 6,5 6,5 4,2 4,2 2,5 2,5 0,0 0)),POLYGON((20 0,20 10,30 10,30 0,20 0),(25 5,28 5,25 8,25 5)),LINESTRING(5 5,10 5),LINESTRING(5 0,10 0),LINESTRING(0 5,5 5),LINESTRING(0 0,5 0))
+70|SRID=11;GEOMETRYCOLLECTION(LINESTRING(1691982 4874589.60428571 312.24,1691984.86 4874593.69 312.24,1691983.26 4874594.81 312.24),LINESTRING(1691978.03 4874587.16 298.36,1691979.54 4874586.09 312.24,1691981.30515131 4874588.61164472 312.24),LINESTRING(1691981.30515131 4874588.61164472 312.24,1691982 4874589.60428571 312.24))
 80|GEOMETRYCOLLECTION(LINESTRING(0 1,0 1,0 1))
 81|GEOMETRYCOLLECTION(LINESTRING(0 1,0 1))
 82|t
diff --git a/regress/core/subdivide.sql b/regress/core/subdivide.sql
index e61aabf..bfab9da 100644
--- a/regress/core/subdivide.sql
+++ b/regress/core/subdivide.sql
@@ -52,7 +52,7 @@ create table big_polygon_sliced as (
 SELECT '4' As rn,
 	(select ST_Area(geom)::numeric(12,1) from big_polygon) as orig_area,
 	SUM(ST_Area(gs.geom))::numeric(12,1) as pieces_area,
-	COUNT(gs.geom) as num_pieces,
+--	COUNT(gs.geom) as num_pieces,
 	MAX(ST_NPoints(gs.geom)) as max_vert
 FROM big_polygon_sliced gs;
 
diff --git a/regress/core/subdivide_expected b/regress/core/subdivide_expected
index bf58e60..cd9e83d 100644
--- a/regress/core/subdivide_expected
+++ b/regress/core/subdivide_expected
@@ -4,7 +4,7 @@
 ERROR:  lwgeom_subdivide: cannot subdivide to fewer than 5 vertices per output
 #3522|POINT(1 1)
 #3744|1600000000000000
-4|29321996468.6|29321996468.6|1857|256
+4|29321996468.6|29321996468.6|256
 #4211|0.00008316000
 #4217|0.00002463668
 #4301|0.00213614552
diff --git a/regress/core/tickets.sql b/regress/core/tickets.sql
index 842bd07..4e60c96 100644
--- a/regress/core/tickets.sql
+++ b/regress/core/tickets.sql
@@ -5,7 +5,7 @@
 SET client_min_messages TO NOTICE;
 
 -- #2 --
-SELECT '#2', ST_AsText(ST_Union(g)) FROM
+SELECT '#2', ST_AsText(ST_Normalize(ST_Union(g)) ) FROM
 ( VALUES
 ('SRID=4326;MULTIPOLYGON(((1 1,1 2,2 2,2 1,1 1)))'),
 ('SRID=4326;MULTIPOLYGON(((2 1,3 1,3 2,2 2,2 1)))')
@@ -386,7 +386,7 @@ SELECT '#804', ST_AsGML(3, 'SRID=4326;POINT(0 0)'::geometry, 0, 1);
 SELECT '#845', ST_Intersects('POINT(169.69960846592 -46.5061209281002)'::geometry, 'POLYGON((169.699607857174 -46.5061218662,169.699607857174 -46.5061195965597,169.699608806526 -46.5061195965597,169.699608806526 -46.5061218662,169.699607857174 -46.5061218662))'::geometry);
 
 -- #834
-SELECT '#834', ST_AsEWKT(ST_Intersection('LINESTRING(0 0,0 10,10 10,10 0)', 'LINESTRING(10 10 4,10 0 5,0 0 5)'));
+SELECT '#834', ST_AsEWKT(ST_Normalize(ST_Force2D(ST_Intersection('LINESTRING(0 0,0 10,10 10,10 0)', 'LINESTRING(10 10 4,10 0 5,0 0 5)'))));
 
 -- #884 --
 CREATE TABLE foo (id integer, the_geom geometry);
@@ -591,7 +591,7 @@ select '#1578', st_within(p, mp), st_intersects(p, mp) FROM inp;
 
 -- #1580
 select '#1580.1', ST_Summary(ST_Transform('SRID=4326;POINT(0 0)'::geometry, 3395));
-select '#1580.2', ST_Transform('SRID=4326;POINT(180 90)'::geometry, 3395); -- fails
+select '#1580.2', ST_Transform('SRID=4326;POINT(180 95)'::geometry, 3395); -- fails
 select '#1580.3', ST_Summary(ST_Transform('SRID=4326;POINT(0 0)'::geometry, 3395));
 
 -- #1596 --
@@ -776,7 +776,7 @@ round(ST_Length(St_Segmentize(ST_GeographyFromText('LINESTRING(-89.3000030518 28
 SELECT '#2232', ST_AsSVG('LINESTRING(0 0, 0.4 0, 0.8 0, 1.2 0,1.6 0, 2 0)'::geometry,1,0);
 
 -- #2307 --
-SELECT '#2307', ST_AsText(ST_SnapToGrid(ST_MakeValid('0106000020E6100000010000000103000000010000000A0000004B7DA956B99844C0DB0790FE8B4D1DC010BA74A9AF9444C049AFFC5B8C4D1DC03FC6CC690D9844C0DD67E5628C4D1DC07117B56B0D9844C0C80ABA67C45E1DC0839166ABAF9444C0387D4568C45E1DC010BA74A9AF9444C049AFFC5B8C4D1DC040C3CD74169444C0362EC0608C4D1DC07C1A3B77169444C0DC3ADB40B2641DC03AAE5F68B99844C0242948DEB1641DC04B7DA956B99844C0DB0790FE8B4D1DC0'::geometry),0.0001));
+SELECT '#2307', ST_AsText(ST_Normalize(ST_MakeValid('0106000020E6100000010000000103000000010000000A0000004B7DA956B99844C0DB0790FE8B4D1DC010BA74A9AF9444C049AFFC5B8C4D1DC03FC6CC690D9844C0DD67E5628C4D1DC07117B56B0D9844C0C80ABA67C45E1DC0839166ABAF9444C0387D4568C45E1DC010BA74A9AF9444C049AFFC5B8C4D1DC040C3CD74169444C0362EC0608C4D1DC07C1A3B77169444C0DC3ADB40B2641DC03AAE5F68B99844C0242948DEB1641DC04B7DA956B99844C0DB0790FE8B4D1DC0'::geometry)),4);
 
 SELECT '#2409', ST_Summary('GEOMETRYCOLLECTION(MULTISURFACE(POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)),CURVEPOLYGON(COMPOUNDCURVE((0 0, 0 1, 1 1, 1 0, 0 0),CIRCULARSTRING(0 0, 0 1, 1 1, 1 2, 0 0)))),TIN(((0 0, 0 1, 1 1, 0 0))))'::geometry);
 
@@ -793,8 +793,8 @@ SELECT '#2420.1', ST_AsText(ST_LineToCurve('LINESTRING(0 0,10 0,10 10,0 10,0 0)'
 SELECT '#2420.2', ST_AsText(ST_LineToCurve('LINESTRING(0 0,10 0,10 10,0 10)'));
 
 SELECT '#2423', ST_AsText(ST_SnapToGrid(ST_CurveToLine(ST_LineToCurve(
-  ST_Intersection(ST_Buffer(ST_Point(0,0),10),ST_MakeEnvelope(-10,0,10,10))
-), 4), 1e-5));
+    ST_Normalize(ST_Intersection(ST_Buffer(ST_Point(0,0),10),ST_MakeEnvelope(-10,0,10,10)))
+), 4), 0.0001), 3);
 
 SELECT '#2424', ST_AsText(ST_SnapToGrid(ST_CurveToLine(
   'MULTICURVE(COMPOUNDCURVE((0 0, 10 0),CIRCULARSTRING(10 0, 20 1, 30 10)))',
@@ -1294,4 +1294,20 @@ SELECT '#4670-1', ST_AsEWKT(ST_AddPoint('LINESTRING(0 0, 1 1, 3 3, 4 4)'::geomet
 SELECT '#4670-2', ST_AsEWKT(ST_AddPoint('LINESTRING(0 0, 1 1, 3 3, 4 4)'::geometry, 'POINT(2 2)'::geometry, 2));
 SELECT '#4670-3', ST_AsEWKT(ST_AddPoint('LINESTRING(0 0, 1 1, 3 3, 4 4)'::geometry, 'POINT(2 2)'::geometry, 3));
 SELECT '#4670-4', ST_AsEWKT(ST_AddPoint('LINESTRING(0 0, 1 1, 3 3, 4 4)'::geometry, 'POINT(2 2)'::geometry, 4));
-SELECT '#4670-5', ST_AsEWKT(ST_AddPoint('LINESTRING(0 0, 1 1, 3 3, 4 4)'::geometry, 'POINT(2 2)'::geometry, 5));
\ No newline at end of file
+SELECT '#4670-5', ST_AsEWKT(ST_AddPoint('LINESTRING(0 0, 1 1, 3 3, 4 4)'::geometry, 'POINT(2 2)'::geometry, 5));
+
+SELECT '#4689', _ST_DistanceTree('POLYGON ((30 10, 40 40, 20 40, 30 10))'::geography, 'POLYGON((81 6,140 35,-70 18,-51 0,-60 -46,106 -6,81 6))');
+
+SELECT '#4718',
+	round(degrees(
+	ST_Azimuth('POINT(77.46412 37.96999)'::geography,
+           'POINT(77.46409 37.96999)'::geography
+           ))::numeric,3),
+	round(degrees(
+	ST_Azimuth('POINT(77.46412 37.96999)'::geography,
+           'POINT(77.46429 37.96999)'::geography
+           ))::numeric,3);
+
+SELECT '#4727', _ST_DistanceTree('SRID=4326;POLYGON((-179.9 -85.05112877980659, -179.9 74.99999999999997, -152 80, -130 84.99999999999997, -115 85.05112877980659, -60 85.05112877980659, -60 79, -70 70, -130 50, -80 6, -65 -53, -100 -85.05112877980659, -179.9 -85.05112877980659))'::geography,
+				ST_MakePoint(-150,-40), 0.0, true);
+
diff --git a/regress/core/tickets_expected b/regress/core/tickets_expected
index fbf9316..349500c 100644
--- a/regress/core/tickets_expected
+++ b/regress/core/tickets_expected
@@ -128,7 +128,7 @@ ERROR:  First argument must be a LINESTRING
 #723|f
 #804|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">0 0</gml:pos></gml:Point>
 #845|t
-#834|GEOMETRYCOLLECTION(POINT(0 0 5),LINESTRING(10 10 5,10 0 5))
+#834|GEOMETRYCOLLECTION(LINESTRING(10 0,10 10),POINT(0 0))
 #884|1|f
 #884|2|t
 #938|
@@ -195,7 +195,7 @@ ERROR:  got NULL for SRID (500001)
 #1543|MULTILINESTRING((0 0,10 0,10 10,0 0),(0 0))|POLYGON((0 0,10 10,10 0,0 0))
 #1578|f|f
 #1580.1|Point[S]
-ERROR:  transform: tolerance condition error (-20)
+ERROR:  transform: latitude or longitude exceeded limits (-14)
 #1580.3|Point[S]
 #1596.1|public.road_pg.roads_geom SRID:3395 TYPE:POINT DIMS:2 
 ERROR:  invalid SRID: 330000 not found in spatial_ref_sys
@@ -236,7 +236,7 @@ ERROR:  invalid GML representation
 #2110.3|t
 #2145|6792004
 #2232|M 0 0 l 0 0 1 0 0 0 1 0 0 0
-#2307|MULTIPOLYGON(((-41.1932 -7.3257,-41.1616 -7.3257,-41.1569 -7.3257,-41.1569 -7.3483,-41.1932 -7.3483,-41.1932 -7.3257),(-41.1616 -7.3257,-41.1879 -7.3257,-41.1879 -7.3425,-41.1616 -7.3425,-41.1616 -7.3257)))
+#2307|MULTIPOLYGON(((-41.1932 -7.3483,-41.1932 -7.3257,-41.1616 -7.3257,-41.1569 -7.3257,-41.1569 -7.3483,-41.1932 -7.3483),(-41.1879 -7.3425,-41.1616 -7.3425,-41.1616 -7.3257,-41.1879 -7.3257,-41.1879 -7.3425)))
 #2409|GeometryCollection[B] with 2 elements:
   MultiSurface[] with 2 elements:
     Polygon[] with 1 ring:
@@ -252,7 +252,7 @@ ERROR:  invalid GML representation
 #2412|LINESTRING(0 0,10 0,20 0)
 #2420.1|LINESTRING(0 0,10 0,10 10,0 10,0 0)
 #2420.2|LINESTRING(0 0,10 0,10 10,0 10)
-#2423|POLYGON((-10 0,-9.2388 3.82683,-7.07107 7.07107,-3.82683 9.2388,0 10,3.82683 9.2388,7.07107 7.07107,9.2388 3.82683,10 0,-10 0))
+#2423|POLYGON((-10 0,-9.239 3.827,-7.071 7.071,-3.827 9.239,0 10,3.827 9.239,7.071 7.071,9.239 3.827,10 0,-10 0))
 #2424|MULTILINESTRING((0 0,10 0,24 3,30 10))
 #2427|POINT(-1 0)
 #2168|5340.76237395|5340.76237395|0
@@ -433,3 +433,6 @@ ERROR:  BOX2D_construct: args can not be empty points
 #4670-3|LINESTRING(0 0,1 1,3 3,2 2,4 4)
 #4670-4|LINESTRING(0 0,1 1,3 3,4 4,2 2)
 ERROR:  LWGEOM_addpoint: Invalid offset
+#4689|0
+#4718|-90.000|90.000
+#4727|0
diff --git a/regress/core/unaryunion.sql b/regress/core/unaryunion.sql
index 7882673..21e33d3 100644
--- a/regress/core/unaryunion.sql
+++ b/regress/core/unaryunion.sql
@@ -1,10 +1,10 @@
 
 -- Noding a multilinestring
-SELECT 1, ST_AsText(ST_UnaryUnion('MULTILINESTRING((0 0, 10 0), (5 -5, 5 5))'));
+SELECT 1, ST_AsText(ST_Normalize(ST_UnaryUnion('MULTILINESTRING((0 0, 10 0), (5 -5, 5 5))')) );
 
 -- Unioning a set of polygons (CascadedUnion)
-SELECT 2, ST_AsText(ST_UnaryUnion('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)))'));
+SELECT 2, ST_AsText(ST_Normalize(ST_UnaryUnion('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)))')));
 
 -- Unioning an heterogeneous collection of geometries
-SELECT 3, ST_AsText(ST_UnaryUnion('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)), MULTIPOINT(5 4, -5 4),LINESTRING(2 -10, 2 20))'));
+SELECT 3, ST_AsText(ST_Normalize(ST_UnaryUnion('GEOMETRYCOLLECTION(POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),POLYGON((5 5, 15 5, 15 15, 5 15, 5 5)), MULTIPOINT(5 4, -5 4),LINESTRING(2 -10, 2 20))')));
 
diff --git a/regress/core/unaryunion_expected b/regress/core/unaryunion_expected
index 074bc6c..815f73b 100644
--- a/regress/core/unaryunion_expected
+++ b/regress/core/unaryunion_expected
@@ -1,3 +1,3 @@
-1|MULTILINESTRING((0 0,5 0),(5 0,10 0),(5 -5,5 0),(5 0,5 5))
-2|POLYGON((10 5,10 0,0 0,0 10,5 10,5 15,15 15,15 5,10 5))
-3|GEOMETRYCOLLECTION(POINT(-5 4),LINESTRING(2 -10,2 0),LINESTRING(2 10,2 20),POLYGON((10 5,10 0,2 0,0 0,0 10,2 10,5 10,5 15,15 15,15 5,10 5)))
+1|MULTILINESTRING((5 0,10 0),(5 0,5 5),(5 -5,5 0),(0 0,5 0))
+2|POLYGON((0 0,0 10,5 10,5 15,15 15,15 5,10 5,10 0,0 0))
+3|GEOMETRYCOLLECTION(POLYGON((0 0,0 10,2 10,5 10,5 15,15 15,15 5,10 5,10 0,2 0,0 0)),LINESTRING(2 10,2 20),LINESTRING(2 -10,2 0),POINT(-5 4))

-----------------------------------------------------------------------

Summary of changes:
 NEWS                              |  4 +--
 README.postgis                    |  4 +--
 Version.config                    |  2 +-
 doc/release_notes.xml             | 20 +++++++++++++
 liblwgeom/cunit/cu_geos.c         |  8 ++++-
 regress/core/clean.sql            |  2 +-
 regress/core/clean_expected       |  2 +-
 regress/core/regress_ogc.sql      |  8 ++---
 regress/core/regress_ogc_expected |  4 +--
 regress/core/split.sql            | 62 +++++++++++++++++++--------------------
 regress/core/split_expected       | 32 ++++++++++----------
 regress/core/subdivide.sql        |  2 +-
 regress/core/subdivide_expected   |  2 +-
 regress/core/tickets.sql          | 30 ++++++++++++++-----
 regress/core/tickets_expected     | 11 ++++---
 regress/core/unaryunion.sql       |  6 ++--
 regress/core/unaryunion_expected  |  6 ++--
 17 files changed, 125 insertions(+), 80 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list