############################################################################### # # # This test is aimed to focus on the properties and attributes of the # # following Geometry classes. # # # # 1. Point # # 2. LineString # # 3. Polygon # # 4. MultiPoint # # 5. MultiLineString # # 6. MultiPolygon # # 7. GeometryCollection # # # # Creation Date: 2015-01-13 # # Author : Pavan Naik # # # ############################################################################### ############################################################################################ # Creating the spatial objects # ############################################################################################ --echo # Creating the spatial objects USE test; CREATE TABLE gis_point (fid INTEGER NOT NULL PRIMARY KEY, g POINT); CREATE TABLE gis_linestring (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING); CREATE TABLE gis_polygon (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON); CREATE TABLE gis_multi_point (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT); CREATE TABLE gis_multi_linestring (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING); CREATE TABLE gis_multi_polygon (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON); CREATE TABLE gis_geometrycollection (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION); ############################################################################################ # Inserting POINT Geometry values # ############################################################################################ --echo # Inserting POINT Geometry Values INSERT INTO gis_point VALUES (101, ST_POINTFROMTEXT('POINT(0 0)')), (102, ST_POINTFROMTEXT('POINT(1 0)')), (103, ST_POINTFROMTEXT('POINT(0 1)')), (104, ST_POINTFROMTEXT('POINT(1 1)')), (105, ST_POINTFROMTEXT('POINT(-1 1)')); INSERT INTO gis_point VALUES (106, ST_POINTFROMWKB(ST_ASWKB(POINT(0,0)))), (107, ST_POINTFROMWKB(ST_ASWKB(POINT(10,0)))), (108, ST_POINTFROMWKB(ST_ASWKB(POINT(0,10)))), (109, ST_POINTFROMWKB(ST_ASWKB(POINT(-10,0)))), (110, ST_POINTFROMWKB(ST_ASWKB(POINT(0,-10)))); INSERT INTO gis_point VALUES (111, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1 1)')))), (112, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 1e308)')))), (113, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 -1e308)')))), (114, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(-1e308 1e308)')))), (115, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(-1e308 -1e308)')))); --echo # Displaying the inserted POINT Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_point; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_point; SELECT COUNT(ST_ASTEXT(g)) FROM gis_point; SELECT COUNT(DISTINCT(g)) FROM gis_point; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_point; ############################################################################################ # Inserting LINESTRING Geometry values # ############################################################################################ --echo # Inserting LINESTRING Geometry Values INSERT INTO gis_linestring VALUES (201, ST_LINEFROMTEXT('LINESTRING(0 0,5 5)')), (202, ST_LINEFROMTEXT('LINESTRING(0 0,2 2,4 4)')), (203, ST_LINEFROMTEXT('LINESTRING(0 0,5 5,10 10)')); INSERT INTO gis_linestring VALUES (204, ST_LINESTRINGFROMTEXT('LINESTRING(10 10,5 5)')), (205, ST_LINESTRINGFROMTEXT('LINESTRING(0 0,12 12,24 24)')), (206, ST_LINESTRINGFROMTEXT('LINESTRING(0 0,50 50,100 100)')); INSERT INTO gis_linestring VALUES (207, ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5))))), (208, ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,10))))), (209, ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8))))); INSERT INTO gis_linestring VALUES (210, ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5))))), (211, ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(-50,-50), POINT(10,-10))))), (212, ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(1e308,1e308), POINT(1e308,-1e308))))); INSERT INTO gis_linestring VALUES (213, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1e308 1e308,1e308 -1e308)')))), (214, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)')))), (215, ST_LINESTRINGFROMWKB(ST_ASWKB(ST_LINESTRINGFROMTEXT('LINESTRING(10 10,10 -10,-10 -10,-10 10,10 10)')))); --echo # Displaying the inserted LINESTRING Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_linestring; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_linestring; SELECT COUNT(ST_ASTEXT(g)) FROM gis_linestring; SELECT COUNT(DISTINCT(g)) FROM gis_linestring; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_linestring; ############################################################################################ # Inserting POLYGON Geometry values # ############################################################################################ --echo # Inserting POLYGON Geometry Values INSERT INTO gis_polygon VALUES (301, ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5, 0 0))')), (302, ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))')), (303, ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))')); INSERT INTO gis_polygon VALUES (304, ST_POLYGONFROMTEXT('POLYGON((0 0,0 50,50 50,50 0,0 0))')), (305, ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))')), (306, ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))')); INSERT INTO gis_polygon VALUES (307, ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0)))))), (308, ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)))))), (309, ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))); INSERT INTO gis_polygon VALUES (310, ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0)))))), (311, ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,15), POINT(15,15), POINT(15,10), POINT(10,10)))))), (312, ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,20), POINT(20,20), POINT(20,10), POINT(10,10)), LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))))); INSERT INTO gis_polygon VALUES (313, ST_POLYFROMWKB(ST_ASWKB(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,5 5,0 0))')))), (314, ST_POLYFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((10 0,10 10,0 10,-10 10,-10 0,-10 -10,0 10,10 -10,10 0))')))), (315, ST_POLYGONFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))')))); --echo # Displaying the inserted POLYGON Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_polygon; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_polygon; SELECT COUNT(ST_ASTEXT(g)) FROM gis_polygon; SELECT COUNT(DISTINCT(g)) FROM gis_polygon; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_polygon; ############################################################################################ # Inserting MULTIPOINT Geometry values # ############################################################################################ --echo # Inserting MULTIPOINT Geometry Values INSERT INTO gis_multi_point VALUES (401, ST_MPOINTFROMTEXT('MULTIPOINT(0 0)')), (402, ST_MPOINTFROMTEXT('MULTIPOINT(0 0,2 2,4 4)')), (403, ST_MPOINTFROMTEXT('MULTIPOINT(0 0,5 5,10 10)')); INSERT INTO gis_multi_point VALUES (404, ST_MULTIPOINTFROMTEXT('MULTIPOINT(0 0,100 100)')), (405, ST_MULTIPOINTFROMTEXT('MULTIPOINT(0 0,1e308 1e308)')), (406, ST_MULTIPOINTFROMTEXT('MULTIPOINT(1e308 1e308,1e308 -1e308,-1e308 1e308,-1e308 -1e308)')); INSERT INTO gis_multi_point VALUES (407, ST_MPOINTFROMWKB(ST_ASWKB(MULTIPOINT(POINT(0,0))))), (408, ST_MPOINTFROMWKB(ST_ASWKB(MULTIPOINT(POINT(0,0), POINT(10,10))))), (409, ST_MPOINTFROMWKB(ST_ASWKB(MULTIPOINT(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6))))); INSERT INTO gis_multi_point VALUES (410, ST_MULTIPOINTFROMWKB(ST_ASWKB(MULTIPOINT(POINT(0,0))))), (411, ST_MULTIPOINTFROMWKB(ST_ASWKB(MULTIPOINT(POINT(0,0), POINT(1e308,1e308))))), (412, ST_MULTIPOINTFROMWKB(ST_ASWKB(MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308), POINT(-1e308,-1e308))))); INSERT INTO gis_multi_point VALUES (413, ST_MPOINTFROMWKB(ST_ASWKB(ST_MPOINTFROMTEXT('MULTIPOINT(0 0)')))), (414, ST_MPOINTFROMWKB(ST_ASWKB(ST_MPOINTFROMTEXT('MULTIPOINT(0 0,1e308 1e308,-1e308 -1e308)')))), (415, ST_MPOINTFROMWKB(ST_ASWKB(ST_MPOINTFROMTEXT('MULTIPOINT(1e308 1e308,1e308 -1e308,-1e308 1e308,-1e308 -1e308,1e308 1e308)')))); --echo # Displaying the inserted MULTIPOINT Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_multi_point; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_multi_point; SELECT COUNT(ST_ASTEXT(g)) FROM gis_multi_point; SELECT COUNT(DISTINCT(g)) FROM gis_multi_point; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_multi_point; ############################################################################################ # Inserting MULTILINESTRING Geometry values # ############################################################################################ --echo # Inserting MULTILINESTRING Geometry Values INSERT INTO gis_multi_linestring VALUES (501, ST_MLINEFROMTEXT('MULTILINESTRING((0 0,2 2))')), (502, ST_MLINEFROMTEXT('MULTILINESTRING((0 0,2 2,4 4))')), (503, ST_MLINEFROMTEXT('MULTILINESTRING((0 0,2 2,4 4),(6 6,8 8,10 10))')); INSERT INTO gis_multi_linestring VALUES (504, ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,100 100,-100 -100))')), (505, ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((1e308 1e308,-1e308 -1e308))')), (506, ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((1e308 1e308,-1e308 -1e308),(1e308 -1e308,-1e308 1e308))')); INSERT INTO gis_multi_linestring VALUES (507, ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2)))))), (508, ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24)))))), (509, ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4)), LINESTRING(POINT(6,6), POINT(8,8), POINT(10,10)))))); INSERT INTO gis_multi_linestring VALUES (510, ST_MULTILINESTRINGFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4)))))), (511, ST_MULTILINESTRINGFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1,1), POINT(2,2)))))), (512, ST_MULTILINESTRINGFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24)), LINESTRING(POINT(36,36), POINT(48,48), POINT(50,50)))))); INSERT INTO gis_multi_linestring VALUES (513, ST_MLINEFROMWKB(ST_ASWKB(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,10 10),(0 10,10 0))')))), (514, ST_MLINEFROMWKB(ST_ASWKB(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,10 10,-10 10,0 0),(0 0,-10 -10,10 -10,0 0))')))), (515, ST_MULTILINESTRINGFROMWKB(ST_ASWKB(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,0 100),(0 0,100 0),(0 0,0 -100),(0 0,-100 0))')))); --echo # Displaying the inserted MULTILINESTRING Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_multi_linestring; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_multi_linestring; SELECT COUNT(ST_ASTEXT(g)) FROM gis_multi_linestring; SELECT COUNT(DISTINCT(g)) FROM gis_multi_linestring; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_multi_linestring; ############################################################################################ # Inserting MULTIPOLYGON Geometry values # ############################################################################################ --echo # Inserting MULTIPOLGYON Geometry Values INSERT INTO gis_multi_polygon VALUES (601, ST_MPOLYFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)))')), (602, ST_MPOLYFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,0 0)),((5 5,5 10,10 10,5 5)))')), (603, ST_MPOLYFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4)))')); INSERT INTO gis_multi_polygon VALUES (604, ST_MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5, 0 0)))')), (605, ST_MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4, 4 4)),((0 0,0 -2,-2 -2, 0 0)))')), (606, ST_MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,5 5,-5 5,0 0)),((0 0,-5 -5,5 -5,0 0)))')); INSERT INTO gis_multi_polygon VALUES (607, ST_MPOLYFROMWKB(ST_ASWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0))))))), (608, ST_MPOLYFROMWKB(ST_ASWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))))), (609, ST_MPOLYFROMWKB(ST_ASWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0))), POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))))); INSERT INTO gis_multi_polygon VALUES (610, ST_MULTIPOLYGONFROMWKB(ST_ASWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))))), (611, ST_MULTIPOLYGONFROMWKB(ST_ASWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(10,10), POINT(20,10), POINT(20,20), POINT(10,20), POINT(10,10)), LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14))))))), (612, ST_MULTIPOLYGONFROMWKB(ST_ASWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))))); INSERT INTO gis_multi_polygon VALUES (613, ST_MPOLYFROMWKB(ST_ASWKB(ST_MPOLYFROMTEXT('MULTIPOLYGON(((0 0,5 5,5 -5,0 0)),((0 0,-5 5,-5 -5,0 0)))')))), (614, ST_MPOLYFROMWKB(ST_ASWKB(ST_MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))')))), (615, ST_MULTIPOLYGONFROMWKB(ST_ASWKB(ST_MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,5 5,10 0,5 -5,0 0)))')))); --echo # Displaying the inserted MULTIPOLYGON Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_multi_polygon; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_multi_polygon; SELECT COUNT(ST_ASTEXT(g)) FROM gis_multi_polygon; SELECT COUNT(DISTINCT(g)) FROM gis_multi_polygon; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_multi_polygon; ############################################################################################ # Inserting GEOMETRYCOLLECTION Geometry values # ############################################################################################ --echo # Inserting GEOMETRYCOLLECTION Geometry Values INSERT INTO gis_geometrycollection VALUES (701, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))')), (702, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), (703, ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(5 5), POLYGON((0 0,0 10,10 10,10 0,0 0)))')); INSERT INTO gis_geometrycollection VALUES (704, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), (705, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0),' 'LINESTRING(0 0,10 10),' 'POLYGON((0 0,0 10,10 10,10 0, 0 0)))')), (706, ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(MULTIPOINT(0 0,5 5,10 10),' 'MULTILINESTRING((0 0,10 10),(0 10,10 0)),' 'MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),' '((0 0,-10 0,-10 -10,0 -10,0 0))))')); INSERT INTO gis_geometrycollection VALUES (707, ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0))))), (708, ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)), POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))))), (709, ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(MULTIPOINT(POINT(0,0), POINT(5,5), POINT(10,10)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)), LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))))); INSERT INTO gis_geometrycollection VALUES (710, ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(0,0), POINT(100,100)))))), (711, ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(10,10), LINESTRING(POINT(10,10), POINT(12,12), POINT(14,14), POINT(16,16), POINT(18,18)), POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))))), (712, ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(MULTIPOINT(POINT(10,10), POINT(15,15), POINT(20,20)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)), LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))))); INSERT INTO gis_geometrycollection VALUES (713, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,10 10),' 'POLYGON((0 0,0 10,10 10,10 0, 0 0)),' 'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),' 'MULTILINESTRING((0 0,10 10),(0 10,10 0)),' 'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))')))), (714, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION(' 'POINT(0 0)),' 'GEOMETRYCOLLECTION(' 'LINESTRING(0 0,10 10)),' 'GEOMETRYCOLLECTION(' 'POLYGON((0 0,0 10,10 10,10 0, 0 0))),' 'GEOMETRYCOLLECTION(' 'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10)),' 'GEOMETRYCOLLECTION(' 'MULTILINESTRING((0 0,10 10),(0 10,10 0))),' 'GEOMETRYCOLLECTION(' 'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5)))))')))), (715, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION(),' 'POINT(0 0),' 'GEOMETRYCOLLECTION(' 'LINESTRING(0 0,10 10),' 'GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION())),' 'GEOMETRYCOLLECTION(),' 'GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION()),' 'POLYGON((0 0,0 10,10 10,10 0, 0 0)),' 'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),' 'MULTILINESTRING((0 0,10 10),(0 10,10 0)),' 'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))')))); --echo # Displaying the inserted GEOMETRYCOLLECTION Geometry Data SELECT fid, ST_ASTEXT(g) FROM gis_geometrycollection; --echo # Checking the integrity of the above insert statements SELECT COUNT(g) FROM gis_geometrycollection; SELECT COUNT(ST_ASTEXT(g)) FROM gis_geometrycollection; SELECT COUNT(DISTINCT(g)) FROM gis_geometrycollection; SELECT COUNT(DISTINCT(ST_ASTEXT(g))) FROM gis_geometrycollection; ############################################################################################ # POINT geometry property functions # ############################################################################################ --echo #==================================================================================== --echo # ST_X(point) --echo #==================================================================================== SELECT ST_X(ST_POINTFROMTEXT('POINT(0 0)')); SELECT ST_X(ST_POINTFROMTEXT('POINT(10 10)')); SELECT ST_X(ST_POINTFROMTEXT('POINT(1e308 1e308)')); SELECT ST_X(ST_POINTFROMWKB(ST_ASWKB(POINT(1.1111,-1.1111)))); SELECT ST_X(ST_POINTFROMWKB(ST_ASWKB(POINT(10.0000,10.0000)))); SELECT ST_X(ST_POINTFROMWKB(ST_ASWKB(POINT(-1e308,-1e308)))); --echo #==================================================================================== --echo # ST_Y(point) --echo #==================================================================================== SELECT ST_Y(ST_POINTFROMTEXT('POINT(0 0)')); SELECT ST_Y(ST_POINTFROMTEXT('POINT(10 10)')); SELECT ST_Y(ST_POINTFROMTEXT('POINT(1e308 1e308)')); SELECT ST_Y(ST_POINTFROMWKB(ST_ASWKB(POINT(1.1111,-1.1111)))); SELECT ST_Y(ST_POINTFROMWKB(ST_ASWKB(POINT(10.0000,10.0000)))); SELECT ST_Y(ST_POINTFROMWKB(ST_ASWKB(POINT(-1e308,-1e308)))); ############################################################################################ # LINESTRING geometry property functions # ############################################################################################ --echo #==================================================================================== --echo # ST_ISCLOSED(linestring) --echo #==================================================================================== SELECT ST_ISCLOSED(ST_LINEFROMTEXT('LINESTRING(0 0,2 2)')); SELECT ST_ISCLOSED(ST_LINEFROMTEXT('LINESTRING(0 0,2 2,0 0)')); SELECT ST_ISCLOSED(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0)')); SELECT ST_ISCLOSED(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0,0 0)')); SELECT ST_ISCLOSED(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10))))); SELECT ST_ISCLOSED(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10), POINT(0,0))))); SELECT ST_ISCLOSED(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10))))); SELECT ST_ISCLOSED(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10), POINT(0,0))))); --echo #==================================================================================== --echo # ST_LENGTH(linestring) --echo #==================================================================================== SELECT ST_LENGTH(ST_LINEFROMTEXT('LINESTRING(0 0,2 2)')); SELECT ST_LENGTH(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0,0 0)')); SELECT ST_LENGTH(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-10,-10))))); SELECT ST_LENGTH(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-5,5), POINT(0,0))))); SELECT ST_LENGTH(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10))))); SELECT ST_LENGTH(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10), POINT(0,0))))); --echo # Cartesian SRS SELECT ST_LENGTH(ST_GEOMFROMTEXT('LINESTRING(0 0,2 2,4 4,6 6,8 8, 10 10, 10 10)', 2000)); --echo # Geographic SRS --echo # Different result on Windows and Linux, need to use ROUND SELECT ROUND(ST_LENGTH(ST_GEOMFROMTEXT('LINESTRING(0 0,2 2,4 4,6 6,8 8, 10 10, 10 10)', 4326)),7); --echo # Infinite Linestring --error ER_DATA_OUT_OF_RANGE SELECT ST_LENGTH(ST_GEOMFROMTEXT('LINESTRING(1e-300 0,1e300 0,1e-300 0,1e300 0,1e-300 0, 1e300 0, 1e-300 0)', 0)); --echo #==================================================================================== --echo # ST_NUMPOINTS(linestring) --echo #==================================================================================== SELECT ST_NUMPOINTS(ST_LINEFROMTEXT('LINESTRING(0 0,2 2)')); SELECT ST_NUMPOINTS(ST_LINEFROMTEXT('LINESTRING(0 0,1e308 1e308)')); SELECT ST_NUMPOINTS(ST_LINESTRINGFROMTEXT('LINESTRING(1e308 1e308,-1e308 -1e308)')); SELECT ST_NUMPOINTS(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0,0 0)')); SELECT ST_NUMPOINTS(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-10,-10))))); SELECT ST_NUMPOINTS(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-5,5), POINT(0,0))))); SELECT ST_NUMPOINTS(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10))))); SELECT ST_NUMPOINTS(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10), POINT(0,0))))); --echo #==================================================================================== --echo # ST_STARTPOINT(linestring) --echo #==================================================================================== SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINEFROMTEXT('LINESTRING(0 0,2 2)'))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINEFROMTEXT('LINESTRING(0 0,1e308 1e308)'))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(1e308 1e308,-1e308 -1e308)'))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0,0 0)'))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-10,-10)))))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-5,5), POINT(0,0)))))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10)))))); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10), POINT(0,0)))))); --echo #==================================================================================== --echo # ST_ENDPOINT(linestring) --echo #==================================================================================== SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINEFROMTEXT('LINESTRING(0 0,2 2)'))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINEFROMTEXT('LINESTRING(0 0,1e308 1e308)'))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(1e308 1e308,-1e308 -1e308)'))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0,0 0)'))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-10,-10)))))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-5,5), POINT(0,0)))))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10)))))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10), POINT(0,0)))))); --echo #==================================================================================== --echo # ST_POINTN(linestring, number) --echo #==================================================================================== SELECT ST_ASTEXT(ST_POINTN(ST_LINEFROMTEXT('LINESTRING(0 0,2 2)'), 1)); SELECT ST_ASTEXT(ST_POINTN(ST_LINEFROMTEXT('LINESTRING(0 0,1e308 1e308)'), 2)); SELECT ST_ASTEXT(ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(1e308 1e308,-1e308 -1e308)'), 2)); SELECT ST_ASTEXT(ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,0 5,5 5,5 0,0 0)'), 3)); SELECT ST_ASTEXT(ST_POINTN(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-10,-10)))), 3)); SELECT ST_ASTEXT(ST_POINTN(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(5,5), POINT(-5,5), POINT(0,0)))), 4)); SELECT ST_ASTEXT(ST_POINTN(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10)))), 4)); SELECT ST_ASTEXT(ST_POINTN(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(10,10), POINT(10,0), POINT(0,10), POINT(0,0)))), 4)); ############################################################################################ # POLYGON geometry property functions # ############################################################################################ --echo #==================================================================================== --echo # ST_NUMINTERIORRINGS(polygon) --echo #==================================================================================== SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))')); SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))')); SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))')); SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMTEXT('POLYGON((0 0,0 -115,-115 -115,-115 0,0 0))')); SELECT ST_NUMINTERIORRINGS(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0)))))); SELECT ST_NUMINTERIORRINGS(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))); SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)), LINESTRING(POINT(8,8), POINT(8,10), POINT(10,10), POINT(10,8), POINT(8,8)))))); SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(110,110), POINT(110,5), POINT(5,5), POINT(110,110)))))); --echo #==================================================================================== --echo # ST_EXTERIORRING(polygon) --echo #==================================================================================== SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYFROMTEXT('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_EXTERIORRING(ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYGONFROMTEXT('POLYGON((0 0,0 -115,-115 -115,-115 0,0 0))'))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)), LINESTRING(POINT(8,8), POINT(8,10), POINT(10,10), POINT(10,8), POINT(8,8))))))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(110,110), POINT(110,5), POINT(5,5), POINT(110,110))))))); --echo #==================================================================================== --echo # ST_INTERIORRINGN(polygon, number) --echo #==================================================================================== SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYFROMTEXT('POLYGON((0 0,0 5,5 5,5 0,0 0))'), 1)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))'), 1)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'), 2)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 -115,-115 -115,-115 0,0 0))'), 1)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))), 1)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))), 1)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)), LINESTRING(POINT(8,8), POINT(8,10), POINT(10,10), POINT(10,8), POINT(8,8))))), 2)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(110,110), POINT(110,5), POINT(5,5), POINT(110,110))))), 2)); ############################################################################################ # MULTULINESTRING geometry property functions # ############################################################################################ --echo #==================================================================================== --echo # ST_ISCLOSED(multilinestring) --echo #==================================================================================== SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,10 0,0 0))')); SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,10 0),(0 0,-10 0,0 0))')); SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,10 10,0 0),(0 0,-10 -10,0 0))')); SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,5 0,0 0),(0 0,0 5),(0 0,-5 0),(0 0,0 -5))')); SELECT ST_ISCLOSED(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(0,0)))))); SELECT ST_ISCLOSED(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1e308,1e308)))))); SELECT ST_ISCLOSED(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(10,10), POINT(0,0)), LINESTRING(POINT(1e308,1e308), POINT(-1e308,-1e308), POINT(1e308,1e308)))))); SELECT ST_ISCLOSED(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1e10,1e10)))))); --echo #==================================================================================== --echo # ST_LENGTH(multilinestring) --echo #==================================================================================== SELECT ST_LENGTH(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,10 0,0 0))')); SELECT ST_LENGTH(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,10 0,0 0),(0 0,-10 0,0 0))')); SELECT ST_LENGTH(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,10 10,0 0),(0 0,-10 -10,0 0))')); SELECT ST_LENGTH(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,5 0),(0 0,0 5),(0 0,-5 0),(0 0,0 -5))')); SELECT ST_LENGTH(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(0,0)))))); SELECT ST_LENGTH(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1e10,1e10)))))); --echo # Cartesian SRS SELECT ST_LENGTH(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,5 0),(0 0,0 5),(0 0,-5 0),(0 0,0 -5))', 2000)); --echo # Geographic SRS SELECT ROUND(ST_LENGTH(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((0 0,5 0),(0 0,0 5),(0 0,-5 0),(0 0,0 -5))', 4326)), 7); ############################################################################################ # GEOMETRYCOLLECTION geometry property functions # ############################################################################################ --echo #==================================================================================== --echo # ST_NUMGEOMETRIES(geometrycollection) --echo #==================================================================================== SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))')); SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)))')); SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(' 'MULTIPOINT(0 0),' 'MULTILINESTRING((0 0,5 5,10 10),' '(0 0,-5 -5,-10 -10)),' 'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),' '((5 5,5 10,10 10,10 5,5 5))))')); SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'GEOMETRYCOLLECTION(),' 'GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION()),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10))')); SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( POINT(10,10), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)), POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))))); SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10)), LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,-10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(1,0), POINT(0,0))), POLYGON(LINESTRING(POINT(2,2), POINT(2,13), POINT(13,13), POINT(13,2), POINT(2,2)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))))); SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( POINT(0,0), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6)), POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10)), LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,-10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(1,0), POINT(0,0))), POLYGON(LINESTRING(POINT(2,2), POINT(2,3), POINT(3,3), POINT(3,2), POINT(2,2)))))))); --echo #==================================================================================== --echo # ST_GEOMETRYN(geometrycollection, number) --echo #==================================================================================== SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0))'), 1)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)))'), 2)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(' 'MULTIPOINT(0 0),' 'MULTILINESTRING((0 0,5 5,10 10),' '(0 0,-5 -5,-10 -10)),' 'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),' '((5 5,5 10,10 10,10 5,5 5))))'), 3)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'GEOMETRYCOLLECTION(),' 'GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION()),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10))'), 2)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( POINT(10,10), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8)), POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))), 2)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10)), LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,-10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(1,0), POINT(0,0))), POLYGON(LINESTRING(POINT(2,2), POINT(2,13), POINT(13,13), POINT(13,2), POINT(2,2)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))))))), 3)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( POINT(0,0), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6)), POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10)), LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,-10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(1,0), POINT(0,0))), POLYGON(LINESTRING(POINT(2,2), POINT(2,3), POINT(3,3), POINT(3,2), POINT(2,2))))))), 2)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( POINT(0,0), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6)), POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10)), LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,-10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(1,0), POINT(0,0))), POLYGON(LINESTRING(POINT(2,2), POINT(2,3), POINT(3,3), POINT(3,2), POINT(2,2))))))), 5)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION( POINT(0,0), LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6)), POLYGON(LINESTRING(POINT(0,0), POINT(10,0), POINT(10,10), POINT(0,10), POINT(0,0)), LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))), MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308)), MULTILINESTRING(LINESTRING(POINT(0,0), POINT(5,5), POINT(10,10)), LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,-10))), MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(1,0), POINT(0,0))), POLYGON(LINESTRING(POINT(2,2), POINT(2,3), POINT(3,3), POINT(3,2), POINT(2,2))))))), 6)); ############################################################################################ # Invalid functions calls # ############################################################################################ --echo #==================================================================================== --echo # ST_X(point) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_X(); SELECT ST_X(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_X(ST_POINTFROMWKB()); SELECT ST_X(ST_POINTFROMWKB(NULL)); --error ER_PARSE_ERROR SELECT ST_X(ST_POINTFROMWKB(ST_ASWKB(POINT(1)))); --error ER_BAD_FIELD_ERROR SELECT ST_X(ST_POINTFROMWKB(ST_ASWKB(POINT(1,a)))); --error ER_BAD_FIELD_ERROR SELECT ST_X(ST_POINTFROMWKB(ST_ASWKB(POINT(a,b)))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_X(ST_POINTFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_X(ST_POINTFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_X(ST_POINTFROMTEXT('POINT()')); --error ER_GIS_INVALID_DATA SELECT ST_X(ST_POINTFROMTEXT('POINT(1)')); --error ER_GIS_INVALID_DATA SELECT ST_X(ST_POINTFROMTEXT('POINT(a 1)')); --error ER_GIS_INVALID_DATA SELECT ST_X(ST_POINTFROMTEXT('POINT(1 1,2)')); --error ER_PARSE_ERROR SELECT ST_X(ST_POINTFROMTEXT('POINT('!' 0)')); --echo #==================================================================================== --echo # ST_Y(point) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_Y(); SELECT ST_Y(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_Y(ST_POINTFROMWKB()); SELECT ST_Y(ST_POINTFROMWKB(NULL)); --error ER_PARSE_ERROR SELECT ST_Y(ST_POINTFROMWKB(ST_ASWKB(POINT(1)))); --error ER_BAD_FIELD_ERROR SELECT ST_Y(ST_POINTFROMWKB(ST_ASWKB(POINT(1,a)))); --error ER_BAD_FIELD_ERROR SELECT ST_Y(ST_POINTFROMWKB(ST_ASWKB(POINT(a,b)))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_Y(ST_POINTFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_Y(ST_POINTFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_Y(ST_POINTFROMTEXT('POINT()')); --error ER_GIS_INVALID_DATA SELECT ST_Y(ST_POINTFROMTEXT('POINT(1)')); --error ER_GIS_INVALID_DATA SELECT ST_Y(ST_POINTFROMTEXT('POINT(a 1)')); --error ER_GIS_INVALID_DATA SELECT ST_Y(ST_POINTFROMTEXT('POINT(1 1,2)')); --error ER_PARSE_ERROR SELECT ST_Y(ST_POINTFROMTEXT('POINT('!' 0)')); --echo #==================================================================================== --echo # ST_ISCLOSED(linestring) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(); SELECT ST_ISCLOSED(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(ST_LINEFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(2,2))), 2); --error ER_BAD_FIELD_ERROR SELECT ST_ISCLOSED(ST_LINESTRINGFROMWKB(LINESTRING(POINT(a,1), POINT(2,2)))); --error ER_BAD_FIELD_ERROR SELECT ST_ISCLOSED(ST_LINESTRINGFROMWKB(LINESTRING(POINT(a,1), POINT(2,b)))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(ST_LINEFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_LINEFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_LINEFROMTEXT('LINESTRING()')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_LINEFROMTEXT('LINESTRING(0)')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_LINESTRINGFROMTEXT('LINESTRING(1 2,1')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_LINESTRINGFROMTEXT('LINESTRING(1 1,2 2,a 3)')); --error ER_PARSE_ERROR SELECT ST_ISCLOSED(ST_LINESTRINGFROMTEXT('LINESTRING('!' 0,1 1,2 2)')); --echo #==================================================================================== --echo # ST_NUMPOINTS(linestring) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMPOINTS(); SELECT ST_NUMPOINTS(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMPOINTS(ST_LINEFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMPOINTS(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(2,2)))), 2); --error ER_BAD_FIELD_ERROR SELECT ST_NUMPOINTS(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,2))))); --error ER_BAD_FIELD_ERROR SELECT ST_NUMPOINTS(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,b))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMPOINTS(ST_LINEFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_NUMPOINTS(ST_LINEFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_NUMPOINTS(ST_LINEFROMTEXT('LINESTRING()')); --error ER_GIS_INVALID_DATA SELECT ST_NUMPOINTS(ST_LINEFROMTEXT('LINESTRING(0)')); --error ER_GIS_INVALID_DATA SELECT ST_NUMPOINTS(ST_LINESTRINGFROMTEXT('LINESTRING(1 2,1')); --error ER_GIS_INVALID_DATA SELECT ST_NUMPOINTS(ST_LINESTRINGFROMTEXT('LINESTRING(1 1,2 2,a 3)')); --error ER_PARSE_ERROR SELECT ST_NUMPOINTS(ST_LINESTRINGFROMTEXT('LINESTRING('!' 0,1 1,2 2)')); --echo #==================================================================================== --echo # ST_STARTPOINT(linestring) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_STARTPOINT(); SELECT ST_STARTPOINT(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_STARTPOINT(ST_LINEFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_STARTPOINT(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(2,2)))), 2); --error ER_BAD_FIELD_ERROR SELECT ST_STARTPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,2))))); --error ER_BAD_FIELD_ERROR SELECT ST_STARTPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,b))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_STARTPOINT(ST_LINEFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_STARTPOINT(ST_LINEFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_STARTPOINT(ST_LINEFROMTEXT('LINESTRING()')); --error ER_GIS_INVALID_DATA SELECT ST_STARTPOINT(ST_LINEFROMTEXT('LINESTRING(0)')); --error ER_GIS_INVALID_DATA SELECT ST_STARTPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(1 2,1')); --error ER_GIS_INVALID_DATA SELECT ST_STARTPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(1 1,2 2,a 3)')); --error ER_PARSE_ERROR SELECT ST_STARTPOINT(ST_LINESTRINGFROMTEXT('LINESTRING('!' 0,1 1,2 2)')); --echo #==================================================================================== --echo # ST_ENDPOINT(linestring) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ENDPOINT(); SELECT ST_ENDPOINT(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ENDPOINT(ST_LINEFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ENDPOINT(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(2,2)))), 2); --error ER_BAD_FIELD_ERROR SELECT ST_ENDPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,2))))); --error ER_BAD_FIELD_ERROR SELECT ST_ENDPOINT(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,b))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ENDPOINT(ST_LINEFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_ENDPOINT(ST_LINEFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_ENDPOINT(ST_LINEFROMTEXT('LINESTRING()')); --error ER_GIS_INVALID_DATA SELECT ST_ENDPOINT(ST_LINEFROMTEXT('LINESTRING(0)')); --error ER_GIS_INVALID_DATA SELECT ST_ENDPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(1 2,1')); --error ER_GIS_INVALID_DATA SELECT ST_ENDPOINT(ST_LINESTRINGFROMTEXT('LINESTRING(1 1,2 2,a 3)')); --error ER_PARSE_ERROR SELECT ST_ENDPOINT(ST_LINESTRINGFROMTEXT('LINESTRING('!' 0,1 1,2 2)')); --echo #==================================================================================== --echo # ST_POINTN(linestring, number) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_POINTN(); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_POINTN(NULL); SELECT ST_POINTN(NULL, 1); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_POINTN(ST_LINEFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_POINTN(ST_LINEFROMWKB(ST_ASWKB(LINESTRING(POINT(0,0), POINT(2,2))))); --error ER_BAD_FIELD_ERROR SELECT ST_POINTN(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,2)))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_POINTN(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(a,1), POINT(2,b)))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_POINTN(ST_LINESTRINGFROMWKB(ST_ASWKB(LINESTRING(POINT(1,1), POINT(2,2)))), a); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_POINTN(ST_LINEFROMTEXT()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_POINTN(ST_LINEFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_POINTN(ST_LINEFROMTEXT('NULL'), 1); --error ER_GIS_INVALID_DATA SELECT ST_POINTN(ST_LINEFROMTEXT('LINESTRING()'), 2); --error ER_GIS_INVALID_DATA SELECT ST_POINTN(ST_LINEFROMTEXT('LINESTRING(0)'), 3); --error ER_GIS_INVALID_DATA SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(1 2,1'), 4); --error ER_GIS_INVALID_DATA SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(1 1,2 2,a 3)'), 5); --error ER_PARSE_ERROR SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING('!' 0,1 1,2 2)'), 6); SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,1 1,2 2)'), 0); SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,1 1,2 2)'), -1); SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,1 1,2 2)'), -1024); SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,1 1,2 2)'), 10000); SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,1 1,2 2)'), 1234567890); SELECT ST_POINTN(ST_LINESTRINGFROMTEXT('LINESTRING(0 0,1 1,2 2)'), 'a'); --echo #==================================================================================== --echo # ST_NUMINTERIORRINGS(polygon) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMINTERIORRINGS(); SELECT ST_NUMINTERIORRINGS(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMINTERIORRINGS(ST_POLYFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMINTERIORRINGS(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(0,0))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(a,0), POINT(0,1), POINT(1,1), POINT(0,0)))))); --error ER_BAD_FIELD_ERROR SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(a,0), POINT(b,1), POINT(1,1), POINT(0,0)))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('POLYGON(())')); --error ER_GIS_INVALID_DATA SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('POLYGON((0))')); --error ER_GIS_INVALID_DATA SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMTEXT('POLYGON((0 0,0 4,4 4,0 0)')); --error ER_GIS_INVALID_DATA SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMTEXT('POLYGON((0 0,2 0,2))')); --error ER_GIS_INVALID_DATA SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMTEXT('POLYGON((0 0,0 5,5 a,0 0))')); --error ER_PARSE_ERROR SELECT ST_NUMINTERIORRINGS(ST_POLYGONFROMTEXT('POLYGON(('!' 0,2 0,2 4,0 0))')); --echo #==================================================================================== --echo # ST_EXTERIORRING(polygon) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_EXTERIORRING(); SELECT ST_EXTERIORRING(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_EXTERIORRING(ST_POLYFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_EXTERIORRING(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(0,0))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_EXTERIORRING(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(a,0), POINT(0,1), POINT(1,1), POINT(0,0)))))); --error ER_BAD_FIELD_ERROR SELECT ST_EXTERIORRING(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(a,0), POINT(b,1), POINT(1,1), POINT(0,0)))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_EXTERIORRING(ST_POLYFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_EXTERIORRING(ST_POLYFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_EXTERIORRING(ST_POLYFROMTEXT('POLYGON(())')); --error ER_GIS_INVALID_DATA SELECT ST_EXTERIORRING(ST_POLYFROMTEXT('POLYGON((0))')); --error ER_GIS_INVALID_DATA SELECT ST_EXTERIORRING(ST_POLYGONFROMTEXT('POLYGON((0 0,0 4,4 4,0 0)')); --error ER_GIS_INVALID_DATA SELECT ST_EXTERIORRING(ST_POLYGONFROMTEXT('POLYGON((0 0,2 0,2))')); --error ER_GIS_INVALID_DATA SELECT ST_EXTERIORRING(ST_POLYGONFROMTEXT('POLYGON((0 0,0 5,5 a,0 0))')); --error ER_PARSE_ERROR SELECT ST_EXTERIORRING(ST_POLYGONFROMTEXT('POLYGON(('!' 0,2 0,2 4,0 0))')); --echo #==================================================================================== --echo # ST_INTERIORRINGN(polygon, number) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_INTERIORRINGN(); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_INTERIORRINGN(NULL); SELECT ST_INTERIORRINGN(NULL, 1); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_INTERIORRINGN(ST_POLYFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_INTERIORRINGN(ST_POLYFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(0,0)))))); --error ER_BAD_FIELD_ERROR SELECT ST_INTERIORRINGN(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(a,0), POINT(0,1), POINT(1,1), POINT(0,0))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_INTERIORRINGN(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(a,0), POINT(b,1), POINT(1,1), POINT(0,0))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_INTERIORRINGN(ST_POLYGONFROMWKB(ST_ASWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,1), POINT(1,1), POINT(0,0))))), a); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_INTERIORRINGN(ST_POLYFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_INTERIORRINGN(ST_POLYFROMTEXT('NULL'), 1); --error ER_GIS_INVALID_DATA SELECT ST_INTERIORRINGN(ST_POLYFROMTEXT('POLYGON(())'), 2); --error ER_GIS_INVALID_DATA SELECT ST_INTERIORRINGN(ST_POLYFROMTEXT('POLYGON((0))'), 3); --error ER_GIS_INVALID_DATA SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 4,4 4,0 0)'), 4); --error ER_GIS_INVALID_DATA SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,2 0,2))'), 5); --error ER_GIS_INVALID_DATA SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 5,5 a,0 0))'), 6); --error ER_PARSE_ERROR SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON(('!' 0,2 0,2 4,0 0))'), 7); SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 2,2 2,0 0))'), 0); SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 2,2 2,0 0))'), -1); SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 2,2 2,0 0))'), -1024); SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 2,2 2,0 0))'), 10000); SELECT ST_INTERIORRINGN(ST_POLYGONFROMTEXT('POLYGON((0 0,0 2,2 2,0 0))'), 123456789); --echo #==================================================================================== --echo # ST_ISCLOSED(multilinestring) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(); SELECT ST_ISCLOSED(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(ST_MLINEFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(ST_MLINEFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(1,1), POINT(2,2))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(1,1), POINT(2,2), POINT(3,3), POINT(a,4)))))); --error ER_BAD_FIELD_ERROR SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMWKB(ST_ASWKB(MULTILINESTRING(LINESTRING(POINT(1,1), POINT(2,2)), LINESTRING(POINT(3,3), POINT(a,4)))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_ISCLOSED(ST_POLYFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('MULTILINESTRING(())')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('MULTILINESTRING((1 1,2 2),()')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('MULTILINESTRING((1 1,2 2,3 3)')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((1 1,2 3,3 3,4))')); --error ER_GIS_INVALID_DATA SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING((1 1,2 2,3 3,4 a))')); --error ER_PARSE_ERROR SELECT ST_ISCLOSED(ST_MULTILINESTRINGFROMTEXT('MULTILINESTRING(('!' 1,2 2,3 3,4 4')); --echo #==================================================================================== --echo # ST_LENGTH(multilinestring) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_LENGTH(); SELECT ST_LENGTH(NULL); --echo #==================================================================================== --echo # ST_NUMGEOMETRIES(geometrycollection) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMGEOMETRIES(); SELECT ST_NUMGEOMETRIES(NULL); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(1,1), POINT(2,2))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(a,1), POINT(2,2)))))); --error ER_BAD_FIELD_ERROR SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,b), LINESTRING(POINT(a,1), POINT(2,2)))))); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('NULL')); --error ER_GIS_INVALID_DATA SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(1)')); --error ER_GIS_INVALID_DATA SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0))')); --error ER_GIS_INVALID_DATA SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2)')); --error ER_GIS_INVALID_DATA SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2))')); --error ER_GIS_INVALID_DATA SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 a))')); --error ER_PARSE_ERROR SELECT ST_NUMGEOMETRIES(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 '!'))')); --echo #==================================================================================== --echo # ST_GEOMETRYN(geometrycollection, number) --echo #==================================================================================== --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_GEOMETRYN(); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_GEOMETRYN(NULL); SELECT ST_GEOMETRYN(NULL, 1); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMWKB()); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(1,1), POINT(2,2)))))); --error ER_BAD_FIELD_ERROR SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(a,1), POINT(2,2))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,b), LINESTRING(POINT(a,1), POINT(2,2))))), 1); --error ER_BAD_FIELD_ERROR SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMWKB(ST_ASWKB(GEOMETRYCOLLECTION(POINT(0,0), LINESTRING(POINT(1,1), POINT(2,2))))), A); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT()); --error ER_GIS_INVALID_DATA SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('NULL'), 1); --error ER_GIS_INVALID_DATA SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(1)'), 2); --error ER_GIS_INVALID_DATA SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0))'), 3); --error ER_GIS_INVALID_DATA SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2)'), 4); --error ER_GIS_INVALID_DATA SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2))'), 5); --error ER_GIS_INVALID_DATA SELECT ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 a))'), 6); --error ER_PARSE_ERROR SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 '!'))'), 7); SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2))'), 0); SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2))'), -1); SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2))'), -1024); SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2))'), 10000); SELECT ST_GEOMETRYN(ST_GEOMETRYCOLLECTIONFROMTEXT('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(1 1,2 2))'), 123456789); ############################################################################################ # Checking the procedure to work with Point and MultiPoint properties # ############################################################################################ --echo # Check procedure to work with Point and MultiPoint properties DELIMITER |; CREATE PROCEDURE point_attri() BEGIN SELECT ST_X(ST_POINTFROMTEXT('POINT(0 0)')); SELECT ST_X(ST_POINTFROMTEXT('POINT(1.1111 -1.1111)')); SELECT ST_X(ST_POINTFROMTEXT('POINT(1e308 1e308)')); SELECT ST_Y(ST_POINTFROMTEXT('POINT(0 0)')); SELECT ST_Y(ST_POINTFROMTEXT('POINT(1.1111 -1.1111)')); SELECT ST_Y(ST_POINTFROMTEXT('POINT(1e308 1e308)')); END | DELIMITER ;| --echo # Call the proc CALL point_attri; --echo # Dropping the created procedure DROP PROCEDURE point_attri; ############################################################################################ # Checking the procedure to work with Linestring and MultiLinestring properties # ############################################################################################ --echo # Check procedure to work with Linestring and MultiLineString properties DELIMITER |; CREATE PROCEDURE line_attri() BEGIN SELECT ST_ISCLOSED(ST_LINEFROMTEXT('LINESTRING(0 0,1 1,2 2,0 0)')); SELECT ST_NUMPOINTS(ST_LINEFROMTEXT('LINESTRING(0 0,1 1,2 2,0 0)')); SELECT ST_LENGTH(ST_LINEFROMTEXT('LINESTRING(0 0,10 0,0 0,-10 0,0 0,0 10,0 0,0 -10,0 0)')); SELECT ST_ASTEXT(ST_STARTPOINT(ST_LINEFROMTEXT('LINESTRING(0 0,1 1,2 2,0 0)'))); SELECT ST_ASTEXT(ST_ENDPOINT(ST_LINEFROMTEXT('LINESTRING(0 0,1 1,2 2,3 3,0 0)'))); SELECT ST_ASTEXT(ST_POINTN(ST_LINEFROMTEXT('LINESTRING(0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)'), 8)); SELECT ST_ISCLOSED(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,1 1,2 2,0 0),(0 0,-1 -1,-2 -2,0 0))')); SELECT ST_LENGTH(ST_MLINEFROMTEXT('MULTILINESTRING((0 0,10 0),(0 0,0 10),(0 0,-10 0),(0 0,0 -10))')); END | DELIMITER ;| --echo # Call the proc CALL line_attri; --echo # Dropping the created procedure DROP PROCEDURE line_attri; ############################################################################################ # Checking the procedure to work with Polygon and MultiPolygon properties # ############################################################################################ DELIMITER |; CREATE PROCEDURE poly_attri() BEGIN SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))')); SELECT ST_NUMINTERIORRINGS(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))')); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'))); SELECT ST_ASTEXT(ST_EXTERIORRING(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'))); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0))'), 1)); SELECT ST_ASTEXT(ST_INTERIORRINGN(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6))'), 2)); END | DELIMITER ;| --echo # Call the proc CALL poly_attri; --echo # Dropping the created procedure DROP PROCEDURE poly_attri; ############################################################################################ # Checking the procedure to work with GeometryCollection properties # ############################################################################################ DELIMITER |; CREATE PROCEDURE geom_coll_attri() BEGIN SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)))')); SELECT ST_NUMGEOMETRIES(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10),' 'GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION()),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)))')); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)))'), 3)); SELECT ST_ASTEXT(ST_GEOMETRYN(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,2 2,4 4,6 6,8 8,10 10),' 'GEOMETRYCOLLECTION(' 'GEOMETRYCOLLECTION()),' 'POLYGON((0 0,0 5,5 5,5 0,0 0)))'), 3)); END | DELIMITER ;| --echo # Call the proc CALL geom_coll_attri; --echo # Dropping the created procedure DROP PROCEDURE geom_coll_attri; --echo # Final cleanup DROP TABLE gis_point; DROP TABLE gis_linestring; DROP TABLE gis_polygon; DROP TABLE gis_multi_point; DROP TABLE gis_multi_linestring; DROP TABLE gis_multi_polygon; DROP TABLE gis_geometrycollection; --echo # --echo # WL#8579 Spatial Reference Systems --echo # --echo # SRID 0 (should pass) SELECT ST_LENGTH(ST_GEOMFROMTEXT('POINT(0 0)', 0)); --echo # Projected SRS (should pass) SELECT ST_LENGTH(ST_GEOMFROMTEXT('POINT(0 0)', 2000)); --echo # Geographic SRS (should pass) SELECT ST_LENGTH(ST_GEOMFROMTEXT('POINT(0 0)', 4326)); --echo # --echo # WL#8579 Spatial Reference Systems --echo # GIS functions that do not depend on any SRS --echo # DELIMITER |; CREATE PROCEDURE geom_prop_func(IN srid INT) BEGIN SET @pt_geom = ST_GEOMFROMTEXT('POINT(10 20)', srid); SET @ln_geom = ST_GEOMFROMTEXT('LINESTRING(0 0,2 2,4 4,6 6,8 8, 10 10)', srid); SET @py_geom = ST_GEOMFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4))', srid); SET @gc_geom = ST_GEOMFROMTEXT('GEOMETRYCOLLECTION(' 'POINT(0 0),' 'LINESTRING(0 0,10 10),' 'POLYGON((0 0,0 10,10 10,10 0, 0 0)),' 'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),' 'MULTILINESTRING((0 0,10 10),(0 10,10 0)),' 'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))', srid); # GIS geometry property functions that do not depend on any SRS DO ST_SRID(@pt_geom); DO ST_ISEMPTY(@pt_geom); DO ST_DIMENSION(@pt_geom); DO ST_GEOMETRYTYPE(@pt_geom); DO ST_X(@pt_geom); DO ST_Y(@pt_geom); DO ST_ISCLOSED(@ln_geom); DO ST_NUMPOINTS(@ln_geom); DO ST_ENDPOINT(@ln_geom); DO ST_POINTN(@ln_geom, 2); DO ST_STARTPOINT(@ln_geom); DO ST_NUMINTERIORRING(@py_geom); DO ST_NUMINTERIORRINGS(@py_geom); DO ST_EXTERIORRING(@py_geom); DO ST_INTERIORRINGN(@py_geom, 1); DO ST_NUMGEOMETRIES(@gc_geom); DO ST_GEOMETRYN(@gc_geom, 1); END | DELIMITER ;| --echo # SRID 0 (should pass) CALL geom_prop_func(0); --echo # Projected SRS (should pass) CALL geom_prop_func(2000); --echo # Geographic SRS (should fail) --error ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS CALL geom_prop_func(4326); # clean up DROP PROCEDURE geom_prop_func; --echo # --echo # WL#11096 Don't do Cartesian computations on geographic geometries --echo # --echo # Assume SRID 10 is not defined. --error ER_SRS_NOT_FOUND DO ST_ISCLOSED(x'0A0000000102000000020000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_LENGTH(x'0A0000000102000000020000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_SRID(ST_GEOMFROMTEXT('LINESTRING(0 0, 10 10)'), 10); --error ER_SRS_NOT_FOUND DO ST_DIMENSION(x'0A000000010100000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_ENDPOINT(x'0A0000000102000000020000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_EXTERIORRING(x'0A0000000103000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_GEOMETRYN(x'0A000000010700000001000000010100000000000000000000000000000000000000', 1); --error ER_SRS_NOT_FOUND DO ST_INTERIORRINGN(x'0A0000000103000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 1); --error ER_SRS_NOT_FOUND DO ST_ISEMPTY(x'0A000000010100000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_NUMGEOMETRIES(x'0A000000010700000001000000010100000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_NUMINTERIORRING(x'0A0000000103000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_NUMINTERIORRINGS(x'0A0000000103000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_NUMPOINTS(x'0A000000010400000001000000010100000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_NUMPOINTS(x'0A000000010400000001000000010100000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_POINTN(x'0A000000010400000001000000010100000000000000000000000000000000000000', 1); --error ER_SRS_NOT_FOUND DO ST_STARTPOINT(x'0A0000000102000000020000000000000000000000000000000000000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_X(x'0A000000010100000000000000000000000000000000000000'); --error ER_SRS_NOT_FOUND DO ST_Y(x'0A000000010100000000000000000000000000000000000000'); SET @LINE = ST_GEOMFROMTEXT( 'LINESTRING(0 0 , 1 1 )', 4326); SET @MLINE = ST_GEOMFROMTEXT( 'MULTILINESTRING((0 0 , 1 1 ))', 4326); --replace_numeric_round 5 SELECT ST_LENGTH( @LINE, 'METRE'); --replace_numeric_round 5 SELECT ST_LENGTH( @MLINE, 'METRE'); --error ER_UNIT_NOT_FOUND SELECT ST_LENGTH( @LINE, 'METER'); SELECT ST_LENGTH( @LINE, NULL); SELECT ST_LENGTH( NULL, 'FOOT'); SET @LINE = ST_GEOMFROMTEXT( 'LINESTRING(0 0 , 1 1 )', 32167); SELECT ST_LENGTH( @LINE); --replace_numeric_round 5 SELECT ST_LENGTH( @LINE, 'METRE');