DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; DROP DATABASE IF EXISTS gis_ogs; CREATE DATABASE gis_ogs; CREATE TABLE gis_point (fid , g POINT, g(g(128))) ENGINE= ; CREATE TABLE gis_line (fid , g LINESTRING, g(g(256))) ENGINE= ; CREATE TABLE gis_polygon (fid , g POLYGON, g(g(512))) ENGINE= ; CREATE TABLE gis_multi_point (fid , g MULTIPOINT, g(g(128))) ENGINE= ; CREATE TABLE gis_multi_line (fid , g MULTILINESTRING, g(g(256))) ENGINE= ; CREATE TABLE gis_multi_polygon (fid , g MULTIPOLYGON) ENGINE= ; CREATE TABLE gis_geometrycollection (fid , g GEOMETRYCOLLECTION) ENGINE= ; CREATE TABLE gis_geometry (fid , g GEOMETRY) ENGINE= ; USE gis_ogs; CREATE TABLE lakes (fid INT , name CHAR(64) , shore POLYGON, s(shore(64))) ENGINE= ; CREATE TABLE road_segments (fid INT , name CHAR(64) , aliases CHAR(64) , num_lanes INT , centerline LINESTRING, c(centerline(128))) ENGINE= ; CREATE TABLE divided_routes (fid INT , name CHAR(64) , num_lanes INT , centerlines MULTILINESTRING, c(centerlines(512))) ENGINE= ; CREATE TABLE forests (fid INT , name CHAR(64) , boundary MULTIPOLYGON, b(boundary(128))) ENGINE= ; CREATE TABLE bridges (fid INT , name CHAR(64) , position POINT, p(`position`(64))) ENGINE= ; CREATE TABLE streams (fid INT , name CHAR(64) , centerline LINESTRING, c(centerline(256))) ENGINE= ; CREATE TABLE buildings (fid INT , name CHAR(64) , position POINT, footprint POLYGON, p(`position`(64)), f(footprint(128))) ENGINE= ; CREATE TABLE ponds (fid INT , name CHAR(64) , type CHAR(64) , shores MULTIPOLYGON, s(shores(256))) ENGINE= ; CREATE TABLE named_places (fid INT , name CHAR(64) , boundary POLYGON, b(boundary(512))) ENGINE= ; CREATE TABLE map_neatlines (fid INT , neatline POLYGON, n(neatline(700))) ENGINE= ; USE test; SHOW FIELDS FROM gis_point; Field Type Null Key Default Extra fid int(11) YES NULL g point YES MUL NULL SHOW FIELDS FROM gis_line; Field Type Null Key Default Extra fid int(11) YES NULL g linestring YES MUL NULL SHOW FIELDS FROM gis_polygon; Field Type Null Key Default Extra fid int(11) YES NULL g polygon YES MUL NULL SHOW FIELDS FROM gis_multi_point; Field Type Null Key Default Extra fid int(11) YES NULL g multipoint YES MUL NULL SHOW FIELDS FROM gis_multi_line; Field Type Null Key Default Extra fid int(11) YES NULL g multilinestring YES MUL NULL SHOW FIELDS FROM gis_multi_polygon; Field Type Null Key Default Extra fid int(11) YES NULL g multipolygon YES NULL SHOW FIELDS FROM gis_geometrycollection; Field Type Null Key Default Extra fid int(11) YES NULL g geometrycollection YES NULL SHOW FIELDS FROM gis_geometry; Field Type Null Key Default Extra fid int(11) YES NULL g geometry YES NULL INSERT INTO gis_point (fid,g) 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 gis_line (fid,g) 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(AsWKB(LineString(Point(10, 10), Point(40, 10))))); INSERT INTO gis_polygon (fid,g) 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(AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0)))))); INSERT INTO gis_multi_point (fid,g) 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(AsWKB(MultiPoint(Point(3, 6), Point(4, 10))))); INSERT INTO gis_multi_line (fid,g) 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(AsWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7)))))); INSERT INTO gis_multi_polygon (fid,g) 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(AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))))))); INSERT INTO gis_geometrycollection (fid,g) VALUES (120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), (121, GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))))), (122, GeomFromText('GeometryCollection()')), (123, GeomFromText('GeometryCollection EMPTY')); INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_point; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_line; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_polygon; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_multi_point; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_multi_line; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_multi_polygon; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_geometrycollection; SELECT fid, AsText(g) FROM gis_point; fid AsText(g) 101 POINT(10 10) 102 POINT(20 10) 103 POINT(20 20) 104 POINT(10 20) SELECT fid, AsText(g) FROM gis_line; 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 gis_polygon; 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 gis_multi_point; 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 gis_multi_line; 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 gis_multi_polygon; 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 gis_geometrycollection; fid AsText(g) 120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10)) 121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9)) 122 GEOMETRYCOLLECTION EMPTY 123 GEOMETRYCOLLECTION EMPTY SELECT fid, AsText(g) FROM gis_geometry; 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)) 122 GEOMETRYCOLLECTION EMPTY 123 GEOMETRYCOLLECTION EMPTY SELECT fid, Dimension(g) FROM gis_geometry; 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 122 0 123 0 SELECT fid, GeometryType(g) FROM gis_geometry; 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 122 GEOMETRYCOLLECTION 123 GEOMETRYCOLLECTION SELECT fid, IsEmpty(g) FROM gis_geometry; 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 122 0 123 0 SELECT fid, AsText(Envelope(g)) FROM gis_geometry; 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)) 122 GEOMETRYCOLLECTION EMPTY 123 GEOMETRYCOLLECTION EMPTY SELECT fid, X(g) FROM gis_point; fid X(g) 101 10 102 20 103 20 104 10 SELECT fid, Y(g) FROM gis_point; fid Y(g) 101 10 102 10 103 20 104 20 SELECT fid, AsText(StartPoint(g)) FROM gis_line; fid AsText(StartPoint(g)) 105 POINT(0 0) 106 POINT(10 10) 107 POINT(10 10) SELECT fid, AsText(EndPoint(g)) FROM gis_line; fid AsText(EndPoint(g)) 105 POINT(10 0) 106 POINT(10 10) 107 POINT(40 10) SELECT fid, GLength(g) FROM gis_line; fid GLength(g) 105 24.14213562373095 106 40 107 30 SELECT fid, NumPoints(g) FROM gis_line; fid NumPoints(g) 105 3 106 5 107 2 SELECT fid, AsText(PointN(g, 2)) FROM gis_line; fid AsText(PointN(g, 2)) 105 POINT(0 10) 106 POINT(20 10) 107 POINT(40 10) SELECT fid, IsClosed(g) FROM gis_line; fid IsClosed(g) 105 0 106 1 107 0 SELECT fid, AsText(Centroid(g)) FROM gis_polygon; fid AsText(Centroid(g)) 108 POINT(15 15) 109 POINT(25.416666666666668 25.416666666666668) 110 POINT(20 10) SELECT fid, Area(g) FROM gis_polygon; fid Area(g) 108 100 109 2400 110 450 SELECT fid, AsText(ExteriorRing(g)) FROM gis_polygon; 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 gis_polygon; fid NumInteriorRings(g) 108 0 109 1 110 0 SELECT fid, AsText(InteriorRingN(g, 1)) FROM gis_polygon; fid AsText(InteriorRingN(g, 1)) 108 NULL 109 LINESTRING(10 10,20 10,20 20,10 20,10 10) 110 NULL SELECT fid, IsClosed(g) FROM gis_multi_line; fid IsClosed(g) 114 0 115 0 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; fid AsText(Centroid(g)) 117 POINT(57.98031067576927 17.854754130800433) 118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon; fid Area(g) 117 1684.5 118 1684.5 119 4.5 SELECT fid, NumGeometries(g) from gis_multi_point; fid NumGeometries(g) 111 4 112 4 113 2 SELECT fid, NumGeometries(g) from gis_multi_line; fid NumGeometries(g) 114 2 115 1 116 2 SELECT fid, NumGeometries(g) from gis_multi_polygon; fid NumGeometries(g) 117 2 118 2 119 1 SELECT fid, NumGeometries(g) from gis_geometrycollection; fid NumGeometries(g) 120 2 121 2 122 0 123 0 SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point; fid AsText(GeometryN(g, 2)) 111 POINT(10 10) 112 POINT(11 11) 113 POINT(4 10) SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_line; 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 gis_multi_polygon; 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 gis_geometrycollection; fid AsText(GeometryN(g, 2)) 120 LINESTRING(0 0,10 10) 121 LINESTRING(3 6,7 9) 122 NULL 123 NULL SELECT fid, AsText(GeometryN(g, 1)) from gis_geometrycollection; fid AsText(GeometryN(g, 1)) 120 POINT(0 0) 121 POINT(44 6) 122 NULL 123 NULL 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 gis_geometrycollection g1, gis_geometrycollection 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 1 0 0 0 1 0 120 122 NULL NULL NULL NULL NULL NULL NULL NULL 120 123 NULL NULL NULL NULL NULL NULL NULL NULL 121 120 0 0 1 0 0 0 1 0 121 121 1 1 0 1 0 0 1 0 121 122 NULL NULL NULL NULL NULL NULL NULL NULL 121 123 NULL NULL NULL NULL NULL NULL NULL NULL 122 120 NULL NULL NULL NULL NULL NULL NULL NULL 122 121 NULL NULL NULL NULL NULL NULL NULL NULL 122 122 NULL NULL NULL NULL NULL NULL NULL NULL 122 123 NULL NULL NULL NULL NULL NULL NULL NULL 123 120 NULL NULL NULL NULL NULL NULL NULL NULL 123 121 NULL NULL NULL NULL NULL NULL NULL NULL 123 122 NULL NULL NULL NULL NULL NULL NULL NULL 123 123 NULL NULL NULL NULL NULL NULL NULL NULL DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; USE gis_ogs; # Lakes INSERT INTO lakes (fid,name,shore) VALUES ( 101, 'BLUE LAKE', PolyFromText( 'POLYGON( (52 18,66 23,73 9,48 6,52 18), (59 18,67 18,67 13,59 13,59 18) )', 101)); # Road Segments INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(102, 'Route 5', NULL, 2, LineFromText( 'LINESTRING( 0 18, 10 21, 16 23, 28 26, 44 31 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(103, 'Route 5', 'Main Street', 4, LineFromText( 'LINESTRING( 44 31, 56 34, 70 38 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(104, 'Route 5', NULL, 2, LineFromText( 'LINESTRING( 70 38, 72 48 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(105, 'Main Street', NULL, 4, LineFromText( 'LINESTRING( 70 38, 84 42 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(106, 'Dirt Road by Green Forest', NULL, 1, LineFromText( 'LINESTRING( 28 26, 28 0 )',101)); # DividedRoutes INSERT INTO divided_routes (fid,name,num_lanes,centerlines) VALUES(119, 'Route 75', 4, MLineFromText( 'MULTILINESTRING((10 48,10 21,10 0), (16 0,16 23,16 48))', 101)); # Forests INSERT INTO forests (fid,name,boundary) VALUES(109, 'Green Forest', 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)))', 101)); # Bridges INSERT INTO bridges (fid,name,position) VALUES(110, 'Cam Bridge', PointFromText( 'POINT( 44 31 )', 101)); # Streams INSERT INTO streams (fid,name,centerline) VALUES(111, 'Cam Stream', LineFromText( 'LINESTRING( 38 48, 44 41, 41 36, 44 31, 52 18 )', 101)); INSERT INTO streams (fid,name,centerline) VALUES(112, NULL, LineFromText( 'LINESTRING( 76 0, 78 4, 73 9 )', 101)); # Buildings INSERT INTO buildings (fid,name,position,footprint) VALUES(113, '123 Main Street', PointFromText( 'POINT( 52 30 )', 101), PolyFromText( 'POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )', 101)); INSERT INTO buildings (fid,name,position,footprint) VALUES(114, '215 Main Street', PointFromText( 'POINT( 64 33 )', 101), PolyFromText( 'POLYGON( ( 66 34, 62 34, 62 32, 66 32, 66 34) )', 101)); # Ponds INSERT INTO ponds (fid,name,type,shores) VALUES(120, NULL, 'Stock Pond', MPolyFromText( 'MULTIPOLYGON( ( ( 24 44, 22 42, 24 40, 24 44) ), ( ( 26 44, 26 40, 28 42, 26 44) ) )', 101)); # Named Places INSERT INTO named_places (fid,name,boundary) VALUES(117, 'Ashton', PolyFromText( 'POLYGON( ( 62 48, 84 48, 84 30, 56 30, 56 34, 62 48) )', 101)); INSERT INTO named_places (fid,name,boundary) VALUES(118, 'Goose Island', PolyFromText( 'POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )', 101)); # Map Neatlines INSERT INTO map_neatlines (fid,neatline) VALUES(115, PolyFromText( 'POLYGON( ( 0 0, 0 48, 84 48, 84 0, 0 0 ) )', 101)); SELECT Dimension(shore) FROM lakes WHERE name = 'Blue Lake'; Dimension(shore) 2 SELECT GeometryType(centerlines) FROM divided_routes WHERE name = 'Route 75'; GeometryType(centerlines) MULTILINESTRING SELECT AsText(boundary) FROM named_places WHERE name = 'Goose Island'; AsText(boundary) POLYGON((67 13,67 18,59 18,59 13,67 13)) SELECT AsText(PolyFromWKB(AsBinary(boundary),101)) FROM named_places WHERE name = 'Goose Island'; AsText(PolyFromWKB(AsBinary(boundary),101)) POLYGON((67 13,67 18,59 18,59 13,67 13)) SELECT SRID(boundary) FROM named_places WHERE name = 'Goose Island'; SRID(boundary) 101 SELECT IsEmpty(centerline) FROM road_segments WHERE name = 'Route 5' AND aliases = 'Main Street'; IsEmpty(centerline) 0 SELECT AsText(Envelope(boundary)) FROM named_places WHERE name = 'Goose Island'; AsText(Envelope(boundary)) POLYGON((59 13,67 13,67 18,59 18,59 13)) SELECT X(position) FROM bridges WHERE name = 'Cam Bridge'; X(position) 44 SELECT Y(position) FROM bridges WHERE name = 'Cam Bridge'; Y(position) 31 SELECT AsText(StartPoint(centerline)) FROM road_segments WHERE fid = 102; AsText(StartPoint(centerline)) POINT(0 18) SELECT AsText(EndPoint(centerline)) FROM road_segments WHERE fid = 102; AsText(EndPoint(centerline)) POINT(44 31) SELECT GLength(centerline) FROM road_segments WHERE fid = 106; GLength(centerline) 26 SELECT NumPoints(centerline) FROM road_segments WHERE fid = 102; NumPoints(centerline) 5 SELECT AsText(PointN(centerline, 1)) FROM road_segments WHERE fid = 102; AsText(PointN(centerline, 1)) POINT(0 18) SELECT AsText(Centroid(boundary)) FROM named_places WHERE name = 'Goose Island'; AsText(Centroid(boundary)) POINT(63 15.5) SELECT Area(boundary) FROM named_places WHERE name = 'Goose Island'; Area(boundary) 40 SELECT AsText(ExteriorRing(shore)) FROM lakes WHERE name = 'Blue Lake'; AsText(ExteriorRing(shore)) LINESTRING(52 18,66 23,73 9,48 6,52 18) SELECT NumInteriorRings(shore) FROM lakes WHERE name = 'Blue Lake'; NumInteriorRings(shore) 1 SELECT AsText(InteriorRingN(shore, 1)) FROM lakes WHERE name = 'Blue Lake'; AsText(InteriorRingN(shore, 1)) LINESTRING(59 18,67 18,67 13,59 13,59 18) SELECT NumGeometries(centerlines) FROM divided_routes WHERE name = 'Route 75'; NumGeometries(centerlines) 2 SELECT AsText(GeometryN(centerlines, 2)) FROM divided_routes WHERE name = 'Route 75'; AsText(GeometryN(centerlines, 2)) LINESTRING(16 0,16 23,16 48) SELECT IsClosed(centerlines) FROM divided_routes WHERE name = 'Route 75'; IsClosed(centerlines) 0 SELECT GLength(centerlines) FROM divided_routes WHERE name = 'Route 75'; GLength(centerlines) 96 SELECT AsText(Centroid(shores)) FROM ponds WHERE fid = 120; AsText(Centroid(shores)) POINT(25 42) SELECT Area(shores) FROM ponds WHERE fid = 120; Area(shores) 8 SELECT ST_Equals(boundary, PolyFromText('POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )',1)) FROM named_places WHERE name = 'Goose Island'; ST_Equals(boundary, PolyFromText('POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )',1)) 1 SELECT ST_Disjoint(centerlines, boundary) FROM divided_routes, named_places WHERE divided_routes.name = 'Route 75' AND named_places.name = 'Ashton'; ST_Disjoint(centerlines, boundary) 1 SELECT ST_Touches(centerline, shore) FROM streams, lakes WHERE streams.name = 'Cam Stream' AND lakes.name = 'Blue Lake'; ST_Touches(centerline, shore) 1 SELECT Crosses(road_segments.centerline, divided_routes.centerlines) FROM road_segments, divided_routes WHERE road_segments.fid = 102 AND divided_routes.name = 'Route 75'; Crosses(road_segments.centerline, divided_routes.centerlines) 1 SELECT ST_Intersects(road_segments.centerline, divided_routes.centerlines) FROM road_segments, divided_routes WHERE road_segments.fid = 102 AND divided_routes.name = 'Route 75'; ST_Intersects(road_segments.centerline, divided_routes.centerlines) 1 SELECT ST_Contains(forests.boundary, named_places.boundary) FROM forests, named_places WHERE forests.name = 'Green Forest' AND named_places.name = 'Ashton'; ST_Contains(forests.boundary, named_places.boundary) 0 SELECT ST_Distance(position, boundary) FROM bridges, named_places WHERE bridges.name = 'Cam Bridge' AND named_places.name = 'Ashton'; ST_Distance(position, boundary) 12 SELECT AsText(ST_Difference(named_places.boundary, forests.boundary)) FROM named_places, forests WHERE named_places.name = 'Ashton' AND forests.name = 'Green Forest'; AsText(ST_Difference(named_places.boundary, forests.boundary)) POLYGON((56 34,62 48,84 48,84 42,56 34)) SELECT AsText(ST_Union(shore, boundary)) FROM lakes, named_places WHERE lakes.name = 'Blue Lake' AND named_places.name = 'Goose Island'; AsText(ST_Union(shore, boundary)) POLYGON((48 6,52 18,66 23,73 9,48 6)) SELECT AsText(ST_SymDifference(shore, boundary)) FROM lakes, named_places WHERE lakes.name = 'Blue Lake' AND named_places.name = 'Ashton'; AsText(ST_SymDifference(shore, boundary)) MULTIPOLYGON(((48 6,52 18,66 23,73 9,48 6),(59 13,59 18,67 18,67 13,59 13)),((56 30,56 34,62 48,84 48,84 30,56 30))) SELECT count(*) FROM buildings, bridges WHERE ST_Contains(ST_Buffer(bridges.position, 15.0), buildings.footprint) = 1; count(*) 1 DROP DATABASE gis_ogs; USE test; DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; DROP DATABASE IF EXISTS gis_ogs; CREATE DATABASE gis_ogs; CREATE TABLE gis_point (fid , g POINT NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_line (fid , g LINESTRING NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_polygon (fid , g POLYGON NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_multi_point (fid , g MULTIPOINT NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_multi_line (fid , g MULTILINESTRING NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_multi_polygon (fid , g MULTIPOLYGON NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_geometrycollection (fid , g GEOMETRYCOLLECTION NOT NULL, SPATIAL INDEX(g)) ENGINE= ; CREATE TABLE gis_geometry (fid , g GEOMETRY NOT NULL) ENGINE= ; USE gis_ogs; CREATE TABLE lakes (fid INT , name CHAR(64) , shore POLYGON NOT NULL, SPATIAL INDEX s(shore)) ENGINE= ; CREATE TABLE road_segments (fid INT , name CHAR(64) , aliases CHAR(64) , num_lanes INT , centerline LINESTRING NOT NULL, SPATIAL INDEX c(centerline)) ENGINE= ; CREATE TABLE divided_routes (fid INT , name CHAR(64) , num_lanes INT , centerlines MULTILINESTRING NOT NULL, SPATIAL INDEX c(centerlines)) ENGINE= ; CREATE TABLE forests (fid INT , name CHAR(64) , boundary MULTIPOLYGON NOT NULL, SPATIAL INDEX b(boundary)) ENGINE= ; CREATE TABLE bridges (fid INT , name CHAR(64) , position POINT NOT NULL, SPATIAL INDEX p(position)) ENGINE= ; CREATE TABLE streams (fid INT , name CHAR(64) , centerline LINESTRING NOT NULL, SPATIAL INDEX c(centerline)) ENGINE= ; CREATE TABLE buildings (fid INT , name CHAR(64) , position POINT NOT NULL, footprint POLYGON NOT NULL, SPATIAL INDEX p(position), SPATIAL INDEX f(footprint)) ENGINE= ; CREATE TABLE ponds (fid INT , name CHAR(64) , type CHAR(64) , shores MULTIPOLYGON NOT NULL, SPATIAL INDEX s(shores)) ENGINE= ; CREATE TABLE named_places (fid INT , name CHAR(64) , boundary POLYGON NOT NULL, SPATIAL INDEX b(boundary)) ENGINE= ; CREATE TABLE map_neatlines (fid INT , neatline POLYGON NOT NULL, SPATIAL INDEX n(neatline)) ENGINE= ; USE test; SHOW FIELDS FROM gis_point; Field Type Null Key Default Extra fid int(11) YES NULL g point NO MUL NULL SHOW FIELDS FROM gis_line; Field Type Null Key Default Extra fid int(11) YES NULL g linestring NO MUL NULL SHOW FIELDS FROM gis_polygon; Field Type Null Key Default Extra fid int(11) YES NULL g polygon NO MUL NULL SHOW FIELDS FROM gis_multi_point; Field Type Null Key Default Extra fid int(11) YES NULL g multipoint NO MUL NULL SHOW FIELDS FROM gis_multi_line; Field Type Null Key Default Extra fid int(11) YES NULL g multilinestring NO MUL NULL SHOW FIELDS FROM gis_multi_polygon; Field Type Null Key Default Extra fid int(11) YES NULL g multipolygon NO MUL NULL SHOW FIELDS FROM gis_geometrycollection; Field Type Null Key Default Extra fid int(11) YES NULL g geometrycollection NO MUL NULL SHOW FIELDS FROM gis_geometry; Field Type Null Key Default Extra fid int(11) YES NULL g geometry NO NULL INSERT INTO gis_point (fid,g) 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 gis_line (fid,g) 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(AsWKB(LineString(Point(10, 10), Point(40, 10))))); INSERT INTO gis_polygon (fid,g) 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(AsWKB(Polygon(LineString(Point(0, 0), Point(30, 0), Point(30, 30), Point(0, 0)))))); INSERT INTO gis_multi_point (fid,g) 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(AsWKB(MultiPoint(Point(3, 6), Point(4, 10))))); INSERT INTO gis_multi_line (fid,g) 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(AsWKB(MultiLineString(LineString(Point(1, 2), Point(3, 5)), LineString(Point(2, 5), Point(5, 8), Point(21, 7)))))); INSERT INTO gis_multi_polygon (fid,g) 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(AsWKB(MultiPolygon(Polygon(LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3))))))); INSERT INTO gis_geometrycollection (fid,g) VALUES (120, GeomCollFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10 10))')), (121, GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6), LineString(Point(3, 6), Point(7, 9)))))), (122, GeomFromText('GeometryCollection()')), (123, GeomFromText('GeometryCollection EMPTY')); INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_point; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_line; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_polygon; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_multi_point; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_multi_line; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_multi_polygon; INSERT into gis_geometry (fid,g) SELECT fid,g FROM gis_geometrycollection; SELECT fid, AsText(g) FROM gis_point; fid AsText(g) 101 POINT(10 10) 102 POINT(20 10) 103 POINT(20 20) 104 POINT(10 20) SELECT fid, AsText(g) FROM gis_line; 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 gis_polygon; 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 gis_multi_point; 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 gis_multi_line; 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 gis_multi_polygon; 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 gis_geometrycollection; fid AsText(g) 120 GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,10 10)) 121 GEOMETRYCOLLECTION(POINT(44 6),LINESTRING(3 6,7 9)) 122 GEOMETRYCOLLECTION EMPTY 123 GEOMETRYCOLLECTION EMPTY SELECT fid, AsText(g) FROM gis_geometry; 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)) 122 GEOMETRYCOLLECTION EMPTY 123 GEOMETRYCOLLECTION EMPTY SELECT fid, Dimension(g) FROM gis_geometry; 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 122 0 123 0 SELECT fid, GeometryType(g) FROM gis_geometry; 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 122 GEOMETRYCOLLECTION 123 GEOMETRYCOLLECTION SELECT fid, IsEmpty(g) FROM gis_geometry; 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 122 0 123 0 SELECT fid, AsText(Envelope(g)) FROM gis_geometry; 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)) 122 GEOMETRYCOLLECTION EMPTY 123 GEOMETRYCOLLECTION EMPTY SELECT fid, X(g) FROM gis_point; fid X(g) 101 10 102 20 103 20 104 10 SELECT fid, Y(g) FROM gis_point; fid Y(g) 101 10 102 10 103 20 104 20 SELECT fid, AsText(StartPoint(g)) FROM gis_line; fid AsText(StartPoint(g)) 105 POINT(0 0) 106 POINT(10 10) 107 POINT(10 10) SELECT fid, AsText(EndPoint(g)) FROM gis_line; fid AsText(EndPoint(g)) 105 POINT(10 0) 106 POINT(10 10) 107 POINT(40 10) SELECT fid, GLength(g) FROM gis_line; fid GLength(g) 105 24.14213562373095 106 40 107 30 SELECT fid, NumPoints(g) FROM gis_line; fid NumPoints(g) 105 3 106 5 107 2 SELECT fid, AsText(PointN(g, 2)) FROM gis_line; fid AsText(PointN(g, 2)) 105 POINT(0 10) 106 POINT(20 10) 107 POINT(40 10) SELECT fid, IsClosed(g) FROM gis_line; fid IsClosed(g) 105 0 106 1 107 0 SELECT fid, AsText(Centroid(g)) FROM gis_polygon; fid AsText(Centroid(g)) 108 POINT(15 15) 109 POINT(25.416666666666668 25.416666666666668) 110 POINT(20 10) SELECT fid, Area(g) FROM gis_polygon; fid Area(g) 108 100 109 2400 110 450 SELECT fid, AsText(ExteriorRing(g)) FROM gis_polygon; 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 gis_polygon; fid NumInteriorRings(g) 108 0 109 1 110 0 SELECT fid, AsText(InteriorRingN(g, 1)) FROM gis_polygon; fid AsText(InteriorRingN(g, 1)) 108 NULL 109 LINESTRING(10 10,20 10,20 20,10 20,10 10) 110 NULL SELECT fid, IsClosed(g) FROM gis_multi_line; fid IsClosed(g) 114 0 115 0 116 0 SELECT fid, AsText(Centroid(g)) FROM gis_multi_polygon; fid AsText(Centroid(g)) 117 POINT(57.98031067576927 17.854754130800433) 118 POINT(57.98031067576927 17.854754130800433) 119 POINT(2 2) SELECT fid, Area(g) FROM gis_multi_polygon; fid Area(g) 117 1684.5 118 1684.5 119 4.5 SELECT fid, NumGeometries(g) from gis_multi_point; fid NumGeometries(g) 111 4 112 4 113 2 SELECT fid, NumGeometries(g) from gis_multi_line; fid NumGeometries(g) 114 2 115 1 116 2 SELECT fid, NumGeometries(g) from gis_multi_polygon; fid NumGeometries(g) 117 2 118 2 119 1 SELECT fid, NumGeometries(g) from gis_geometrycollection; fid NumGeometries(g) 120 2 121 2 122 0 123 0 SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point; fid AsText(GeometryN(g, 2)) 111 POINT(10 10) 112 POINT(11 11) 113 POINT(4 10) SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_line; 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 gis_multi_polygon; 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 gis_geometrycollection; fid AsText(GeometryN(g, 2)) 120 LINESTRING(0 0,10 10) 121 LINESTRING(3 6,7 9) 122 NULL 123 NULL SELECT fid, AsText(GeometryN(g, 1)) from gis_geometrycollection; fid AsText(GeometryN(g, 1)) 120 POINT(0 0) 121 POINT(44 6) 122 NULL 123 NULL 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 gis_geometrycollection g1, gis_geometrycollection 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 1 0 0 0 1 0 120 122 NULL NULL NULL NULL NULL NULL NULL NULL 120 123 NULL NULL NULL NULL NULL NULL NULL NULL 121 120 0 0 1 0 0 0 1 0 121 121 1 1 0 1 0 0 1 0 121 122 NULL NULL NULL NULL NULL NULL NULL NULL 121 123 NULL NULL NULL NULL NULL NULL NULL NULL 122 120 NULL NULL NULL NULL NULL NULL NULL NULL 122 121 NULL NULL NULL NULL NULL NULL NULL NULL 122 122 NULL NULL NULL NULL NULL NULL NULL NULL 122 123 NULL NULL NULL NULL NULL NULL NULL NULL 123 120 NULL NULL NULL NULL NULL NULL NULL NULL 123 121 NULL NULL NULL NULL NULL NULL NULL NULL 123 122 NULL NULL NULL NULL NULL NULL NULL NULL 123 123 NULL NULL NULL NULL NULL NULL NULL NULL DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; USE gis_ogs; # Lakes INSERT INTO lakes (fid,name,shore) VALUES ( 101, 'BLUE LAKE', PolyFromText( 'POLYGON( (52 18,66 23,73 9,48 6,52 18), (59 18,67 18,67 13,59 13,59 18) )', 101)); # Road Segments INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(102, 'Route 5', NULL, 2, LineFromText( 'LINESTRING( 0 18, 10 21, 16 23, 28 26, 44 31 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(103, 'Route 5', 'Main Street', 4, LineFromText( 'LINESTRING( 44 31, 56 34, 70 38 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(104, 'Route 5', NULL, 2, LineFromText( 'LINESTRING( 70 38, 72 48 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(105, 'Main Street', NULL, 4, LineFromText( 'LINESTRING( 70 38, 84 42 )' ,101)); INSERT INTO road_segments (fid,name,aliases,num_lanes,centerline) VALUES(106, 'Dirt Road by Green Forest', NULL, 1, LineFromText( 'LINESTRING( 28 26, 28 0 )',101)); # DividedRoutes INSERT INTO divided_routes (fid,name,num_lanes,centerlines) VALUES(119, 'Route 75', 4, MLineFromText( 'MULTILINESTRING((10 48,10 21,10 0), (16 0,16 23,16 48))', 101)); # Forests INSERT INTO forests (fid,name,boundary) VALUES(109, 'Green Forest', 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)))', 101)); # Bridges INSERT INTO bridges (fid,name,position) VALUES(110, 'Cam Bridge', PointFromText( 'POINT( 44 31 )', 101)); # Streams INSERT INTO streams (fid,name,centerline) VALUES(111, 'Cam Stream', LineFromText( 'LINESTRING( 38 48, 44 41, 41 36, 44 31, 52 18 )', 101)); INSERT INTO streams (fid,name,centerline) VALUES(112, NULL, LineFromText( 'LINESTRING( 76 0, 78 4, 73 9 )', 101)); # Buildings INSERT INTO buildings (fid,name,position,footprint) VALUES(113, '123 Main Street', PointFromText( 'POINT( 52 30 )', 101), PolyFromText( 'POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )', 101)); INSERT INTO buildings (fid,name,position,footprint) VALUES(114, '215 Main Street', PointFromText( 'POINT( 64 33 )', 101), PolyFromText( 'POLYGON( ( 66 34, 62 34, 62 32, 66 32, 66 34) )', 101)); # Ponds INSERT INTO ponds (fid,name,type,shores) VALUES(120, NULL, 'Stock Pond', MPolyFromText( 'MULTIPOLYGON( ( ( 24 44, 22 42, 24 40, 24 44) ), ( ( 26 44, 26 40, 28 42, 26 44) ) )', 101)); # Named Places INSERT INTO named_places (fid,name,boundary) VALUES(117, 'Ashton', PolyFromText( 'POLYGON( ( 62 48, 84 48, 84 30, 56 30, 56 34, 62 48) )', 101)); INSERT INTO named_places (fid,name,boundary) VALUES(118, 'Goose Island', PolyFromText( 'POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )', 101)); # Map Neatlines INSERT INTO map_neatlines (fid,neatline) VALUES(115, PolyFromText( 'POLYGON( ( 0 0, 0 48, 84 48, 84 0, 0 0 ) )', 101)); SELECT Dimension(shore) FROM lakes WHERE name = 'Blue Lake'; Dimension(shore) 2 SELECT GeometryType(centerlines) FROM divided_routes WHERE name = 'Route 75'; GeometryType(centerlines) MULTILINESTRING SELECT AsText(boundary) FROM named_places WHERE name = 'Goose Island'; AsText(boundary) POLYGON((67 13,67 18,59 18,59 13,67 13)) SELECT AsText(PolyFromWKB(AsBinary(boundary),101)) FROM named_places WHERE name = 'Goose Island'; AsText(PolyFromWKB(AsBinary(boundary),101)) POLYGON((67 13,67 18,59 18,59 13,67 13)) SELECT SRID(boundary) FROM named_places WHERE name = 'Goose Island'; SRID(boundary) 101 SELECT IsEmpty(centerline) FROM road_segments WHERE name = 'Route 5' AND aliases = 'Main Street'; IsEmpty(centerline) 0 SELECT AsText(Envelope(boundary)) FROM named_places WHERE name = 'Goose Island'; AsText(Envelope(boundary)) POLYGON((59 13,67 13,67 18,59 18,59 13)) SELECT X(position) FROM bridges WHERE name = 'Cam Bridge'; X(position) 44 SELECT Y(position) FROM bridges WHERE name = 'Cam Bridge'; Y(position) 31 SELECT AsText(StartPoint(centerline)) FROM road_segments WHERE fid = 102; AsText(StartPoint(centerline)) POINT(0 18) SELECT AsText(EndPoint(centerline)) FROM road_segments WHERE fid = 102; AsText(EndPoint(centerline)) POINT(44 31) SELECT GLength(centerline) FROM road_segments WHERE fid = 106; GLength(centerline) 26 SELECT NumPoints(centerline) FROM road_segments WHERE fid = 102; NumPoints(centerline) 5 SELECT AsText(PointN(centerline, 1)) FROM road_segments WHERE fid = 102; AsText(PointN(centerline, 1)) POINT(0 18) SELECT AsText(Centroid(boundary)) FROM named_places WHERE name = 'Goose Island'; AsText(Centroid(boundary)) POINT(63 15.5) SELECT Area(boundary) FROM named_places WHERE name = 'Goose Island'; Area(boundary) 40 SELECT AsText(ExteriorRing(shore)) FROM lakes WHERE name = 'Blue Lake'; AsText(ExteriorRing(shore)) LINESTRING(52 18,66 23,73 9,48 6,52 18) SELECT NumInteriorRings(shore) FROM lakes WHERE name = 'Blue Lake'; NumInteriorRings(shore) 1 SELECT AsText(InteriorRingN(shore, 1)) FROM lakes WHERE name = 'Blue Lake'; AsText(InteriorRingN(shore, 1)) LINESTRING(59 18,67 18,67 13,59 13,59 18) SELECT NumGeometries(centerlines) FROM divided_routes WHERE name = 'Route 75'; NumGeometries(centerlines) 2 SELECT AsText(GeometryN(centerlines, 2)) FROM divided_routes WHERE name = 'Route 75'; AsText(GeometryN(centerlines, 2)) LINESTRING(16 0,16 23,16 48) SELECT IsClosed(centerlines) FROM divided_routes WHERE name = 'Route 75'; IsClosed(centerlines) 0 SELECT GLength(centerlines) FROM divided_routes WHERE name = 'Route 75'; GLength(centerlines) 96 SELECT AsText(Centroid(shores)) FROM ponds WHERE fid = 120; AsText(Centroid(shores)) POINT(25 42) SELECT Area(shores) FROM ponds WHERE fid = 120; Area(shores) 8 SELECT ST_Equals(boundary, PolyFromText('POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )',1)) FROM named_places WHERE name = 'Goose Island'; ST_Equals(boundary, PolyFromText('POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )',1)) 1 SELECT ST_Disjoint(centerlines, boundary) FROM divided_routes, named_places WHERE divided_routes.name = 'Route 75' AND named_places.name = 'Ashton'; ST_Disjoint(centerlines, boundary) 1 SELECT ST_Touches(centerline, shore) FROM streams, lakes WHERE streams.name = 'Cam Stream' AND lakes.name = 'Blue Lake'; ST_Touches(centerline, shore) 1 SELECT Crosses(road_segments.centerline, divided_routes.centerlines) FROM road_segments, divided_routes WHERE road_segments.fid = 102 AND divided_routes.name = 'Route 75'; Crosses(road_segments.centerline, divided_routes.centerlines) 1 SELECT ST_Intersects(road_segments.centerline, divided_routes.centerlines) FROM road_segments, divided_routes WHERE road_segments.fid = 102 AND divided_routes.name = 'Route 75'; ST_Intersects(road_segments.centerline, divided_routes.centerlines) 1 SELECT ST_Contains(forests.boundary, named_places.boundary) FROM forests, named_places WHERE forests.name = 'Green Forest' AND named_places.name = 'Ashton'; ST_Contains(forests.boundary, named_places.boundary) 0 SELECT ST_Distance(position, boundary) FROM bridges, named_places WHERE bridges.name = 'Cam Bridge' AND named_places.name = 'Ashton'; ST_Distance(position, boundary) 12 SELECT AsText(ST_Difference(named_places.boundary, forests.boundary)) FROM named_places, forests WHERE named_places.name = 'Ashton' AND forests.name = 'Green Forest'; AsText(ST_Difference(named_places.boundary, forests.boundary)) POLYGON((56 34,62 48,84 48,84 42,56 34)) SELECT AsText(ST_Union(shore, boundary)) FROM lakes, named_places WHERE lakes.name = 'Blue Lake' AND named_places.name = 'Goose Island'; AsText(ST_Union(shore, boundary)) POLYGON((48 6,52 18,66 23,73 9,48 6)) SELECT AsText(ST_SymDifference(shore, boundary)) FROM lakes, named_places WHERE lakes.name = 'Blue Lake' AND named_places.name = 'Ashton'; AsText(ST_SymDifference(shore, boundary)) MULTIPOLYGON(((48 6,52 18,66 23,73 9,48 6),(59 13,59 18,67 18,67 13,59 13)),((56 30,56 34,62 48,84 48,84 30,56 30))) SELECT count(*) FROM buildings, bridges WHERE ST_Contains(ST_Buffer(bridges.position, 15.0), buildings.footprint) = 1; count(*) 1 DROP DATABASE gis_ogs; USE test;