MDEV-34141: Implements the function ST_Simplify
The GIS function ST_Simplify takes ad input a geometry and a double. It applies the Ramer-Douglas-Peucker algorithm on the geometry and returns the resulting geometry. The tests have been cherry-picked from the MySQL implementation of this function to grant compatibility among the two implementations. Co-authored-by: David Zhao <david.zhao@oracle.com> Co-authored-by: Pavan Naik <pavan.naik@oracle.com> Co-authored-by: Norvald H. Ryeng <norvald.ryeng@oracle.com> Co-authored-by: Erlend Dahl <erlend.dahl@oracle.com> Co-authored-by: Jon Hauglid <jon.hauglid@oracle.com> Co-authored-by: Hans H Melby <hans.h.melby@oracle.com> Co-authored-by: Tor Didriksen <tor.didriksen@oracle.com>
This commit is contained in:
parent
d232e4fd4f
commit
ba66f8f37b
613
mysql-test/main/spatial_utility_function_simplify.result
Normal file
613
mysql-test/main/spatial_utility_function_simplify.result
Normal file
@ -0,0 +1,613 @@
|
||||
# Creating the spatial Geometry object
|
||||
USE test;
|
||||
CREATE TABLE gis_geometrycollection (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY);
|
||||
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))';
|
||||
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));
|
||||
# Checking the integrity of the above create/insert statements
|
||||
# 17 rows.
|
||||
SELECT count(ST_ASTEXT(g) != 'NULL') FROM gis_geometrycollection;
|
||||
count(ST_ASTEXT(g) != 'NULL')
|
||||
17
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(point)
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(17 14)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(17 14)'), 1))
|
||||
POINT(17 14)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-8 2)'), 2));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-8 2)'), 2))
|
||||
POINT(-8 2)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(9 0)'), 3));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(9 0)'), 3))
|
||||
POINT(9 0)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(10 -8)'), 4));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(10 -8)'), 4))
|
||||
POINT(10 -8)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(20 -2)'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(20 -2)'), 5))
|
||||
POINT(20 -2)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(7 13)'), 10));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(7 13)'), 10))
|
||||
POINT(7 13)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-16 11)'), 1000));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-16 11)'), 1000))
|
||||
POINT(-16 11)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-5 -2)'), 2000000));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-5 -2)'), 2000000))
|
||||
POINT(-5 -2)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-10 6)'), 1234567890));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-10 6)'), 1234567890))
|
||||
POINT(-10 6)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-16 -8)'), 111111111111));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(-16 -8)'), 111111111111))
|
||||
POINT(-16 -8)
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(multipoint)
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(19 -4, -2 -6, -8 2)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(19 -4, -2 -6, -8 2)'), 1))
|
||||
MULTIPOINT(19 -4,-2 -6,-8 2)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-3 14, 19 8, 10 -8)'), 2));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-3 14, 19 8, 10 -8)'), 2))
|
||||
MULTIPOINT(-3 14,19 8,10 -8)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(1 -8, -1 12, -11 16)'), 3));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(1 -8, -1 12, -11 16)'), 3))
|
||||
MULTIPOINT(1 -8,-1 12,-11 16)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-16 11, -2 -7, -11 11)'), 4));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-16 11, -2 -7, -11 11)'), 4))
|
||||
MULTIPOINT(-16 11,-2 -7,-11 11)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(19 12, 0 9, 5 10, 20 -16, 7 -17, 9 -18, 19 -7)'), 10));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(19 12, 0 9, 5 10, 20 -16, 7 -17, 9 -18, 19 -7)'), 10))
|
||||
MULTIPOINT(19 12,0 9,5 10,20 -16,7 -17,9 -18,19 -7)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-1 11, -17 -11, -15 16, 6 -6, 11 -13, -4 -12, -13 -5)'), 1000));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-1 11, -17 -11, -15 16, 6 -6, 11 -13, -4 -12, -13 -5)'), 1000))
|
||||
MULTIPOINT(-1 11,-17 -11,-15 16,6 -6,11 -13,-4 -12,-13 -5)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(17 -11, -19 -6, 5 17, -14 13, 20 13, 20 2, 0 -12)'), 200000));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(17 -11, -19 -6, 5 17, -14 13, 20 13, 20 2, 0 -12)'), 200000))
|
||||
MULTIPOINT(17 -11,-19 -6,5 17,-14 13,20 13,20 2,0 -12)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-15 12, 17 -12, -7 14, 1 6, 19 -10, 11 -9, 0 -17)'), 9999999));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(-15 12, 17 -12, -7 14, 1 6, 19 -10, 11 -9, 0 -17)'), 9999999))
|
||||
MULTIPOINT(-15 12,17 -12,-7 14,1 6,19 -10,11 -9,0 -17)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(3 -13, 18 -2, -5 -13, -12 1, 20 0, -6 14, 5 -4)'), 1234567890));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT(3 -13, 18 -2, -5 -13, -12 1, 20 0, -6 14, 5 -4)'), 1234567890))
|
||||
MULTIPOINT(3 -13,18 -2,-5 -13,-12 1,20 0,-6 14,5 -4)
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(linestring)
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,10 10)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,10 10)'), 1))
|
||||
LINESTRING(0 0,10 10)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5)'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5)'), 3.5))
|
||||
LINESTRING(0 0,5 0,5 5)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5)'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5)'), 3.6))
|
||||
LINESTRING(0 0,5 5)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,4 4,6 -6,10 0)'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,4 4,6 -6,10 0)'), 5))
|
||||
LINESTRING(0 0,4 4,6 -6,10 0)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5,0 5,0 0)'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5,0 5,0 0)'), 3.5))
|
||||
LINESTRING(0 0,5 0,5 5,0 5,0 0)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5,0 5,0 0)'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 0,5 5,0 5,0 0)'), 3.6))
|
||||
LINESTRING(0 0,5 5,0 0)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,0 10,-5 5,0 0)'), 4.9));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,0 10,-5 5,0 0)'), 4.9))
|
||||
LINESTRING(0 0,5 5,0 10,-5 5,0 0)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,0 10,-5 5,0 0)'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,0 10,-5 5,0 0)'), 5))
|
||||
LINESTRING(0 0,0 10,0 0)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,3 -3,5 5,7 -7,9 9,10 10)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,1 1,3 -3,5 5,7 -7,9 9,10 10)'), 1))
|
||||
LINESTRING(0 0,1 1,3 -3,5 5,7 -7,10 10)
|
||||
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));
|
||||
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))
|
||||
LINESTRING(0 0,0 1,1 1,1 2,2 2,4 5,5 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.8));
|
||||
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))
|
||||
LINESTRING(0 0,5 5)
|
||||
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));
|
||||
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))
|
||||
LINESTRING(0 0,1 1,3 -1,5 1,7 -1,9 1,10 0)
|
||||
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));
|
||||
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))
|
||||
LINESTRING(0 0,10 0)
|
||||
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));
|
||||
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))
|
||||
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)
|
||||
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));
|
||||
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))
|
||||
LINESTRING(0 0,1 1,6 0,5 -1,0 0)
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(multilinestring)
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10))'), 1))
|
||||
MULTILINESTRING((0 0,10 10))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10),(0 0,5 0,5 5))'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10),(0 0,5 0,5 5))'), 3.5))
|
||||
MULTILINESTRING((0 0,10 10),(0 0,5 0,5 5))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10),(0 0,5 0,5 5))'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,10 10),(0 0,5 0,5 5))'), 3.6))
|
||||
MULTILINESTRING((0 0,10 10),(0 0,5 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.5));
|
||||
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))
|
||||
MULTILINESTRING((0 0,5 0,5 5),(0 0,5 0,5 5,0 5,0 0))
|
||||
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));
|
||||
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))
|
||||
MULTILINESTRING((0 0,5 5),(0 0,5 5,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))'), 4.9));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))'), 4.9))
|
||||
MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,5 5,0 10),(0 0,-5 5,0 10))'), 5))
|
||||
MULTILINESTRING((0 0,0 10),(0 0,0 10))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0))'), 1))
|
||||
MULTILINESTRING((0 0,1 1,3 -3,5 5,7 -7,10 10,0 0))
|
||||
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));
|
||||
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))
|
||||
MULTILINESTRING((0 0,0 1,1 1,1 2,2 2,4 5,5 5),(0 0,1 0,1 1,2 1,4 4,5 4,4 4))
|
||||
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));
|
||||
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))
|
||||
MULTILINESTRING((0 0,0 1,5 5),(0 0,1 0,1 1,5 4,4 4))
|
||||
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));
|
||||
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))
|
||||
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))
|
||||
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));
|
||||
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))
|
||||
MULTILINESTRING((0 0,1 1,6 0),(6 0,5 -1,0 0))
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(polygon)
|
||||
#####################################################################################
|
||||
# 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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,4 4,6 -6,10 0,0 0,0 0,0 0))'), 5))
|
||||
POLYGON((0 0,4 4,6 -6,10 0,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 3.5))
|
||||
POLYGON((0 0,0 5,5 5,5 0,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 3.6))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,10 10,-10 10,0 0))'), 14));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,10 10,-10 10,0 0))'), 14))
|
||||
POLYGON((0 0,10 10,-10 10,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,10 10,-10 10,0 0))'), 15));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,10 10,-10 10,0 0))'), 15))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,5 5,0 10,-5 5,0 0))'), 4.9));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,5 5,0 10,-5 5,0 0))'), 4.9))
|
||||
POLYGON((0 0,5 5,0 10,-5 5,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,5 5,0 10,-5 5,0 0))'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,5 5,0 10,-5 5,0 0))'), 5))
|
||||
NULL
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0))'), 1))
|
||||
POLYGON((0 0,1 1,3 -3,5 5,7 -7,10 10,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 4.9));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 4.9))
|
||||
POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 5))
|
||||
POLYGON((5 0,10 10,-10 10,-10 -10,10 -10,5 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 12));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 12))
|
||||
POLYGON((5 0,-10 10,-10 -10,5 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 17));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((5 0,10 10,-10 10,-5 0,-10 -10,10 -10,5 0))'), 17))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 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));
|
||||
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))
|
||||
POLYGON((0 0,0 10,10 10,10 0,0 0))
|
||||
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));
|
||||
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))
|
||||
POLYGON((0 0,0 10,10 10,10 0,0 0))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
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))
|
||||
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));
|
||||
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))
|
||||
POLYGON((10 2,5 2,5 10,-5 10,-10 -2,-5 -2,-5 -10,5 -10,10 2))
|
||||
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));
|
||||
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))
|
||||
POLYGON((10 2,-5 10,-10 -2,5 -10,10 2))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(multipolygon)
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))'), 3.5))
|
||||
MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)))'), 3.6))
|
||||
NULL
|
||||
# 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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,1 1,3 -3,5 5,7 -7,9 9,10 10,0 0)))'), 1))
|
||||
MULTIPOLYGON(((0 0,1 1,3 -3,5 5,7 -7,10 10,0 0)))
|
||||
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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))
|
||||
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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((4 4,4 6,6 6,6 4,4 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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))
|
||||
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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((0 0,0 -5,-5 -5,-5 0,0 0)))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))'), 14))
|
||||
MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))'), 15))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
MULTIPOLYGON(((0 0,5 5,0 10,-5 5,0 0)),((0 0,-5 -5,0 -10,5 -5,0 0)))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
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)))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
#####################################################################################
|
||||
# ST_SIMPLIFY(geometrycollection)
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))'), 1))
|
||||
GEOMETRYCOLLECTION(POINT(0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(0 0,1 0,1 1,2 0,2 2))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(0 0,1 0,1 1,2 0,2 2))'), 1))
|
||||
GEOMETRYCOLLECTION(MULTIPOINT(0 0,1 0,1 1,2 0,2 2))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))'), 3.5))
|
||||
GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,5 0,5 5,0 5,0 0))'), 3.6))
|
||||
GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,0 0))
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,4 4,6 -6,10 0))'), 5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(0 0,4 4,6 -6,10 0))'), 5))
|
||||
GEOMETRYCOLLECTION(LINESTRING(0 0,4 4,6 -6,10 0))
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(MULTILINESTRING((0 0,4 4),(0 0,5 0,5 5,0 5,0 0)))
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(MULTILINESTRING((0 0,5 5),(0 0,5 5,0 0)))
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(MULTILINESTRING((0 0,1 1,3 -3,5 5,7 -7,10 10,0 0)))
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0)))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0))))
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION()'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION())'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION())'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), LINESTRING(0 0,5 0,5 5))'), 3.5));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), LINESTRING(0 0,5 0,5 5))'), 3.5))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), LINESTRING(0 0,5 0,5 5))'), 3.6));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(), LINESTRING(0 0,5 0,5 5))'), 3.6))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
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))
|
||||
NULL
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(0 0),'
|
||||
'LINESTRING(0 0,0 5,5 5,5 0,0 0),'
|
||||
|
||||
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)))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(0 0),'
|
||||
'LINESTRING(0 0,0 5,5 5,5 0,0 0),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,5 5,0 0))
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(LINESTRING(0 0,5 5,0 10,-5 5,0 0),POLYGON((0 0,-5 -5,0 -10,5 -5,0 0)))
|
||||
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));
|
||||
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))
|
||||
GEOMETRYCOLLECTION(LINESTRING(0 0,0 10,0 0))
|
||||
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));
|
||||
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
|
||||
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))))
|
||||
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));
|
||||
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
|
||||
GEOMETRYCOLLECTION(MULTILINESTRING((0 0,0 10,0 0),(0 0,0 -10,0 0)))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(10 10),'
|
||||
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
|
||||
|
||||
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 -3,5 -3,0 -4,5 -4,0 0))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(10 10),'
|
||||
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
|
||||
|
||||
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 -3,0 -4,5 -4,0 0))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(10 10),'
|
||||
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),LINESTRING(0 0,5 0,0 -4,5 -4,0 0))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(10 10),'
|
||||
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),LINESTRING(0 0,5 -4,0 0))
|
||||
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));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('GEOMETRYCOLLECTION('
|
||||
'POINT(10 10),'
|
||||
'MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(10 10),MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),LINESTRING(0 0,0 0))
|
||||
# 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));
|
||||
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),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,2.5 2.5,-2.5 7.5,0 10),POLYGON((0 0,5 0,0 -1,5 -1,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))))
|
||||
# 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));
|
||||
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),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,2.5 2.5,-2.5 7.5,0 10),POLYGON((0 0,5 0,0 -1,5 -3,0 -4,5 -4,0 0)),MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),MULTILINESTRING((0 0,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))))
|
||||
# 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));
|
||||
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),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,0 10),POLYGON((0 0,5 0,0 -4,5 -4,0 0)),MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),MULTILINESTRING((0 0,0 0),(0 0,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))))
|
||||
# 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));
|
||||
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),'
|
||||
|
||||
GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,0 10),MULTIPOINT(0 0,1 1,2 2,3 3,4 4,5 5),MULTILINESTRING((0 0,0 0),(0 0,0 0),(0 0,3 3,-3 3,0 0),(0 0,4 4,-4 4,0 0)))
|
||||
#####################################################################################
|
||||
# ST_ASTEXT(ST_SIMPLIFY(geometry) with different SRID values
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_center,-1024), 1));
|
||||
ERROR HY000: st_simplify has not been implemented for geographic spatial reference systems.
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_all_points,-1), 1));
|
||||
ERROR HY000: st_simplify has not been implemented for geographic spatial reference systems.
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_top_to_center,0), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_top_to_center,0), 1))
|
||||
LINESTRING(15 25,15 10)
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_lines_near_vertical,4326), 1));
|
||||
ERROR HY000: st_simplify has not been implemented for geographic spatial reference systems.
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_collection_elems,4294967295000), 1));
|
||||
ERROR HY000: st_simplify has not been implemented for geographic spatial reference systems.
|
||||
#####################################################################################
|
||||
# Invalid function calls
|
||||
#####################################################################################
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY());
|
||||
ERROR 42000: Incorrect parameter count in the call to native function 'ST_SIMPLIFY'
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(NULL));
|
||||
ERROR 42000: Incorrect parameter count in the call to native function 'ST_SIMPLIFY'
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(NULL,1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(NULL,1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT()'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT()'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING()'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING()'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON(())'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON(())'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT()'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT()'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING(())'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING(())'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(a 0)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(a 0)'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(! 0)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(! 0)'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT('!' 0)'), 1));
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '!' 0)'), 1))' at line 1
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(12,34 0)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(12,34 0)'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,! 10)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(0 0,! 10)'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING('!' 0,10 10)'), 1));
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '!' 0,10 10)'), 1))' at line 1
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,! 10,10 0,0 0))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((0 0,! 10,10 0,0 0))'), 1))
|
||||
NULL
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON(('!' 0,10 10,10 0,0 0))'), 1));
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '!' 0,10 10,10 0,0 0))'), 1))' at line 1
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((12,34 0,10 10,10 0,0 0))'), 1));
|
||||
ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((12,34 0,10 10,10 0,0 0))'), 1))
|
||||
NULL
|
||||
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 HY000: Incorrect arguments to st_simplify
|
||||
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 HY000: Incorrect arguments to st_simplify
|
||||
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 HY000: Incorrect arguments to st_simplify
|
||||
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 HY000: Incorrect arguments to st_simplify
|
||||
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 42S22: Unknown column 'a' in 'field list'
|
||||
# Clean up
|
||||
DROP TABLE gis_geometrycollection;
|
503
mysql-test/main/spatial_utility_function_simplify.test
Normal file
503
mysql-test/main/spatial_utility_function_simplify.test
Normal file
@ -0,0 +1,503 @@
|
||||
# Copyright (c) 2015, Oracle and/or its affiliates
|
||||
# Copyright (c) 2024, MariaDB Corporation.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
|
||||
|
||||
############################################################################################
|
||||
# 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));
|
||||
|
||||
# TODO Bug #33739281 Some gis functions give different results with gcc11 in optimized mode on ARM
|
||||
# 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));
|
||||
|
||||
# TODO Bug #33739281 Some gis functions give different results with gcc11 in optimized mode on ARM
|
||||
# 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));
|
||||
|
||||
# TODO Bug #33739281 Some gis functions give different results with gcc11 in optimized mode on ARM
|
||||
# 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));
|
||||
|
||||
# TODO Bug #33739281 Some gis functions give different results with gcc11 in optimized mode on ARM
|
||||
# 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));
|
||||
|
||||
# TODO Bug #33739281 Some gis functions give different results with gcc11 in optimized mode on ARM
|
||||
# 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_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT(@star_center,-1024), 1));
|
||||
|
||||
--error ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
|
||||
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_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
|
||||
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));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT()'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING()'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON(())'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOINT()'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTILINESTRING(())'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('MULTIPOLYGON((()))'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(a 0)'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(! 0)'), 1));
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT('!' 0)'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POINT(12,34 0)'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(a 0,10 10)'), 1));
|
||||
|
||||
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));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('LINESTRING(12,34 0,10 10)'), 1));
|
||||
|
||||
SELECT ST_ASTEXT(ST_SIMPLIFY(ST_GEOMFROMTEXT('POLYGON((a 0,10 10,10 0,0 0))'), 1));
|
||||
|
||||
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));
|
||||
|
||||
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));
|
||||
|
||||
--echo # Clean up
|
||||
DROP TABLE gis_geometrycollection;
|
@ -2149,6 +2149,69 @@ longlong Item_func_issimple::val_int()
|
||||
}
|
||||
|
||||
|
||||
String *Item_func_simplify::val_str(String *str)
|
||||
{
|
||||
DBUG_ENTER("Item_func_simplify::val_str");
|
||||
String *res= args[0]->val_str(&tmp_value);
|
||||
double max_distance= (double) args[1]->val_real();
|
||||
Geometry_buffer buffer;
|
||||
Geometry *geometry;
|
||||
uint32 num_points;
|
||||
|
||||
null_value= 1;
|
||||
if ((null_value= (args[0]->null_value || args[1]->null_value)) ||
|
||||
!(geometry= Geometry::construct(&buffer, res->ptr(), res->length())))
|
||||
{
|
||||
null_value= 1;
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
if (max_distance <= 0)
|
||||
{
|
||||
my_error(ER_WRONG_ARGUMENTS, MYF(0), func_name());
|
||||
null_value= 1;
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
uint32 srid= uint4korr(res->ptr());
|
||||
if (srid != 0)
|
||||
{
|
||||
my_error(ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS, MYF(0), func_name());
|
||||
null_value= 1;
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
if (geometry->get_class_info()->m_type_id == Geometry::wkb_point ||
|
||||
geometry->get_class_info()->m_type_id == Geometry::wkb_multipoint)
|
||||
{
|
||||
str = res;
|
||||
DBUG_RETURN(str);
|
||||
}
|
||||
|
||||
if (geometry->get_class_info()->m_type_id == Geometry::wkb_linestring)
|
||||
{
|
||||
if (geometry->num_points(&num_points))
|
||||
{
|
||||
null_value= 1;
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
if (num_points < 3)
|
||||
{
|
||||
str = res;
|
||||
DBUG_RETURN(str);
|
||||
}
|
||||
}
|
||||
|
||||
if (geometry->simplify(str, max_distance))
|
||||
{
|
||||
null_value= 1;
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
DBUG_RETURN(str);
|
||||
}
|
||||
|
||||
|
||||
longlong Item_func_isclosed::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed());
|
||||
@ -4253,6 +4316,22 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
class Create_func_simplify : public Create_func_arg2
|
||||
{
|
||||
public:
|
||||
Item *create_2_arg(THD *thd, Item *arg1, Item *arg2) override
|
||||
{
|
||||
return new (thd->mem_root) Item_func_simplify(thd, arg1, arg2);
|
||||
}
|
||||
|
||||
static Create_func_simplify s_singleton;
|
||||
|
||||
protected:
|
||||
Create_func_simplify() = default;
|
||||
~Create_func_simplify() override = default;
|
||||
};
|
||||
|
||||
|
||||
class Create_func_numgeometries : public Create_func_arg1
|
||||
{
|
||||
public:
|
||||
@ -4525,6 +4604,7 @@ Create_func_isempty Create_func_isempty::s_singleton;
|
||||
Create_func_isvalid Create_func_isvalid::s_singleton;
|
||||
Create_func_isring Create_func_isring::s_singleton;
|
||||
Create_func_issimple Create_func_issimple::s_singleton;
|
||||
Create_func_simplify Create_func_simplify::s_singleton;
|
||||
Create_func_mbr_contains Create_func_mbr_contains::s_singleton;
|
||||
Create_func_mbr_coveredby Create_func_mbr_coveredby::s_singleton;
|
||||
Create_func_mbr_disjoint Create_func_mbr_disjoint::s_singleton;
|
||||
@ -4595,6 +4675,7 @@ static Native_func_registry func_array_geom[] =
|
||||
{ { STRING_WITH_LEN("ISVALID") }, GEOM_BUILDER(Create_func_isvalid)},
|
||||
{ { STRING_WITH_LEN("ISRING") }, GEOM_BUILDER(Create_func_isring)},
|
||||
{ { STRING_WITH_LEN("ISSIMPLE") }, GEOM_BUILDER(Create_func_issimple)},
|
||||
{ { STRING_WITH_LEN("SIMPLIFY") }, GEOM_BUILDER(Create_func_simplify)},
|
||||
{ { STRING_WITH_LEN("LINEFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { STRING_WITH_LEN("LINEFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { STRING_WITH_LEN("LINESTRINGFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
@ -4678,6 +4759,7 @@ static Native_func_registry func_array_geom[] =
|
||||
{ { STRING_WITH_LEN("ST_ISVALID") }, GEOM_BUILDER(Create_func_isvalid)},
|
||||
{ { STRING_WITH_LEN("ST_ISRING") }, GEOM_BUILDER(Create_func_isring)},
|
||||
{ { STRING_WITH_LEN("ST_ISSIMPLE") }, GEOM_BUILDER(Create_func_issimple)},
|
||||
{ { STRING_WITH_LEN("ST_SIMPLIFY") }, GEOM_BUILDER(Create_func_simplify)},
|
||||
{ { STRING_WITH_LEN("ST_LENGTH") }, GEOM_BUILDER(Create_func_glength)},
|
||||
{ { STRING_WITH_LEN("ST_LINEFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { STRING_WITH_LEN("ST_LINEFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
|
@ -975,6 +975,29 @@ public:
|
||||
{ return get_item_copy<Item_func_issimple>(thd, this); }
|
||||
};
|
||||
|
||||
class Item_func_simplify: public Item_geometry_func_args_geometry
|
||||
{
|
||||
String tmp_value;
|
||||
Gcalc_heap collector;
|
||||
Gcalc_function func;
|
||||
Gcalc_scan_iterator scan_it;
|
||||
public:
|
||||
Item_func_simplify(THD *thd, Item *a, Item *b)
|
||||
:Item_geometry_func_args_geometry(thd, a, b) {}
|
||||
LEX_CSTRING func_name_cstring() const override
|
||||
{
|
||||
static LEX_CSTRING name= {STRING_WITH_LEN("st_simplify") };
|
||||
return name;
|
||||
}
|
||||
String *val_str(String *) override;
|
||||
const Type_handler *type_handler() const override
|
||||
{
|
||||
return &type_handler_geometry;
|
||||
}
|
||||
Item *get_copy(THD *thd) override
|
||||
{ return get_item_copy<Item_func_simplify>(thd, this); }
|
||||
};
|
||||
|
||||
class Item_func_isclosed: public Item_long_func_args_geometry
|
||||
{
|
||||
public:
|
||||
|
@ -12303,3 +12303,5 @@ ER_TOO_MANY_OPEN_CURSORS
|
||||
eng "Too many open cursors; max %u cursors allowed"
|
||||
ER_INCOMPATIBLE_EVENT_FLAG
|
||||
eng "Event flag '%s' in the condition expression is not compatible with the trigger event type '%s'"
|
||||
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
|
||||
eng "%s has not been implemented for geographic spatial reference systems."
|
||||
|
333
sql/spatial.cc
333
sql/spatial.cc
@ -20,6 +20,7 @@
|
||||
#include "spatial.h"
|
||||
#include "gstream.h" // Gis_read_stream
|
||||
#include "sql_string.h" // String
|
||||
#include <vector>
|
||||
|
||||
/* This is from item_func.h. Didn't want to #include the whole file. */
|
||||
double my_double_round(double value, longlong dec, bool dec_unsigned,
|
||||
@ -155,6 +156,79 @@ int MBR::coveredby(const MBR *mbr)
|
||||
}
|
||||
|
||||
|
||||
/********************** Ramer–Douglas–Peucker algorithm **********************/
|
||||
|
||||
static double perpendicular_distance(const st_point_2d& point,
|
||||
const st_point_2d& line_start,
|
||||
const st_point_2d& line_end) {
|
||||
double difference_x= line_end.x - line_start.x;
|
||||
double difference_y= line_end.y - line_start.y;
|
||||
|
||||
double magnitude = sqrt((difference_x * difference_x) +
|
||||
(difference_y * difference_y));
|
||||
|
||||
if (magnitude > 0.0)
|
||||
{
|
||||
difference_x /= magnitude;
|
||||
difference_y /= magnitude;
|
||||
}
|
||||
|
||||
double point_vector_x= point.x - line_start.x;
|
||||
double point_vector_y= point.y - line_start.y;
|
||||
|
||||
double point_vector_dot_product= ((difference_x * point_vector_x) +
|
||||
(difference_y * point_vector_y));
|
||||
|
||||
double adjusted_x= point_vector_x - (point_vector_dot_product * difference_x);
|
||||
double adjusted_y= point_vector_y - (point_vector_dot_product * difference_y);
|
||||
|
||||
return sqrt((adjusted_x * adjusted_x) + (adjusted_y * adjusted_y));
|
||||
}
|
||||
|
||||
|
||||
static void recursive_RDP(const std::vector<st_point_2d>& points,
|
||||
const double max_distance,
|
||||
std::vector<st_point_2d>& out,
|
||||
const uint32 start, const uint32 end)
|
||||
{
|
||||
if (start >= end) return;
|
||||
|
||||
double greatest_distance= 0.0;
|
||||
uint32 index= start;
|
||||
|
||||
for (uint32 i = start + 1; i < end; ++i) {
|
||||
double dist = perpendicular_distance(points[i], points[start], points[end]);
|
||||
if (dist > greatest_distance) {
|
||||
index = i;
|
||||
greatest_distance = dist;
|
||||
}
|
||||
}
|
||||
|
||||
if (greatest_distance > max_distance)
|
||||
{
|
||||
recursive_RDP(points, max_distance, out, start, index);
|
||||
recursive_RDP(points, max_distance, out, index, end);
|
||||
} else if (start != 0)
|
||||
out.push_back(points[start]);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Implements the Ramer–Douglas–Peucker. Given the points that compose a line,
|
||||
finds a similar curve with fewer points. The simplified curve consists of a
|
||||
subset of the points that defined the original curve.
|
||||
https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
|
||||
*/
|
||||
static void simplify_RDP(std::vector<st_point_2d>& points,
|
||||
const double max_distance) {
|
||||
std::vector<st_point_2d> result;
|
||||
result.push_back(points.front());
|
||||
recursive_RDP(points, max_distance, result, 0,(uint32) points.size() - 1);
|
||||
result.push_back(points.back());
|
||||
points = std::move(result);
|
||||
}
|
||||
|
||||
|
||||
/***************************** Gis_class_info *******************************/
|
||||
|
||||
Geometry::Class_info *Geometry::ci_collection[Geometry::wkb_last+1]=
|
||||
@ -1545,6 +1619,53 @@ int Gis_line_string::is_valid(int *valid) const
|
||||
}
|
||||
|
||||
|
||||
int Gis_line_string::simplify(String *result, double max_distance) const {
|
||||
Geometry_buffer buffer;
|
||||
Geometry *geometry= NULL;
|
||||
std::vector<st_point_2d> points;
|
||||
double x, y;
|
||||
|
||||
uint32 n_points= 0;
|
||||
if(this->num_points(&n_points))
|
||||
return 1;
|
||||
|
||||
for (uint32 i = 1; i <= n_points; i++)
|
||||
{
|
||||
String wkb= 0;
|
||||
if (wkb.reserve(SRID_SIZE + WKB_HEADER_SIZE + POINT_DATA_SIZE))
|
||||
return 1;
|
||||
|
||||
wkb.q_append(SRID_PLACEHOLDER);
|
||||
this->point_n(i, &wkb);
|
||||
if (!(geometry= Geometry::construct(&buffer, wkb.ptr(), wkb.length())))
|
||||
return 1;
|
||||
if(((Gis_point *) geometry)->get_xy(&x, &y))
|
||||
return 1;
|
||||
|
||||
points.push_back(st_point_2d{x, y});
|
||||
}
|
||||
|
||||
simplify_RDP(points, max_distance);
|
||||
|
||||
result->length(0);
|
||||
result->reserve(SRID_SIZE + WKB_HEADER_SIZE +
|
||||
(POINT_DATA_SIZE * points.size()));
|
||||
|
||||
result->q_append(SRID_PLACEHOLDER);
|
||||
result->q_append((char) wkb_ndr);
|
||||
result->q_append((uint32) wkb_linestring);
|
||||
result->q_append((uint32) points.size());
|
||||
|
||||
for (auto point : points)
|
||||
{
|
||||
result->q_append((double) point.x);
|
||||
result->q_append((double) point.y);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int Gis_line_string::num_points(uint32 *n_points) const
|
||||
{
|
||||
*n_points= uint4korr(m_data);
|
||||
@ -2017,6 +2138,80 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Gis_polygon::simplify(String *result, double max_distance) const
|
||||
{
|
||||
uint32 num_interior_ring= 0, num_invalid_ring= 0, num_points;
|
||||
Geometry_buffer buffer;
|
||||
Geometry *geometry= NULL;
|
||||
String exterior_ring= 0;
|
||||
|
||||
exterior_ring.q_append(SRID_PLACEHOLDER);
|
||||
if (this->num_interior_ring(&num_interior_ring) ||
|
||||
this->exterior_ring(&exterior_ring) ||
|
||||
!(geometry= Geometry::construct(&buffer, exterior_ring.ptr(),
|
||||
exterior_ring.length())))
|
||||
return 1;
|
||||
|
||||
if (geometry->simplify(&exterior_ring, max_distance))
|
||||
return 1;
|
||||
|
||||
if (!(geometry= Geometry::construct(&buffer, exterior_ring.ptr(),
|
||||
exterior_ring.length())))
|
||||
return 1;
|
||||
|
||||
if (geometry->num_points(&num_points) || num_points <= 3)
|
||||
return 1;
|
||||
|
||||
result->length(0);
|
||||
result->reserve(SRID_SIZE + WKB_HEADER_SIZE);
|
||||
result->q_append(SRID_PLACEHOLDER);
|
||||
result->q_append((char) wkb_ndr);
|
||||
result->q_append((uint32) wkb_polygon);
|
||||
result->q_append((uint32) 1 + num_interior_ring);
|
||||
result->append(exterior_ring.ptr() + SRID_SIZE + WKB_HEADER_SIZE,
|
||||
(exterior_ring.length() - SRID_SIZE -
|
||||
WKB_HEADER_SIZE));
|
||||
|
||||
for (uint32 i = 1; i <= num_interior_ring; i++)
|
||||
{
|
||||
String interior_ring= 0;
|
||||
interior_ring.q_append((uint) 0);
|
||||
if (this->interior_ring_n(i, &interior_ring) ||
|
||||
!(geometry= Geometry::construct(&buffer, interior_ring.ptr(),
|
||||
interior_ring.length())))
|
||||
{
|
||||
num_invalid_ring++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(geometry->simplify(&interior_ring, max_distance))
|
||||
return 1;
|
||||
|
||||
if (!(geometry= Geometry::construct(&buffer, interior_ring.ptr(),
|
||||
interior_ring.length())))
|
||||
{
|
||||
num_invalid_ring++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (geometry->num_points(&num_points))
|
||||
return 1;
|
||||
|
||||
if (num_points <= 3)
|
||||
{
|
||||
num_invalid_ring++;
|
||||
continue;
|
||||
}
|
||||
|
||||
result->append(interior_ring.ptr() + SRID_SIZE + WKB_HEADER_SIZE,
|
||||
(interior_ring.length() - SRID_SIZE - WKB_HEADER_SIZE));
|
||||
}
|
||||
|
||||
result->write_at_position(SRID_SIZE + WKB_HEADER_SIZE,
|
||||
((uint32) 1 + num_interior_ring -
|
||||
num_invalid_ring));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Gis_polygon::exterior_ring(String *result) const
|
||||
{
|
||||
@ -2034,7 +2229,7 @@ int Gis_polygon::exterior_ring(String *result) const
|
||||
result->q_append((char) wkb_ndr);
|
||||
result->q_append((uint32) wkb_linestring);
|
||||
result->q_append(n_points);
|
||||
result->q_append(data, n_points * POINT_DATA_SIZE);
|
||||
result->q_append(data, n_points * POINT_DATA_SIZE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2635,18 +2830,19 @@ bool Gis_multi_line_string::init_from_wkt(Gis_read_stream *trs, String *wkb)
|
||||
if (wkb->reserve(4, 512))
|
||||
return 1;
|
||||
wkb->length(wkb->length()+4); // Reserve space for points
|
||||
|
||||
|
||||
for (;;)
|
||||
{
|
||||
Gis_line_string ls;
|
||||
|
||||
if (wkb->reserve(1 + 4, 512))
|
||||
return 1;
|
||||
wkb->q_append((char) wkb_ndr); wkb->q_append((uint32) wkb_linestring);
|
||||
wkb->q_append((char) wkb_ndr);
|
||||
wkb->q_append((uint32) wkb_linestring);
|
||||
|
||||
if (trs->check_next_symbol('(') ||
|
||||
ls.init_from_wkt(trs, wkb) ||
|
||||
trs->check_next_symbol(')'))
|
||||
ls.init_from_wkt(trs, wkb) ||
|
||||
trs->check_next_symbol(')'))
|
||||
return 1;
|
||||
n_line_strings++;
|
||||
if (trs->skip_char(',')) // Didn't find ','
|
||||
@ -2720,7 +2916,7 @@ uint Gis_multi_line_string::init_from_wkb(const char *wkb, uint len,
|
||||
if (!(ls_len= ls.init_from_wkb(wkb + WKB_HEADER_SIZE, len,
|
||||
(wkbByteOrder) wkb[0], res)))
|
||||
return 0;
|
||||
ls_len+= WKB_HEADER_SIZE;;
|
||||
ls_len+= WKB_HEADER_SIZE;
|
||||
wkb+= ls_len;
|
||||
len-= ls_len;
|
||||
}
|
||||
@ -2993,6 +3189,37 @@ int Gis_multi_line_string::is_closed(int *closed) const
|
||||
}
|
||||
|
||||
|
||||
int Gis_multi_line_string::simplify(String *result, double max_distance) const
|
||||
{
|
||||
uint32 num_lines= 0;
|
||||
Geometry_buffer buffer;
|
||||
Geometry *geometry= NULL;
|
||||
|
||||
if (this->num_geometries(&num_lines))
|
||||
return 1;
|
||||
|
||||
result->length(0);
|
||||
result->reserve(SRID_SIZE + WKB_HEADER_SIZE);
|
||||
result->q_append(SRID_PLACEHOLDER);
|
||||
result->q_append((char) wkb_ndr);
|
||||
result->q_append((uint32) wkb_multilinestring);
|
||||
result->q_append((uint32) num_lines);
|
||||
|
||||
for (uint32 i = 1; i <= num_lines; i++)
|
||||
{
|
||||
String wkb= 0;
|
||||
wkb.q_append((uint) 0);
|
||||
this->geometry_n(i, &wkb);
|
||||
if (!(geometry= Geometry::construct(&buffer, wkb.ptr(), wkb.length())))
|
||||
return 1;
|
||||
geometry->simplify(&wkb, max_distance);
|
||||
result->append(wkb.ptr() + SRID_SIZE, wkb.length() - SRID_SIZE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int Gis_multi_line_string::store_shapes(Gcalc_shape_transporter *trn) const
|
||||
{
|
||||
uint32 n_lines;
|
||||
@ -3446,6 +3673,48 @@ int Gis_multi_polygon::area(double *ar, const char **end_of_data) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Gis_multi_polygon::simplify(String *result, double max_distance) const
|
||||
{
|
||||
uint32 num_polygon= 0, num_invalid_polygon= 0;
|
||||
Geometry_buffer buffer;
|
||||
Geometry *geometry= NULL;
|
||||
|
||||
if (this->num_geometries(&num_polygon))
|
||||
return 1;
|
||||
|
||||
result->length(0);
|
||||
result->reserve(SRID_SIZE + WKB_HEADER_SIZE);
|
||||
result->q_append(SRID_PLACEHOLDER);
|
||||
result->q_append((char) wkb_ndr);
|
||||
result->q_append((uint32) wkb_multipolygon);
|
||||
result->q_append((uint32) num_polygon);
|
||||
|
||||
for (uint32 i = 1; i <= num_polygon; i++)
|
||||
{
|
||||
String polygon= 0, simplified_polygon= 0;
|
||||
polygon.q_append((uint) 0);
|
||||
if (this->geometry_n(i, &polygon) ||
|
||||
!(geometry= Geometry::construct(&buffer, polygon.ptr(),
|
||||
polygon.length())))
|
||||
return 1;
|
||||
|
||||
if(geometry->simplify(&simplified_polygon, max_distance))
|
||||
{
|
||||
num_invalid_polygon++;
|
||||
continue;
|
||||
}
|
||||
|
||||
result->append(simplified_polygon.ptr() + SRID_SIZE,
|
||||
simplified_polygon.length() - SRID_SIZE);
|
||||
}
|
||||
|
||||
if (num_polygon == num_invalid_polygon)
|
||||
return 1;
|
||||
|
||||
result->write_at_position(SRID_SIZE + WKB_HEADER_SIZE,
|
||||
((uint32) num_polygon - num_invalid_polygon));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Gis_multi_polygon::centroid(String *result) const
|
||||
{
|
||||
@ -3924,6 +4193,58 @@ exit:
|
||||
}
|
||||
|
||||
|
||||
int Gis_geometry_collection::simplify(String *result,
|
||||
double max_distance) const
|
||||
{
|
||||
uint32 num_geometries= 0, num_invalid_geometries= 0;
|
||||
Geometry_buffer buffer;
|
||||
Geometry *geometry= NULL;
|
||||
|
||||
if (this->num_geometries(&num_geometries))
|
||||
return 1;
|
||||
|
||||
result->length(0);
|
||||
result->reserve(SRID_SIZE + BYTE_ORDER_SIZE + WKB_HEADER_SIZE);
|
||||
result->q_append(SRID_PLACEHOLDER);
|
||||
result->q_append((char) wkb_ndr);
|
||||
result->q_append((uint32) wkb_geometrycollection);
|
||||
result->q_append((uint32) num_geometries);
|
||||
|
||||
for (uint32 i = 1; i <= num_geometries; i++)
|
||||
{
|
||||
String wkb= 0, simplified_wkb= 0;
|
||||
|
||||
wkb.q_append((uint) 0);
|
||||
if (this->geometry_n(i, &wkb) ||
|
||||
!(geometry= Geometry::construct(&buffer, wkb.ptr(), wkb.length())))
|
||||
return 1;
|
||||
|
||||
if (geometry->get_class_info()->m_type_id == Geometry::wkb_point ||
|
||||
geometry->get_class_info()->m_type_id == Geometry::wkb_multipoint)
|
||||
{
|
||||
result->append(wkb.ptr() + SRID_SIZE, wkb.length() - SRID_SIZE);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(geometry->simplify(&simplified_wkb, max_distance))
|
||||
{
|
||||
num_invalid_geometries++;
|
||||
continue;
|
||||
}
|
||||
|
||||
result->append(simplified_wkb.ptr() + SRID_SIZE,
|
||||
simplified_wkb.length() - SRID_SIZE);
|
||||
}
|
||||
|
||||
if (num_geometries == num_invalid_geometries)
|
||||
return 1;
|
||||
|
||||
result->write_at_position(SRID_SIZE + WKB_HEADER_SIZE,
|
||||
(uint32) num_geometries - num_invalid_geometries);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int Gis_geometry_collection::geom_length(double *len, const char **end) const
|
||||
{
|
||||
uint32 n_objects;
|
||||
|
@ -32,7 +32,7 @@ const uint32 SRID_PLACEHOLDER= 0;
|
||||
const uint SIZEOF_STORED_DOUBLE= 8;
|
||||
const uint BYTE_ORDER_SIZE= 1;
|
||||
const uint POINT_DATA_SIZE= (SIZEOF_STORED_DOUBLE * 2);
|
||||
const uint WKB_HEADER_SIZE= 1+4;
|
||||
const uint WKB_HEADER_SIZE= BYTE_ORDER_SIZE + 4;
|
||||
const uint32 GET_SIZE_ERROR= ((uint32) -1);
|
||||
|
||||
struct st_point_2d
|
||||
@ -293,6 +293,7 @@ public:
|
||||
virtual int area(double *ar, const char **end) const { return -1;}
|
||||
virtual int is_closed(int *closed) const { return -1; }
|
||||
virtual int is_valid(int *valid) const { return -1; }
|
||||
virtual int simplify(String* result, double max_distance) const { return -1; }
|
||||
virtual int num_interior_ring(uint32 *n_int_rings) const { return -1; }
|
||||
virtual int num_points(uint32 *n_points) const { return -1; }
|
||||
virtual int num_geometries(uint32 *num) const { return -1; }
|
||||
@ -396,7 +397,7 @@ protected:
|
||||
|
||||
|
||||
/***************************** Point *******************************/
|
||||
|
||||
|
||||
class Gis_point: public Geometry
|
||||
{
|
||||
public:
|
||||
@ -411,6 +412,7 @@ public:
|
||||
const char **end) const override;
|
||||
bool get_mbr(MBR *mbr, const char **end) const override;
|
||||
int is_valid(int *valid) const override;
|
||||
|
||||
int get_xy(double *x, double *y) const
|
||||
{
|
||||
const char *data= m_data;
|
||||
@ -483,6 +485,7 @@ public:
|
||||
int geom_length(double *len, const char **end) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int is_closed(int *closed) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int num_points(uint32 *n_points) const override;
|
||||
int is_valid(int *valid) const override;
|
||||
int start_point(String *point) const override;
|
||||
@ -517,6 +520,7 @@ public:
|
||||
bool get_mbr(MBR *mbr, const char **end) const override;
|
||||
int is_valid(int *valid) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int exterior_ring(String *result) const override;
|
||||
int num_interior_ring(uint32 *n_int_rings) const override;
|
||||
int interior_ring_n(uint32 num, String *result) const override;
|
||||
@ -590,6 +594,7 @@ public:
|
||||
int geometry_n(uint32 num, String *result) const override;
|
||||
int geom_length(double *len, const char **end) const override;
|
||||
int is_closed(int *closed) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
bool dimension(uint32 *dim, const char **end) const override
|
||||
{
|
||||
*dim= 1;
|
||||
@ -620,6 +625,7 @@ public:
|
||||
int num_geometries(uint32 *num) const override;
|
||||
int geometry_n(uint32 num, String *result) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int centroid(String *result) const override;
|
||||
bool dimension(uint32 *dim, const char **end) const override
|
||||
{
|
||||
@ -651,6 +657,7 @@ public:
|
||||
int is_valid(int *valid) const override;
|
||||
bool get_mbr(MBR *mbr, const char **end) const override;
|
||||
int area(double *ar, const char **end) const override;
|
||||
int simplify(String* result, double max_distance) const override;
|
||||
int geom_length(double *len, const char **end) const override;
|
||||
int num_geometries(uint32 *num) const override;
|
||||
int geometry_n(uint32 num, String *result) const override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user