postgis/extras/ogc_test_suite/1_schema.sql
Paul Ramsey 05664e6558 Add official "adaptions" to the files to make them suitable for
submission to the OGC compliance process.


git-svn-id: http://svn.osgeo.org/postgis/trunk@2411 b70326c6-7e19-0410-871a-916f4a2858ee
2006-07-21 21:21:53 +00:00

698 lines
21 KiB
SQL

-- FILE: sqltsch.sql 10/01/98
--
-- 1 2 3 4 5 6 7 8
--345678901234567890123456789012345678901234567890123456789012345678901234567890
--//////////////////////////////////////////////////////////////////////////////
--
-- Copyright 1998, Open GIS Consortium, Inc.
--
-- The material in this document details an Open GIS Consortium Test Suite in
-- accordance with a license that your organization has signed. Please refer
-- to http://www.opengis.org/testing/ to obtain a copy of the general license
-- (it is part of the Conformance Testing Agreement).
--
--//////////////////////////////////////////////////////////////////////////////
--
-- OpenGIS Simple Features for SQL (Types and Functions) Test Suite Software
--
-- This file "sqltsch.sql" is part 1 of a two part standardized test
-- suite in SQL script form. The other file that is required for this test
-- suite, "sqltque.sql", one additional script is provided ("sqltcle.sql") that
-- performs cleanup operations between test runs, and other documents that
-- describe the OGC Conformance Test Program are available via the WWW at
-- http://www.opengis.org/testing/index.htm
--
-- NOTE CONCERNING INFORMATION ON CONFORMANCE TESTING AND THIS TEST SUITE
-- ----------------------------------------------------------------------
--
-- Organizations wishing to submit product for conformance testing should
-- access the above WWW site to discover the proper procedure for obtaining
-- a license to use the OpenGIS(R) certification mark associated with this
-- test suite.
--
--
-- NOTE CONCERNING TEST SUITE ADAPTATION
-- -------------------------------------
--
-- OGC recognizes that many products will have to adapt this test suite to
-- make it work properly. OGC has documented the allowable adaptations within
-- this test suite where possible. Other information about adaptations may be
-- discovered in the Test Suite Guidelines document for this test suite.
--
-- PLEASE NOTE THE OGC REQUIRES THAT ADAPTATIONS ARE FULLY DOCUMENTED USING
-- LIBERAL COMMENT BLOCKS CONFORMING TO THE FOLLOWING FORMAT:
--
-- -- !#@ ADAPTATION BEGIN
-- explanatory text goes here
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- original sql goes here
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
-- adated sql goes here
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
--//////////////////////////////////////////////////////////////////////////////
--
-- BEGIN TEST SUITE CODE
--
--//////////////////////////////////////////////////////////////////////////////
--
-- Create the neccessary feature and geometry tables(views) and metadata tables
-- (views) to load and query the "Blue Lake" test data for OpenGIS Simple
-- Features for SQL (Types and Functions) test.
--
-- Required feature tables (views) are:
-- Lakes
-- Road Segments
-- Divided Routes
-- Buildings
-- Forests
-- Bridges
-- Named Places
-- Streams
-- Ponds
-- Map Neatlines
--
-- Please refer to the Test Suite Guidelines for this test suite for further
-- information concerning this test data.
--
--//////////////////////////////////////////////////////////////////////////////
--
--
--
--//////////////////////////////////////////////////////////////////////////////
--
-- CREATE SPATIAL_REF_SYS METADATA TABLE
--
--//////////////////////////////////////////////////////////////////////////////
--
--
-- *** ADAPTATION ALERT ****
-- Implementations do not need to execute this statement if they already
-- create the spatial_ref_sys table or view via another mechanism.
-- The size of the srtext VARCHAR exceeds that allowed on some systems.
--
-- ---------------------
-- !#@ ADAPTATION BEGIN
-- This table is already defined by PostGIS so we comment it out here.
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
--CREATE TABLE spatial_ref_sys (
-- srid INTEGER NOT NULL PRIMARY KEY,
-- auth_name VARCHAR(256),
-- auth_srid INTEGER,
-- srtext VARCHAR(2048)
-- srtext VARCHAR(2000)
--);
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
INSERT INTO spatial_ref_sys (SRID,AUTH_NAME,AUTH_SRID,SRTEXT)
VALUES (101, 'POSC', 32214,
'PROJCS["UTM_ZONE_14N", GEOGCS["World Geodetic System 72",
DATUM["WGS_72", SPHEROID["NWL_10D", 6378135, 298.26]],
PRIMEM["Greenwich", 0], UNIT["Meter", 1.0]],
PROJECTION["Transverse_Mercator"],
PARAMETER["False_Easting", 500000.0],
PARAMETER["False_Northing", 0.0],
PARAMETER["Central_Meridian", -99.0],
PARAMETER["Scale_Factor", 0.9996],
PARAMETER["Latitude_of_origin", 0.0],
UNIT["Meter", 1.0]]'
);
--
--
--
--//////////////////////////////////////////////////////////////////////////////
--
-- CREATE FEATURE SCHEMA
--
-- *** ADAPTATION ALERT ***
-- The following schema is created using CREATE TABLE statements.
-- Furthermore, it DOES NOT create the GEOMETRY_COLUMNS metadata table.
-- Implementer's should replace the CREATE TABLES below with the mechanism
-- that it uses to create feature tables and the GEOMETRY_COLUMNS table/view
--
--//////////////////////////////////////////////////////////////////////////////
--
--------------------------------------------------------------------------------
--
-- Create feature tables
--
--------------------------------------------------------------------------------
--
-- Lakes
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE lakes (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64),
-- shore POLYGON
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE lakes (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64)
);
SELECT AddGeometryColumn('lakes','shore','101','POLYGON','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Road Segments
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE road_segments (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64),
-- aliases VARCHAR(64),
-- num_lanes INTEGER
-- centerline LINESTRING
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE road_segments (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64),
aliases VARCHAR(64),
num_lanes INTEGER
);
SELECT AddGeometryColumn('road_segments','centerline','101','LINESTRING','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Divided Routes
--
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE divided_routes (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64),
-- num_lanes INTEGER
-- centerlines MULTILINESTRING
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE divided_routes (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64),
num_lanes INTEGER
);
SELECT AddGeometryColumn('divided_routes','centerlines','101','MULTILINESTRING','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Forests
--
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE forests (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64)
-- boundary MULTIPOLYGON
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE forests (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64)
);
SELECT AddGeometryColumn('forests','boundary','101','MULTIPOLYGON','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Bridges
--
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE bridges (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64)
-- position POINT
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE bridges (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64)
);
SELECT AddGeometryColumn('bridges','position','101','POINT','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Streams
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE streams (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64)
-- centerline LINESTRING
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE streams (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64)
);
SELECT AddGeometryColumn('streams','centerline','101','LINESTRING','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Buildings
--
--*** ADAPTATION ALERT ***
-- A view could be used to provide the below semantics without multiple geometry
-- columns in a table. In other words, create two tables. One table would
-- contain the POINT position and the other would create the POLYGON footprint.
-- Then create a view with the semantics of the buildings table below.
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE buildings (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- address VARCHAR(64)
-- position POINT
-- footprint POLYGON
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE buildings (
fid INTEGER NOT NULL PRIMARY KEY,
address VARCHAR(64)
);
SELECT AddGeometryColumn('buildings','position','101','POINT','2');
SELECT AddGeometryColumn('buildings','footprint','101','POLYGON','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Ponds
--
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE ponds (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64),
-- type VARCHAR(64)
-- shores MULTIPOYLGON
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE ponds (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64),
type VARCHAR(64)
);
SELECT AddGeometryColumn('ponds','shores','101','MULTIPOLYGON','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
-- Named Places
--
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE named_places (
-- fid INTEGER NOT NULL PRIMARY KEY,
-- name VARCHAR(64)
-- boundary POLYGON
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE named_places (
fid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(64)
);
SELECT AddGeometryColumn('named_places','boundary','101','POLYGON','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
-- Map Neatline
--
--
--
--
-- !#@ ADAPTATION BEGIN
-- We break the schema creation into two steps, first create the
-- attribute table, second use the AddGeometryColumn() function
-- to create and register the geometry column.
-- ---------------------
-- -- BEGIN ORIGINAL SQL
-- ---------------------
-- CREATE TABLE map_neatlines (
-- fid INTEGER NOT NULL PRIMARY KEY
-- neatline POLYGON
-- );
-- ---------------------
-- -- END ORIGINAL SQL
-- ---------------------
-- ---------------------
-- -- BEGIN ADAPTED SQL
-- ---------------------
CREATE TABLE map_neatlines (
fid INTEGER NOT NULL PRIMARY KEY
);
SELECT AddGeometryColumn('map_neatlines','neatline','101','POLYGON','2');
-- ---------------------
-- -- END ADAPTED SQL
-- ---------------------
-- -- !#@ ADAPTATION END
--
--
--
--//////////////////////////////////////////////////////////////////////////////
--
-- POPULATE GEOMETRY AND FEATURE TABLES
--
-- *** ADAPTATION ALERT ***
-- This script DOES NOT make any inserts into a GEOMTERY_COLUMNS table/view.
-- Implementers should insert whatever makes this happen in their implementation
-- below. Furthermore, the inserts below may be replaced by whatever mechanism
-- may be provided by implementers to insert rows in feature tables such that
-- metadata (and other mechanisms) are updated properly.
--
--//////////////////////////////////////////////////////////////////////////////
--
--==============================================================================
-- Lakes
--
-- We have one lake, Blue Lake. It is a polygon with a hole. Its geometry is
-- described in WKT format as:
-- 'POLYGON( (52 18, 66 23, 73 9, 48 6, 52 18),
-- (59 18, 67 18, 67 13, 59 13, 59 18) )'
--==============================================================================
--
--
INSERT INTO lakes VALUES (101, 'Blue Lake',
PolygonFromText('POLYGON((52 18,66 23,73 9,48 6,52 18),(59 18,67 18,67 13,59 13,59 18))', 101)
);
--
--==================
-- Road segments
--
-- We have five road segments. Their geometries are all linestrings.
-- The geometries are described in WKT format as:
-- name 'Route 5', fid 102
-- 'LINESTRING( 0 18, 10 21, 16 23, 28 26, 44 31 )'
-- name 'Route 5', fid 103
-- 'LINESTRING( 44 31, 56 34, 70 38 )'
-- name 'Route 5', fid 104
-- 'LINESTRING( 70 38, 72 48 )'
-- name 'Main Street', fid 105
-- 'LINESTRING( 70 38, 84 42 )'
-- name 'Dirt Road by Green Forest', fid 106
-- 'LINESTRING( 28 26, 28 0 )'
--
--==================
--
--
INSERT INTO road_segments VALUES(102, 'Route 5', NULL, 2,
LineStringFromText('LINESTRING( 0 18, 10 21, 16 23, 28 26, 44 31 )' ,101)
);
INSERT INTO road_segments VALUES(103, 'Route 5', 'Main Street', 4,
LineStringFromText('LINESTRING( 44 31, 56 34, 70 38 )' ,101)
);
INSERT INTO road_segments VALUES(104, 'Route 5', NULL, 2,
LineStringFromText('LINESTRING( 70 38, 72 48 )' ,101)
);
INSERT INTO road_segments VALUES(105, 'Main Street', NULL, 4,
LineStringFromText('LINESTRING( 70 38, 84 42 )' ,101)
);
INSERT INTO road_segments VALUES(106, 'Dirt Road by Green Forest', NULL, 1,
LineStringFromText('LINESTRING( 28 26, 28 0 )',101)
);
--
--==================
-- DividedRoutes
--
-- We have one divided route. Its geometry is a multilinestring.
-- The geometry is described in WKT format as:
-- 'MULTILINESTRING( (10 48, 10 21, 10 0), (16 0, 10 23, 16 48) )'
--
--==================
--
INSERT INTO divided_routes VALUES(119, 'Route 75', 4,
MultiLineStringFromText('MULTILINESTRING((10 48,10 21,10 0),(16 0,16 23,16 48))', 101)
);
--
--==================
-- Forests
--
-- We have one forest. Its geometry is a multipolygon.
-- The geometry is described in WKT format as:
-- '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) ) )'
--
--==================
--
INSERT INTO forests VALUES(109, 'Green Forest',
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)))', 101)
);
--
--==================
-- Bridges
--
-- We have one bridge. Its geometry is a point.
-- The geometry is described in WKT format as:
-- 'POINT( 44 31 )'
--
--==================
--
INSERT INTO bridges VALUES(110, 'Cam Bridge',
PointFromText('POINT( 44 31 )', 101)
);
--
--==================
-- Streams
--
-- We have two streams. Their geometries are linestrings.
-- The geometries are described in WKT format as:
-- 'LINESTRING( 38 48, 44 41, 41 36, 44 31, 52 18 )'
-- 'LINESTRING( 76 0, 78 4, 73 9 )'
--
--==================
--
INSERT INTO streams VALUES(111, 'Cam Stream',
LineStringFromText('LINESTRING( 38 48, 44 41, 41 36, 44 31, 52 18 )', 101)
);
INSERT INTO streams VALUES(112, NULL,
LineStringFromText('LINESTRING( 76 0, 78 4, 73 9 )', 101)
);
--
--==================
-- Buildings
--
-- We have two buildings. Their geometries are points and polygons.
-- The geometries are described in WKT format as:
-- address '123 Main Street' fid 113
-- 'POINT( 52 30 )' and
-- 'POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )'
-- address '215 Main Street' fid 114
-- 'POINT( 64 33 )' and
-- 'POLYGON( ( 66 34, 62 34, 62 32, 66 32, 66 34) )'
--
--==================
--
INSERT INTO buildings VALUES(113, '123 Main Street',
PointFromText('POINT( 52 30 )', 101),
PolygonFromText('POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )', 101)
);
INSERT INTO buildings VALUES(114, '215 Main Street',
PointFromText('POINT( 64 33 )', 101),
PolygonFromText('POLYGON( ( 66 34, 62 34, 62 32, 66 32, 66 34) )', 101)
);
--
--==================
-- Ponds
--
-- We have one pond. Its geometry is a multipolygon.
-- The geometry is described in WKT format as:
-- 'MULTIPOLYGON( ( ( 24 44, 22 42, 24 40, 24 44) ), ( ( 26 44, 26 40, 28 42, 26 44) ) )'
--
--==================
--
INSERT INTO ponds VALUES(120, NULL, 'Stock Pond',
MultiPolygonFromText('MULTIPOLYGON( ( ( 24 44, 22 42, 24 40, 24 44) ), ( ( 26 44, 26 40, 28 42, 26 44) ) )', 101)
);
--
--==================
-- Named Places
--
-- We have two named places. Their geometries are polygons.
-- The geometries are described in WKT format as:
-- name 'Ashton' fid 117
-- 'POLYGON( ( 62 48, 84 48, 84 30, 56 30, 56 34, 62 48) )'
-- address 'Goose Island' fid 118
-- 'POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )'
--
--==================
--
INSERT INTO named_places VALUES(117, 'Ashton',
PolygonFromText('POLYGON( ( 62 48, 84 48, 84 30, 56 30, 56 34, 62 48) )', 101)
);
INSERT INTO named_places VALUES(118, 'Goose Island',
PolygonFromText('POLYGON( ( 67 13, 67 18, 59 18, 59 13, 67 13) )', 101)
);
--
--==================
-- Map Neatlines
--
-- We have one map neatline. Its geometry is a polygon.
-- The geometry is described in WKT format as:
-- 'POLYGON( ( 0 0, 0 48, 84 48, 84 0, 0 0 ) )'
--
--==================
--
INSERT INTO map_neatlines VALUES(115,
PolygonFromText('POLYGON( ( 0 0, 0 48, 84 48, 84 0, 0 0 ) )', 101)
);
--
--
--
-- end sqltsch.sql