DROP TABLE IF EXISTS pt, ls, p, mpt, mls, mp, gc, geo; CREATE TABLE pt (fid INTEGER NOT NULL PRIMARY KEY, g POINT); CREATE TABLE ls (fid INTEGER NOT NULL PRIMARY KEY, g LINESTRING); CREATE TABLE p (fid INTEGER NOT NULL PRIMARY KEY, g POLYGON); CREATE TABLE mpt (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOINT); CREATE TABLE mls (fid INTEGER NOT NULL PRIMARY KEY, g MULTILINESTRING); CREATE TABLE mp (fid INTEGER NOT NULL PRIMARY KEY, g MULTIPOLYGON); CREATE TABLE gc (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRYCOLLECTION); CREATE TABLE geo (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY); SHOW FIELDS FROM pt; Field Type Null Key Default Extra fid int(11) PRI 0 g point YES NULL SHOW FIELDS FROM ls; Field Type Null Key Default Extra fid int(11) PRI 0 g linestring YES NULL SHOW FIELDS FROM p; Field Type Null Key Default Extra fid int(11) PRI 0 g polygon YES NULL SHOW FIELDS FROM mpt; Field Type Null Key Default Extra fid int(11) PRI 0 g multipoint YES NULL SHOW FIELDS FROM mls; Field Type Null Key Default Extra fid int(11) PRI 0 g multilinestring YES NULL SHOW FIELDS FROM mp; Field Type Null Key Default Extra fid int(11) PRI 0 g multipolygon YES NULL SHOW FIELDS FROM gc; Field Type Null Key Default Extra fid int(11) PRI 0 g geometrycollection YES NULL SHOW FIELDS FROM geo; Field Type Null Key Default Extra fid int(11) PRI 0 g geometry YES NULL INSERT INTO pt VALUES (101, PointFromText('POINT(10 10)')), (102, PointFromText('POINT(20 10)')), (103, PointFromText('POINT(20 20)')), (104, PointFromWKB(AsWKB(PointFromText('POINT(10 20)')))); INSERT INTO ls VALUES (105, LineFromText('LINESTRING(0 0,0 10,10 0)')), (106, LineStringFromText('LINESTRING(10 10,20 10,20 20,10 20,10 10)')), (107, LineStringFromWKB(LineString(Point(10, 10), Point(40, 10)))); INSERT INTO p VALUES (108, PolygonFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))')), (109, PolyFromText('POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10 20,10 10))')), (110, PolyFromWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0))))); INSERT INTO mpt VALUES (111, MultiPointFromText('MULTIPOINT(0 0,10 10,10 20,20 20)')), (112, MPointFromText('MULTIPOINT(1 1,11 11,11 21,21 21)')), (113, MPointFromWKB(MultiPoint(Point(3, 6), Point(4, 10)))); INSERT INTO mls VALUES (114, MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))')), (115, MLineFromText('MULTILINESTRING((10 48,10 21,10 0))')), (116, MLineFromWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7))))); INSERT INTO mp VALUES (117, MultiPolygonFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')), (118, MPolyFromText('MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18)))')), (119, MPolyFromWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))); INSERT INTO gc VALUES (120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), (121, GeometryFromWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9))))); INSERT into geo SELECT * FROM pt; INSERT into geo SELECT * FROM ls; INSERT into geo SELECT * FROM p; INSERT into geo SELECT * FROM mpt; INSERT into geo SELECT * FROM mls; INSERT into geo SELECT * FROM mp; INSERT into geo SELECT * FROM gc; SELECT fid, AsText(g) FROM pt; fid AsText(g) 101 POINT(10 10) 102 POINT(20 10) 103 POINT(20 20) 104 POINT(10 20) SELECT fid, AsText(g) FROM ls; fid AsText(g) 105 LINESTRING(0 0,0 10,10 0) 106 LINESTRING(10 10,20 10,20 20,10 20,10 10) 107 LINESTRING(10 10,40 10) SELECT fid, AsText(g) FROM p; fid AsText(g) 108 POLYGON((10 10,20 10,20 20,10 20,10 10)) 109 POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10)) 110 POLYGON((0 0,30 0,30 30,0 0)) SELECT fid, AsText(g) FROM mpt; fid AsText(g) 111 MULTIPOINT(0 0,10 10,10 20,20 20) 112 MULTIPOINT(1 1,11 11,11 21,21 21) 113 MULTIPOINT(3 6,4 10) SELECT fid, AsText(g) FROM mls; fid AsText(g) 114 MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48)) 115 MULTILINESTRING((10 48,10 21,10 0)) 116 MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7)) SELECT fid, AsText(g) FROM mp; fid AsText(g) 117 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18))) 118 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18))) 119 MULTIPOLYGON(((0 3,3 3,3 0,0 3))) SELECT fid, AsText(g) FROM gc; fid AsText(g) 120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10)) 121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9)) SELECT fid, AsText(g) FROM geo; fid AsText(g) 101 POINT(10 10) 102 POINT(20 10) 103 POINT(20 20) 104 POINT(10 20) 105 LINESTRING(0 0,0 10,10 0) 106 LINESTRING(10 10,20 10,20 20,10 20,10 10) 107 LINESTRING(10 10,40 10) 108 POLYGON((10 10,20 10,20 20,10 20,10 10)) 109 POLYGON((0 0,50 0,50 50,0 50,0 0),(10 10,20 10,20 20,10 20,10 10)) 110 POLYGON((0 0,30 0,30 30,0 0)) 111 MULTIPOINT(0 0,10 10,10 20,20 20) 112 MULTIPOINT(1 1,11 11,11 21,21 21) 113 MULTIPOINT(3 6,4 10) 114 MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48)) 115 MULTILINESTRING((10 48,10 21,10 0)) 116 MULTILINESTRING((1 2,3 5),(2 5,5 8,21 7)) 117 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18))) 118 MULTIPOLYGON(((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),((59 18,67 18,67 13,59 13,59 18))) 119 MULTIPOLYGON(((0 3,3 3,3 0,0 3))) 120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10)) 121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9)) SELECT fid, Dimension(g) FROM geo; fid Dimension(g) 101 0 102 0 103 0 104 0 105 1 106 1 107 1 108 2 109 2 110 2 111 0 112 0 113 0 114 1 115 1 116 1 117 2 118 2 119 2 120 1 121 1 SELECT fid, GeometryType(g) FROM geo; fid GeometryType(g) 101 POINT 102 POINT 103 POINT 104 POINT 105 LINESTRING 106 LINESTRING 107 LINESTRING 108 POLYGON 109 POLYGON 110 POLYGON 111 MULTIPOINT 112 MULTIPOINT 113 MULTIPOINT 114 MULTILINESTRING 115 MULTILINESTRING 116 MULTILINESTRING 117 MULTIPOLYGON 118 MULTIPOLYGON 119 MULTIPOLYGON 120 GEOMETRYCOLLECTION 121 GEOMETRYCOLLECTION SELECT fid, IsEmpty(g) FROM geo; fid IsEmpty(g) 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 SELECT fid, AsText(Envelope(g)) FROM geo; fid AsText(Envelope(g)) 101 POLYGON((10 10,10 10,10 10,10 10,10 10)) 102 POLYGON((20 10,20 10,20 10,20 10,20 10)) 103 POLYGON((20 20,20 20,20 20,20 20,20 20)) 104 POLYGON((10 20,10 20,10 20,10 20,10 20)) 105 POLYGON((0 0,10 0,10 10,0 10,0 0)) 106 POLYGON((10 10,20 10,20 20,10 20,10 10)) 107 POLYGON((10 10,40 10,40 10,10 10,10 10)) 108 POLYGON((10 10,20 10,20 20,10 20,10 10)) 109 POLYGON((0 0,50 0,50 50,0 50,0 0)) 110 POLYGON((0 0,30 0,30 30,0 30,0 0)) 111 POLYGON((0 0,20 0,20 20,0 20,0 0)) 112 POLYGON((1 1,21 1,21 21,1 21,1 1)) 113 POLYGON((3 6,4 6,4 10,3 10,3 6)) 114 POLYGON((10 0,16 0,16 48,10 48,10 0)) 115 POLYGON((10 0,10 0,10 48,10 48,10 0)) 116 POLYGON((1 2,21 2,21 8,1 8,1 2)) 117 POLYGON((28 0,84 0,84 42,28 42,28 0)) 118 POLYGON((28 0,84 0,84 42,28 42,28 0)) 119 POLYGON((0 0,3 0,3 3,0 3,0 0)) 120 POLYGON((0 0,10 0,10 10,0 10,0 0)) 121 POLYGON((3 6,44 6,44 9,3 9,3 6)) explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelope(g)) from geo; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE geo ALL NULL NULL NULL NULL 21 Warnings: Note 1003 select high_priority dimension(test.geo.g) AS `Dimension(g)`,geometrytype(test.geo.g) AS `GeometryType(g)`,isempty(test.geo.g) AS `IsEmpty(g)`,astext(envelope(test.geo.g)) AS `AsText(Envelope(g))` from test.geo SELECT fid, X(g) FROM pt; fid X(g) 101 10 102 20 103 20 104 10 SELECT fid, Y(g) FROM pt; fid Y(g) 101 10 102 10 103 20 104 20 explain extended select X(g),Y(g) FROM pt; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE pt ALL NULL NULL NULL NULL 4 Warnings: Note 1003 select high_priority x(test.pt.g) AS `X(g)`,y(test.pt.g) AS `Y(g)` from test.pt SELECT fid, AsText(StartPoint(g)) FROM ls; fid AsText(StartPoint(g)) 105 POINT(0 0) 106 POINT(10 10) 107 POINT(10 10) SELECT fid, AsText(EndPoint(g)) FROM ls; fid AsText(EndPoint(g)) 105 POINT(10 0) 106 POINT(10 10) 107 POINT(40 10) SELECT fid, GLength(g) FROM ls; fid GLength(g) 105 24.142135623731 106 40 107 30 SELECT fid, NumPoints(g) FROM ls; fid NumPoints(g) 105 3 106 5 107 2 SELECT fid, AsText(PointN(g, 2)) FROM ls; fid AsText(PointN(g, 2)) 105 POINT(0 10) 106 POINT(20 10) 107 POINT(40 10) SELECT fid, IsClosed(g) FROM ls; fid IsClosed(g) 105 0 106 1 107 0 explain extended select AsText(StartPoint(g)),AsText(EndPoint(g)),GLength(g),NumPoints(g),AsText(PointN(g, 2)),IsClosed(g) FROM ls; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE ls ALL NULL NULL NULL NULL 3 Warnings: Note 1003 select high_priority astext(startpoint(test.ls.g)) AS `AsText(StartPoint(g))`,astext(endpoint(test.ls.g)) AS `AsText(EndPoint(g))`,glength(test.ls.g) AS `GLength(g)`,numpoints(test.ls.g) AS `NumPoints(g)`,astext(pointn(test.ls.g,2)) AS `AsText(PointN(g, 2))`,isclosed(test.ls.g) AS `IsClosed(g)` from test.ls SELECT fid, AsText(Centroid(g)) FROM p; fid AsText(Centroid(g)) 108 POINT(15 15) 109 POINT(25.416666666667 25.416666666667) 110 POINT(20 10) SELECT fid, Area(g) FROM p; fid Area(g) 108 100 109 2400 110 450 SELECT fid, AsText(ExteriorRing(g)) FROM p; fid AsText(ExteriorRing(g)) 108 LINESTRING(10 10,20 10,20 20,10 20,10 10) 109 LINESTRING(0 0,50 0,50 50,0 50,0 0) 110 LINESTRING(0 0,30 0,30 30,0 0) SELECT fid, NumInteriorRings(g) FROM p; fid NumInteriorRings(g) 108 0 109 1 110 0 SELECT fid, AsText(InteriorRingN(g, 1)) FROM p; fid AsText(InteriorRingN(g, 1)) 108 NULL 109 LINESTRING(10 10,20 10,20 20,10 20,10 10) 110 NULL explain extended select AsText(Centroid(g)),Area(g),AsText(ExteriorRing(g)),NumInteriorRings(g),AsText(InteriorRingN(g, 1)) FROM p; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE p ALL NULL NULL NULL NULL 3 Warnings: Note 1003 select high_priority astext(centroid(test.p.g)) AS `AsText(Centroid(g))`,area(test.p.g) AS `Area(g)`,astext(exteriorring(test.p.g)) AS `AsText(ExteriorRing(g))`,numinteriorrings(test.p.g) AS `NumInteriorRings(g)`,astext(interiorringn(test.p.g,1)) AS `AsText(InteriorRingN(g, 1))` from test.p SELECT fid, IsClosed(g) FROM mls; fid IsClosed(g) 114 0 115 0 116 0 SELECT fid, AsText(Centroid(g)) FROM mp; fid AsText(Centroid(g)) 117 POINT(55.588527753042 17.426536064114) 118 POINT(55.588527753042 17.426536064114) 119 POINT(2 2) SELECT fid, Area(g) FROM mp; fid Area(g) 117 1684.5 118 1684.5 119 4.5 SELECT fid, NumGeometries(g) from mpt; fid NumGeometries(g) 111 4 112 4 113 2 SELECT fid, NumGeometries(g) from mls; fid NumGeometries(g) 114 2 115 1 116 2 SELECT fid, NumGeometries(g) from mp; fid NumGeometries(g) 117 2 118 2 119 1 SELECT fid, NumGeometries(g) from gc; fid NumGeometries(g) 120 2 121 2 explain extended SELECT fid, NumGeometries(g) from mpt; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE mpt ALL NULL NULL NULL NULL 3 Warnings: Note 1003 select high_priority test.mpt.fid AS `fid`,numgeometries(test.mpt.g) AS `NumGeometries(g)` from test.mpt SELECT fid, AsText(GeometryN(g, 2)) from mpt; fid AsText(GeometryN(g, 2)) 111 POINT(10 10) 112 POINT(11 11) 113 POINT(4 10) SELECT fid, AsText(GeometryN(g, 2)) from mls; fid AsText(GeometryN(g, 2)) 114 LINESTRING(16 0,16 23,16 48) 115 NULL 116 LINESTRING(2 5,5 8,21 7) SELECT fid, AsText(GeometryN(g, 2)) from mp; fid AsText(GeometryN(g, 2)) 117 POLYGON((59 18,67 18,67 13,59 13,59 18)) 118 POLYGON((59 18,67 18,67 13,59 13,59 18)) 119 NULL SELECT fid, AsText(GeometryN(g, 2)) from gc; fid AsText(GeometryN(g, 2)) 120 LINESTRING(0 0,10 10) 121 LINESTRING(3 6,7 9) explain extended SELECT fid, AsText(GeometryN(g, 2)) from mpt; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE mpt ALL NULL NULL NULL NULL 3 Warnings: Note 1003 select high_priority test.mpt.fid AS `fid`,astext(geometryn(test.mpt.g,2)) AS `AsText(GeometryN(g, 2))` from test.mpt SELECT g1.fid as first, g2.fid as second, Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o, Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t, Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r FROM gc g1, gc g2 ORDER BY first, second; first second w c o e d t i r 120 120 1 1 0 1 0 0 1 0 120 121 0 0 0 0 0 0 1 0 121 120 0 0 1 0 0 0 1 0 121 121 1 1 0 1 0 0 1 0 explain extended SELECT g1.fid as first, g2.fid as second, Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o, Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t, Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r FROM gc g1, gc g2 ORDER BY first, second; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE g1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort 1 SIMPLE g2 ALL NULL NULL NULL NULL 2 Warnings: Note 1003 select high_priority test.g1.fid AS `first`,test.g2.fid AS `second`,within(test.g1.g,test.g2.g) AS `w`,contains(test.g1.g,test.g2.g) AS `c`,overlaps(test.g1.g,test.g2.g) AS `o`,equals(test.g1.g,test.g2.g) AS `e`,disjoint(test.g1.g,test.g2.g) AS `d`,touches(test.g1.g,test.g2.g) AS `t`,intersects(test.g1.g,test.g2.g) AS `i`,crosses(test.g1.g,test.g2.g) AS `r` from test.gc g1 join test.gc g2 order by test.g1.fid,test.g2.fid DROP TABLE pt, ls, p, mpt, mls, mp, gc, geo; CREATE TABLE g1 ( pt point, ln linestring, pg polygon, mpt multipoint, mln multilinestring, mpg multipolygon, gc geometrycollection, gm geometry ); SHOW FIELDS FROM g1; Field Type Null Key Default Extra pt point YES NULL ln linestring YES NULL pg polygon YES NULL mpt multipoint YES NULL mln multilinestring YES NULL mpg multipolygon YES NULL gc geometrycollection YES NULL gm geometry YES NULL ALTER TABLE g1 ADD fid INT NOT NULL; SHOW FIELDS FROM g1; Field Type Null Key Default Extra pt point YES NULL ln linestring YES NULL pg polygon YES NULL mpt multipoint YES NULL mln multilinestring YES NULL mpg multipolygon YES NULL gc geometrycollection YES NULL gm geometry YES NULL fid int(11) 0 DROP TABLE g1; SELECT AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)')))); AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)')))) POINT(1 4) explain extended SELECT AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)')))); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1003 select high_priority astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)'))))` explain extended SELECT AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)')))); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1003 select high_priority astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))))` SELECT SRID(GeomFromText('LineString(1 1,2 2)',101)); SRID(GeomFromText('LineString(1 1,2 2)',101)) 101 explain extended SELECT SRID(GeomFromText('LineString(1 1,2 2)',101)); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1003 select high_priority srid(geometryfromtext(_latin1'LineString(1 1,2 2)',101)) AS `SRID(GeomFromText('LineString(1 1,2 2)',101))` explain extended select issimple(MultiPoint(Point(3, 6), Point(4, 10))), issimple(Point(3, 6)); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1003 select high_priority issimple(multipoint(point(3,6),point(4,10))) AS `issimple(MultiPoint(Point(3, 6), Point(4, 10)))`,issimple(point(3,6)) AS `issimple(Point(3, 6))`