polardbxengine/mysql-test/suite/gis/t/spatial_utility_function_si...

555 lines
29 KiB
Plaintext

###############################################################################
# #
# ST_Simplify returns a "simplified" version of the given geometry #
# using the Douglas-Peucker algorithm. #
# #
# Creation Date: 2015-01-28 #
# Author : Pavan Naik #
# #
###############################################################################
############################################################################################
# Creating the spatial objects #
############################################################################################
--echo # Creating the spatial Geometry object
USE test;
CREATE TABLE gis_geometrycollection (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY);
############################################################################################
# Inserting the values specific to the spatial objects #
############################################################################################
# Geometric elements constructing a star and some of its elememts as base
SET @star_elem_vertical= 'POLYGON((5 0,15 25,25 0,15 5,5 0))';
SET @star_elem_horizontal= 'POLYGON((25 0,0 15,30 15,22 10,25 0))';
SET @star_center= 'POINT(15 10)';
SET @star_top= 'POINT(15 25)';
SET @star_bottom_left= 'POINT(5 0)';
SET @star_bottom_right= 'POINT(25 0)';
SET @star_bottom_points= 'MULTIPOINT(5 0,25 0)';
SET @star_all_points= 'MULTIPOINT(5 0,25 0,15 10,15 25)';
SET @star_line_horizontal= 'LINESTRING(10 15,20 15)';
SET @star_line_vertical= 'LINESTRING(15 5,15 25)';
SET @star_top_to_center= 'LINESTRING(15 25,15 10)';
SET @star_lines_near_horizontal= 'MULTILINESTRING((25 0,0 15,15 30,0 5))';
SET @star_lines_near_vertical= 'MULTILINESTRING((0 5,15 25,0 25))';
SET @star= 'POLYGON((5 0,7 10,0 15,10 15,15 25,20 15,30 15,22 10,25 0,15 5,5 0))';
SET @star_of_elems='MULTIPOLYGON(((5 0,15 25,25 0,15 5,5 0)),((25 0,0 15,30 15,22 10,25 0)))';
SET @star_collection_elems='GEOMETRYCOLLECTION(MULTIPOLYGON(((5 0,15 25,25 0,15 5,5 0)),((25 0,0 15,30 15,22 10,25 0))),POLYGON((5 0,7 10,0 15,10 15,15 25,20 15,30 15,22 10,25 0,15 5,5 0)),LINESTRING(15 25,15 10),MULTIPOINT(5 0,25 0),POINT(15 25))';
SET @star_collection_multilinestr='GEOMETRYCOLLECTION(MULTIPOLYGON(((5 0,15 25,25 0,15 5,5 0)),((25 0,0 15,30 15,22 10,25 0))),POLYGON((5 0,7 10,0 15,10 15,15 25,20 15,30 15,22 10,25 0,15 5,5 0)),MULTILINESTRING((25 0,0 15,15 30,0 5)),LINESTRING(15 25,15 10),MULTIPOINT(5 0,25 0),POINT(15 25))';
--disable_warnings
INSERT INTO gis_geometrycollection VALUES
(100,ST_GEOMFROMTEXT(@star)),
(101,ST_GEOMFROMTEXT(@star_elem_vertical)),
(102,ST_GEOMFROMTEXT(@star_elem_horizontal)),
(103,ST_GEOMFROMTEXT(@star_of_elems)),
(104,ST_GEOMFROMTEXT(@star_top)),
(105,ST_GEOMFROMTEXT(@star_center)),
(106,ST_GEOMFROMTEXT(@star_bottom_left)),
(107,ST_GEOMFROMTEXT(@star_bottom_right)),
(108,ST_GEOMFROMTEXT(@star_bottom_points)),
(109,ST_GEOMFROMTEXT(@star_all_points)),
(110,ST_GEOMFROMTEXT(@star_line_horizontal)),
(111,ST_GEOMFROMTEXT(@star_line_vertical)),
(112,ST_GEOMFROMTEXT(@star_top_to_center)),
(113,ST_GEOMFROMTEXT(@star_lines_near_horizontal)),
(114,ST_GEOMFROMTEXT(@star_lines_near_vertical)),
(115,ST_GEOMFROMTEXT(@star_collection_elems)),
(116,ST_GEOMFROMTEXT(@star_collection_multilinestr));
--enable_warnings
--echo # Checking the integrity of the above create/insert statements
--echo # 17 rows.
SELECT count(ST_ASTEXT(g) != 'NULL') FROM gis_geometrycollection;
--echo #####################################################################################
--echo # ST_SIMPLIFY(point)
--echo #####################################################################################
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(17 14)'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-8 2)'), 2));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(9 0)'), 3));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(10 -8)'), 4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(20 -2)'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(7 13)'), 10));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-16 11)'), 1000));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-5 -2)'), 2000000));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-10 6)'), 1234567890));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-16 -8)'), 111111111111));
--echo #####################################################################################
--echo # ST_SIMPLIFY(multipoint)
--echo #####################################################################################
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(19 -4, -2 -6, -8 2)'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-3 14, 19 8, 10 -8)'), 2));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(1 -8, -1 12, -11 16)'), 3));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-16 11, -2 -7, -11 11)'), 4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(19 12, 0 9, 5 10, 20 -16, 7 -17, 9 -18, 19 -7)'), 10));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-1 11, -17 -11, -15 16, 6 -6, 11 -13, -4 -12, -13 -5)'), 1000));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(17 -11, -19 -6, 5 17, -14 13, 20 13, 20 2, 0 -12)'), 200000));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-15 12, 17 -12, -7 14, 1 6, 19 -10, 11 -9, 0 -17)'), 9999999));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(3 -13, 18 -2, -5 -13, -12 1, 20 0, -6 14, 5 -4)'), 1234567890));
--echo #####################################################################################
--echo # ST_SIMPLIFY(linestring)
--echo #####################################################################################
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,10 10)'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5)'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5)'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,4 4,6 -6,10 0)'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5,0 5,0 0)'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5,0 5,0 0)'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,0 10,-5 5,0 0)'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,0 10,-5 5,0 0)'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,3 -3,5 5,7 -7,9 9,10 10)'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5)'), 0.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5)'), 0.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5)'), 0.7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5)'), 0.8));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,2 0,3 -1,4 0,5 1,6 0,7 -1,8 0,9 1,10 0)'), 0.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,2 0,3 -1,4 0,5 1,6 0,7 -1,8 0,9 1,10 0)'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,2 0,3 1,4 0,5 1,6 0,5 -1,4 0,3 -1,2 0,1 -1,0 0)'), 0.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,2 0,3 1,4 0,5 1,6 0,5 -1,4 0,3 -1,2 0,1 -1,0 0)'), 0.7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,2 0,3 1,4 0,5 1,6 0,5 -1,4 0,3 -1,2 0,1 -1,0 0)'), 0.8));
--echo #####################################################################################
--echo # ST_SIMPLIFY(multilinestring)
--echo #####################################################################################
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10),(0 0,5 0,5 5))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10),(0 0,5 0,5 5))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 0,5 5),(0 0,5 0,5 5,0 5,0 0))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 0,5 5),(0 0,5 0,5 5,0 5,0 0))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5),'
'(0 0,1 0,1 1,2 1,2 2,3 2,3 3,4 3,4 4,5 4,4 4))'), 0.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5),'
'(0 0,1 0,1 1,2 1,2 2,3 2,3 3,4 3,4 4,5 4,4 4))'), 0.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,0 1,1 1,1 2,2 2,2 3,3 3,3 4,4 4,4 5,5 5),'
'(0 0,1 0,1 1,2 1,2 2,3 2,3 3,4 3,4 4,5 4,4 4))'), 0.7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,1 1,2 0,3 1,4 0,5 1,6 0),(6 0,5 -1,4 0,3 -1,2 0,1 -1,0 0))'), 0.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,1 1,2 0,3 1,4 0,5 1,6 0),(6 0,5 -1,4 0,3 -1,2 0,1 -1,0 0))'), 0.7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,1 1,2 0,3 1,4 0,5 1,6 0),(6 0,5 -1,4 0,3 -1,2 0,1 -1,0 0))'), 0.8));
--echo #####################################################################################
--echo # ST_SIMPLIFY(polygon)
--echo #####################################################################################
--echo # Invalid geometry in input.
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,4 4,6 -6,10 0,0 0,0 0,0 0))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,10 10,-10 10,0 0))'), 14));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,10 10,-10 10,0 0))'), 15));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,5 5,0 10,-5 5,0 0))'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,5 5,0 10,-5 5,0 0))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 12));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 17));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), 1.4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), 1.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), 7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), 7.1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((10 2,5 2,5 10,-5 10,-5 2,-10 2,-10 -2,-5 -2,-5 -10,5 -10,5 -2,10 -2,10 2))'), 3));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((10 2,5 2,5 10,-5 10,-5 2,-10 2,-10 -2,-5 -2,-5 -10,5 -10,5 -2,10 -2,10 2))'), 4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((10 2,5 2,5 10,-5 10,-5 2,-10 2,-10 -2,-5 -2,-5 -10,5 -10,5 -2,10 -2,10 2))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((10 2,5 2,5 10,-5 10,-5 2,-10 2,-10 -2,-5 -2,-5 -10,5 -10,5 -2,10 -2,10 2))'), 11));
--echo #####################################################################################
--echo # ST_SIMPLIFY(multipolygon)
--echo #####################################################################################
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))'), 3.6));
--echo # Invalid geometry in input.
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0)))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), 1.4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), 1.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), 7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0),(4 4,4 6,6 6,6 4,4 4)))'), 7.1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)),((4 4,4 6,6 6,6 4,4 4,4 4,4 4,4 4)))'), 1.4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)),((4 4,4 6,6 6,6 4,4 4,4 4,4 4,4 4)))'), 1.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)),((4 4,4 6,6 6,6 4,4 4,4 4,4 4,4 4)))'), 7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)),((4 4,4 6,6 6,6 4,4 4,4 4,4 4,4 4)))'), 7.1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((0 0,0 -5,-5 -5,-5 0,0 0)))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((0 0,0 -5,-5 -5,-5 0,0 0)))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))'), 14));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))'), 15));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,0 10,-5 5,0 0)),((0 0,-5 -5,0 -10,5 -5,0 0)))'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,0 10,-5 5,0 0)),((0 0,-5 -5,0 -10,5 -5,0 0)))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,4 6,0 10,-4 6,0 0)),((0 0,-6 4,-10 0,-6 -4,0 0)),'
'((0 0,-4 -6,0 -10,4 -6,0 0)),((0 0,6 -4,10 0,6 4,0 0)))'), 3));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,4 6,0 10,-4 6,0 0)),((0 0,-6 4,-10 0,-6 -4,0 0)),'
'((0 0,-4 -6,0 -10,4 -6,0 0)),((0 0,6 -4,10 0,6 4,0 0)))'), 4));
--echo #####################################################################################
--echo # ST_SIMPLIFY(geometrycollection)
--echo #####################################################################################
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(0 0,1 0,1 1,2 0,2 2))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,4 4,6 -6,10 0))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,0 4,4 4),(0 0,5 0,5 5,0 5,0 0)))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,0 5,5 5),(0 0,5 0,5 5,0 5,0 0)))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTILINESTRING((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0)))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)))'), 7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)))'), 8));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)),((0 0,0 -8,-8 -8,-8 0,0 0))))'), 7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)),((0 0,0 -8,-8 -8,-8 0,0 0))))'), 8));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION())'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), LINESTRING(0 0,5 0,5 5))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), LINESTRING(0 0,5 0,5 5))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)))'), 7));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0)))'), 8));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(0 0),'
'LINESTRING(0 0,0 5,5 5,5 0,0 0),'
'POLYGON((0 0,0 -5,-5 -5,-5 0,0 0)))'), 3.5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(0 0),'
'LINESTRING(0 0,0 5,5 5,5 0,0 0),'
'POLYGON((0 0,0 -5,-5 -5,-5 0,0 0)))'), 3.6));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'LINESTRING(0 0,5 5,0 10,-5 5,0 0),'
'POLYGON((0 0,-5 -5,0 -10,5 -5,0 0)))'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'LINESTRING(0 0,5 5,0 10,-5 5,0 0),'
'POLYGON((0 0,-5 -5,0 -10,5 -5,0 0)))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'MULTILINESTRING((0 0,5 5,0 10,-5 5,0 0),(0 0,-5 -5,0 -10,5 -5,0 0)),'
'MULTIPOLYGON(((0 0,5 -5,10 0,5 5,0 0)),((0 0,-5 5,-10 0,-5 -5,0 0))))'), 4.9));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'MULTILINESTRING((0 0,5 5,0 10,-5 5,0 0),(0 0,-5 -5,0 -10,5 -5,0 0)),'
'MULTIPOLYGON(((0 0,5 -5,10 0,5 5,0 0)),((0 0,-5 5,-10 0,-5 -5,0 0))))'), 5));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(10 10),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'LINESTRING(0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0))'), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(10 10),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'LINESTRING(0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0))'), 2));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(10 10),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'LINESTRING(0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0))'), 3));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(10 10),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'LINESTRING(0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0))'), 4));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(10 10),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'LINESTRING(0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0))'), 7));
--echo # Invalid geometry in input.
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(0 0),'
'LINESTRING(0 0,2.5 2.5,0 5,-2.5 7.5,0 10),'
'POLYGON((0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0)),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'MULTILINESTRING((0 0,1 1,-1 1,0 0),(0 0,2 2,-2 2,0 0),(0 0,3 3,-3 3,0 0),(0 0,4 4,-4 4,0 0)),'
'MULTIPOLYGON(((0 0,2.5 2.5,-2.5 2.5,0 0)),((0 0,-2.5 -2.5,2.5 -2.5,0 0))))'), 1));
--echo # Invalid geometry in input.
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(0 0),'
'LINESTRING(0 0,2.5 2.5,0 5,-2.5 7.5,0 10),'
'POLYGON((0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0)),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'MULTILINESTRING((0 0,1 1,-1 1,0 0),(0 0,2 2,-2 2,0 0),(0 0,3 3,-3 3,0 0),(0 0,4 4,-4 4,0 0)),'
'MULTIPOLYGON(((0 0,2.5 2.5,-2.5 2.5,0 0)),((0 0,-2.5 -2.5,2.5 -2.5,0 0))))'), 2));
--echo # Invalid geometry in input.
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(0 0),'
'LINESTRING(0 0,2.5 2.5,0 5,-2.5 7.5,0 10),'
'POLYGON((0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0)),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'MULTILINESTRING((0 0,1 1,-1 1,0 0),(0 0,2 2,-2 2,0 0),(0 0,3 3,-3 3,0 0),(0 0,4 4,-4 4,0 0)),'
'MULTIPOLYGON(((0 0,2.5 2.5,-2.5 2.5,0 0)),((0 0,-2.5 -2.5,2.5 -2.5,0 0))))'), 3));
--echo # Invalid geometry in input.
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
'POINT(0 0),'
'LINESTRING(0 0,2.5 2.5,0 5,-2.5 7.5,0 10),'
'POLYGON((0 0,5 0,0 -1,5 -1,0 -2,5 -2,0 -3,5 -3,0 -4,5 -4,0 0)),'
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
'MULTILINESTRING((0 0,1 1,-1 1,0 0),(0 0,2 2,-2 2,0 0),(0 0,3 3,-3 3,0 0),(0 0,4 4,-4 4,0 0)),'
'MULTIPOLYGON(((0 0,2.5 2.5,-2.5 2.5,0 0)),((0 0,-2.5 -2.5,2.5 -2.5,0 0))))'), 4));
--echo #####################################################################################
--echo # ST_ASTEXT(ST_SIMPLIFY(geometry) with different SRID values
--echo #####################################################################################
--error ER_DATA_OUT_OF_RANGE
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_center,-1024), 1));
--error ER_DATA_OUT_OF_RANGE
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_all_points,-1), 1));
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_top_to_center,0), 1));
--error ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_lines_near_vertical,4326), 1));
--error ER_DATA_OUT_OF_RANGE
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_of_elems,4294967296), 1));
--error ER_DATA_OUT_OF_RANGE
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_collection_elems,4294967295000), 1));
--echo #####################################################################################
--echo # Invalid function calls
--echo #####################################################################################
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT ST_ASTEXT(ST_SIMPLIFY());
--error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT
SELECT ST_ASTEXT(ST_SIMPLIFY(NULL));
SELECT ST_ASTEXT(ST_SIMPLIFY(NULL,1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT()'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING()'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON(())'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT()'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING(())'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(a 0)'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(! 0)'), 1));
--error ER_PARSE_ERROR
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT('!' 0)'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(12,34 0)'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,! 10)'), 1));
--error ER_PARSE_ERROR
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING('!' 0,10 10)'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,! 10,10 0,0 0))'), 1));
--error ER_PARSE_ERROR
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON(('!' 0,10 10,10 0,0 0))'), 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((12,34 0,10 10,10 0,0 0))'), 1));
--error ER_WRONG_ARGUMENTS
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0))'), 0));
--error ER_WRONG_ARGUMENTS
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0))'), -1));
--error ER_WRONG_ARGUMENTS
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0))'), -1024));
--error ER_WRONG_ARGUMENTS
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0))'), 'a'));
--error ER_BAD_FIELD_ERROR
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,0 0,0 0))'), a));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(0x000000000200000000000000000000000000000000, 1));
--error ER_SRS_NOT_FOUND
SELECT ST_ASTEXT(ST_SIMPLIFY(0x010100000001000000010100000000000000000000, 1));
--error ER_SRS_NOT_FOUND
SELECT ST_ASTEXT(ST_SIMPLIFY(0x010100000002000000000000000000000000000000, 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(0x000000000600000001000000000200000002000000, 1));
--error ER_GIS_INVALID_DATA
SELECT ST_ASTEXT(ST_SIMPLIFY(0x000000000200000001000000050000000000000000, 1));
--error ER_SRS_NOT_FOUND
SELECT ST_ASTEXT(ST_SIMPLIFY(0x010300000002000000010300000002000000050000, 1));
--error ER_SRS_NOT_FOUND
SELECT ST_ASTEXT(ST_SIMPLIFY(0x010400000002000000010100000000000000000000, 1));
--echo # Clean up
DROP TABLE gis_geometrycollection;
--echo #
--echo # WL#8579 Spatial Reference Systems
--echo #
--echo # SRID 0 (should pass)
DO ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(0 0)', 0), 1);
--echo # Projected SRS (should pass)
DO ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(0 0)', 2000), 1);
--echo # Geographic SRS (should fail)
--error ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
DO ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(0 0)', 4326), 1);
--echo #
--echo # WL#11096 Don't do Cartesian computations on geographic geometries
--echo #
--echo # Assume SRID 10 is not defined.
--error ER_SRS_NOT_FOUND
DO ST_SIMPLIFY(x'0A000000010100000000000000000000000000000000000000', 1);