--- /dev/null
+-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+--
+-- PostGIS - Spatial Types for PostgreSQL
+-- http://postgis.refractions.net
+--
+-- Copyright (C) 2011 Sandro Santilli <strk@keybit.net>
+--
+-- This is free software; you can redistribute and/or modify it under
+-- the terms of the GNU General Public Licence. See the COPYING file.
+--
+-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+-- {
+-- Override geometrytype() for topogeometry objects
+--
+-- Note: For performance reasons, this function always assumes
+-- TopoGeometry are of the MULTI type. This may not always
+-- be the case if you convert the TopoGeometry to an actual
+-- Geometry.
+--
+-- }{
+CREATE OR REPLACE FUNCTION topology.GeometryType(tg topology.TopoGeometry)
+ RETURNS text
+AS
+$$
+ SELECT CASE
+ WHEN type($1) = 1 THEN 'MULTIPOINT'
+ WHEN type($1) = 2 THEN 'MULTILINESTRING'
+ WHEN type($1) = 3 THEN 'MULTIPOLYGON'
+ WHEN type($1) = 4 THEN 'GEOMETRYCOLLECTION'
+ ELSE 'UNEXPECTED'
+ END;
+$$
+LANGUAGE 'SQL' STABLE STRICT;
+-- }
+
+-- {
+-- Override st_geometrytype() for topogeometry objects
+--
+-- Note: For performance reasons, this function always assumes
+-- TopoGeometry are of the MULTI type. This may not always
+-- be the case if you convert the TopoGeometry to an actual
+-- Geometry.
+--
+-- }{
+CREATE OR REPLACE FUNCTION topology.ST_GeometryType(tg topology.TopoGeometry)
+ RETURNS text
+AS
+$$
+ SELECT CASE
+ WHEN type($1) = 1 THEN 'ST_MultiPoint'
+ WHEN type($1) = 2 THEN 'ST_MultiLinestring'
+ WHEN type($1) = 3 THEN 'ST_MultiPolygon'
+ WHEN type($1) = 4 THEN 'ST_GeometryCollection'
+ ELSE 'ST_Unexpected'
+ END;
+$$
+LANGUAGE 'SQL' STABLE STRICT;
+-- }
topo_predicates.sql: predicates.sql.in
- @cpp -P -traditional-cpp predicates.sql.in | sed -e 's:@COLUMN@:feature:g;s:@SCHEMA@:topology.:g' > topo_predicates.sql
+ cpp -P -traditional-cpp predicates.sql.in | sed -e 's:@COLUMN@:feature:g;s:@SCHEMA@:topology.:g' > topo_predicates.sql
load_topology.sql: load_topology.sql.in
@cpp -P -traditional-cpp load_topology.sql.in | sed -e 's:@SRID@:-1:g' > load_topology.sql
regress/st_getfaceedges.sql \
regress/st_modedgeheal.sql \
regress/st_newedgeheal.sql \
- regress/st_remedgenewface.sql \
- regress/st_remedgemodface.sql \
+ regress/st_remedgenewface.sql \
+ regress/st_remedgemodface.sql \
regress/topoelement.sql \
regress/topoelementarray_agg.sql \
+ regress/topogeometry_type.sql \
regress/topo2.5d.sql \
regress/droptopology.sql \
regress/copytopology.sql \
'city_data', -- Topology name
3, -- Topology geometry type (polygon/multipolygon)
(SELECT layer_id FROM topology.layer WHERE table_name = 'big_parcels'),
- '{{6,1},{7,1}}')); -- F3 and F6
+ (SELECT topoelementarray_agg(ARRAY[id(feature), 1])
+ FROM features.land_parcels
+ WHERE feature_name in ('F3','F6'))
+ ));
--
-- Streets
--- /dev/null
+set client_min_messages to WARNING;
+
+\i load_topology.sql
+\i load_features.sql
+\i more_features.sql
+\i hierarchy.sql
+
+SELECT DISTINCT 'GeometryType(traffic_signs)',
+ geometrytype(feature) FROM features.traffic_signs;
+SELECT DISTINCT 'ST_GeometryType(traffic_signs)',
+ st_geometrytype(feature) FROM features.traffic_signs;
+
+SELECT DISTINCT 'GeometryType(city_streets)',
+ geometrytype(feature) FROM features.city_streets;
+SELECT DISTINCT 'ST_GeometryType(city_streets)',
+ st_geometrytype(feature) FROM features.city_streets;
+
+SELECT DISTINCT 'GeometryType(land_parcels)',
+ geometrytype(feature) FROM features.land_parcels;
+SELECT DISTINCT 'ST_GeometryType(land_parcels)',
+ st_geometrytype(feature) FROM features.land_parcels;
+
+SELECT DISTINCT 'GeometryType(big_signs)',
+ geometrytype(feature) FROM features.big_signs;
+SELECT DISTINCT 'ST_GeometryType(big_signs)',
+ st_geometrytype(feature) FROM features.big_signs;
+
+SELECT DISTINCT 'GeometryType(big_streets)',
+ geometrytype(feature) FROM features.big_streets;
+SELECT DISTINCT 'ST_GeometryType(big_streets)',
+ st_geometrytype(feature) FROM features.big_streets;
+
+SELECT DISTINCT 'GeometryType(big_parcels)',
+ geometrytype(feature) FROM features.big_parcels;
+SELECT DISTINCT 'ST_GeometryType(big_parcels)',
+ st_geometrytype(feature) FROM features.big_parcels;
+
+SELECT topology.DropTopology('city_data');
+DROP SCHEMA features CASCADE;
--- /dev/null
+BEGIN
+t
+9
+22
+26
+COMMIT
+BEGIN
+1
+2
+3
+COMMIT
+4
+features.big_parcels.the_geom SRID:0 TYPE:MULTIPOLYGON DIMS:2
+5
+6
+features.big_signs.the_geom SRID:0 TYPE:MULTIPOINT DIMS:2
+GeometryType(traffic_signs)|MULTIPOINT
+ST_GeometryType(traffic_signs)|ST_MultiPoint
+GeometryType(city_streets)|MULTILINESTRING
+ST_GeometryType(city_streets)|ST_MultiLinestring
+GeometryType(land_parcels)|MULTIPOLYGON
+ST_GeometryType(land_parcels)|ST_MultiPolygon
+GeometryType(big_signs)|MULTIPOINT
+ST_GeometryType(big_signs)|ST_MultiPoint
+GeometryType(big_streets)|MULTILINESTRING
+ST_GeometryType(big_streets)|ST_MultiLinestring
+GeometryType(big_parcels)|MULTIPOLYGON
+ST_GeometryType(big_parcels)|ST_MultiPolygon
+Topology 'city_data' dropped
-- TopoElement
#include "sql/topoelement/topoelement_agg.sql"
+-- TopoGeometry
+#include "sql/topogeometry/type.sql"
+
-- GML
#include "sql/gml.sql"