<paramdef><type>integer </type> <parameter>precision</parameter></paramdef>
<paramdef><type>integer </type> <parameter>options</parameter></paramdef>
</funcprototype>
+ <funcprototype>
+ <funcdef>text <function>ST_AsGML</function></funcdef>
+ <paramdef><type>integer </type> <parameter>version</parameter></paramdef>
+ <paramdef><type>geometry </type> <parameter>g1</parameter></paramdef>
+ <paramdef><type>integer </type> <parameter>precision</parameter></paramdef>
+ <paramdef><type>integer </type> <parameter>options</parameter></paramdef>
+ <paramdef><type>text </type> <parameter>namespace prefix</parameter></paramdef>
+ </funcprototype>
<funcprototype>
<funcdef>text <function>ST_AsGML</function></funcdef>
<paramdef><type>integer </type> <parameter>version</parameter></paramdef>
<funcprototype>
<funcdef>text <function>ST_AsGML</function></funcdef>
<paramdef><type>integer </type> <parameter>version</parameter></paramdef>
- <paramdef><type>geometry </type> <parameter>g1</parameter></paramdef>
+ <paramdef><type>geography </type> <parameter>g1</parameter></paramdef>
<paramdef><type>integer </type> <parameter>precision</parameter></paramdef>
<paramdef><type>integer </type> <parameter>options</parameter></paramdef>
- <paramdef><type>text </type> <parameter>prefix</parameter></paramdef>
+ </funcprototype>
+ <funcprototype>
+ <funcdef>text <function>ST_AsGML</function></funcdef>
+ <paramdef><type>integer </type> <parameter>version</parameter></paramdef>
+ <paramdef><type>geography </type> <parameter>g1</parameter></paramdef>
+ <paramdef><type>integer </type> <parameter>precision</parameter></paramdef>
+ <paramdef><type>integer </type> <parameter>options</parameter></paramdef>
+ <paramdef><type>text </type> <parameter>namespace prefix</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
</itemizedlist>
</para>
- <para>The 'prefix' argument may be used to specify a custom
+ <para>The 'namespace prefix' argument may be used to specify a custom
namespace prefix or no prefix (if empty). If null or omitted 'gml' prefix is used</para>
- <!-- TODO: Itemize defaults for each function -->
-
<note>
<para>Availability: 1.3.2</para>
<para>Availability: 1.5.0 geography support was introduced.</para>
</programlisting>
</refsection>
- <!-- Optionally add a "See Also" section -->
<refsection>
<title>See Also</title>
--
-- _ST_AsGML(version, geography, precision, option)
-CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geography, int4, int4)
+CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geography, int4, int4, text)
RETURNS text
AS 'MODULE_PATHNAME','geography_as_gml'
- LANGUAGE 'C' IMMUTABLE STRICT;
+ LANGUAGE 'C' IMMUTABLE;
-- ST_AsGML(geography, precision) / version=2 options=0
CREATE OR REPLACE FUNCTION ST_AsGML(geography, int4)
RETURNS text
- AS 'SELECT _ST_AsGML(2, $1, $2, 0)'
+ AS 'SELECT _ST_AsGML(2, $1, $2, 0, null)'
LANGUAGE 'SQL' IMMUTABLE STRICT;
-- ST_AsGML(geography) / precision=15 version=2 options=0
CREATE OR REPLACE FUNCTION ST_AsGML(geography)
RETURNS text
- AS 'SELECT _ST_AsGML(2, $1, 15, 0)'
- LANGUAGE 'SQL' IMMUTABLE STRICT;
+ AS 'SELECT _ST_AsGML(2, $1, 15, 0, null)'
+ LANGUAGE 'SQL' IMMUTABLE;
-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
-- TODO Remove in 2.0
-- ST_AsGML(version, geography) / precision=15 version=2 options=0
CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography)
RETURNS text
- AS 'SELECT _ST_AsGML($1, $2, 15, 0)'
+ AS 'SELECT _ST_AsGML($1, $2, 15, 0, null)'
LANGUAGE 'SQL' IMMUTABLE STRICT;
-- ST_AsGML(version, geography, precision) / options = 0
CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4)
RETURNS text
- AS 'SELECT _ST_AsGML($1, $2, $3, 0)'
+ AS 'SELECT _ST_AsGML($1, $2, $3, 0, null)'
LANGUAGE 'SQL' IMMUTABLE STRICT;
-- ST_AsGML (geography, precision, option) / version=2
CREATE OR REPLACE FUNCTION ST_AsGML(geography, int4, int4)
RETURNS text
- AS 'SELECT _ST_AsGML(2, $1, $2, $3)'
+ AS 'SELECT _ST_AsGML(2, $1, $2, $3, null)'
LANGUAGE 'SQL' IMMUTABLE STRICT;
-- ST_AsGML(version, geography, precision, option)
CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4, int4)
RETURNS text
- AS 'SELECT _ST_AsGML($1, $2, $3, $4)'
+ AS 'SELECT _ST_AsGML($1, $2, $3, $4, null)'
+ LANGUAGE 'SQL' IMMUTABLE STRICT;
+
+-- ST_AsGML(version, geography, precision, option, prefix)
+CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4, int4, text)
+ RETURNS text
+ AS 'SELECT _ST_AsGML($1, $2, $3, $4, $5)'
LANGUAGE 'SQL' IMMUTABLE STRICT;
int precision = OUT_MAX_DOUBLE_PRECISION;
int option=0;
int is_deegree=0;
- const char *prefix = "gml:";
+ static const char *default_prefix = "gml:";
+ char *prefixbuf;
+ const char* prefix = default_prefix;
+ text *prefix_text;
+
/* Get the version */
version = PG_GETARG_INT32(0);
if (PG_NARGS() >3 && !PG_ARGISNULL(3))
option = PG_GETARG_INT32(3);
+
+ /* retrieve prefix */
+ if (PG_NARGS() >4 && !PG_ARGISNULL(4))
+ {
+ prefix_text = PG_GETARG_TEXT_P(4);
+ if ( VARSIZE(prefix_text)-VARHDRSZ == 0 )
+ {
+ prefix = "";
+ }
+ else
+ {
+ /* +2 is one for the ':' and one for term null */
+ prefixbuf = palloc(VARSIZE(prefix_text)-VARHDRSZ+2);
+ memcpy(prefixbuf, VARDATA(prefix_text),
+ VARSIZE(prefix_text)-VARHDRSZ);
+ /* add colon and null terminate */
+ prefixbuf[VARSIZE(prefix_text)-VARHDRSZ] = ':';
+ prefixbuf[VARSIZE(prefix_text)-VARHDRSZ+1] = '\0';
+ prefix = prefixbuf;
+ }
+ }
+
if (option & 1) srs = getSRSbySRID(SRID, false);
else srs = getSRSbySRID(SRID, true);
if (!srs)
SELECT 'gml_deegree_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
SELECT 'gml_deegree_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+-- Prefix
+SELECT 'gml_prefix_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
+SELECT 'gml_prefix_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
+SELECT 'gml_prefix_03', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
+SELECT 'gml_prefix_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
+
--
-- KML
gml_deegree_02|<gml:Point srsName="urn:ogc:def:crs:EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
gml_deegree_04|<gml:Point srsName="urn:ogc:def:crs:EPSG:4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
+gml_prefix_01|<Point srsName="EPSG:4326"><coordinates>1,2</coordinates></Point>
+gml_prefix_02|<Point srsName="EPSG:4326"><pos srsDimension="2">1 2</pos></Point>
+gml_prefix_03|<foo:Point srsName="EPSG:4326"><foo:coordinates>1,2</foo:coordinates></foo:Point>
+gml_prefix_04|<foo:Point srsName="EPSG:4326"><foo:pos srsDimension="2">1 2</foo:pos></foo:Point>
ERROR: Only SRID SRID_DEFAULT is currently supported in geography.
kml_srid_02|<Point><coordinates>0,1</coordinates></Point>
kml_empty_geom|
SELECT 'gml_deegree_06', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
-- Prefix
-SELECT 'gml_deegree_01_noprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0, '');
-SELECT 'gml_deegree_01_customprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0, 'custom');
-
-SELECT 'gml_deegree_02_noprefix', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
-SELECT 'gml_deegree_02_customprefix', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'custom');
-
-SELECT 'gml_deegree_03_noprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
-SELECT 'gml_deegree_03_customprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'custom');
-
-SELECT 'gml_deegree_04_noprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0, '');
-SELECT 'gml_deegree_04_customprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0, 'custom');
-
-SELECT 'gml_deegree_05_noprefix', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16, '');
-SELECT 'gml_deegree_05_customprefix', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16, 'custom');
-
-SELECT 'gml_deegree_06_noprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16, '');
-SELECT 'gml_deegree_06_customprefix', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16, 'custom');
+SELECT 'gml_prefix_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
+SELECT 'gml_prefix_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
+SELECT 'gml_prefix_03', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
+SELECT 'gml_prefix_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
--
-- KML
gml_deegree_04|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="3">1 2 3</gml:pos></gml:Point>
gml_deegree_05|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2,3</gml:coordinates></gml:Point>
gml_deegree_06|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="3">2 1 3</gml:pos></gml:Point>
-gml_deegree_01_noprefix|<Point srsName="EPSG:4326"><pos srsDimension="2">1 2</pos></Point>
-gml_deegree_01_customprefix|<custom:Point srsName="EPSG:4326"><custom:pos srsDimension="2">1 2</custom:pos></custom:Point>
-gml_deegree_02_noprefix|<Point srsName="EPSG:4326"><coordinates>1,2</coordinates></Point>
-gml_deegree_02_customprefix|<custom:Point srsName="EPSG:4326"><custom:coordinates>1,2</custom:coordinates></custom:Point>
-gml_deegree_03_noprefix|<Point srsName="EPSG:4326"><pos srsDimension="2">2 1</pos></Point>
-gml_deegree_03_customprefix|<custom:Point srsName="EPSG:4326"><custom:pos srsDimension="2">2 1</custom:pos></custom:Point>
-gml_deegree_04_noprefix|<Point srsName="EPSG:4326"><pos srsDimension="3">1 2 3</pos></Point>
-gml_deegree_04_customprefix|<custom:Point srsName="EPSG:4326"><custom:pos srsDimension="3">1 2 3</custom:pos></custom:Point>
-gml_deegree_05_noprefix|<Point srsName="EPSG:4326"><coordinates>1,2,3</coordinates></Point>
-gml_deegree_05_customprefix|<custom:Point srsName="EPSG:4326"><custom:coordinates>1,2,3</custom:coordinates></custom:Point>
-gml_deegree_06_noprefix|<Point srsName="EPSG:4326"><pos srsDimension="3">2 1 3</pos></Point>
-gml_deegree_06_customprefix|<custom:Point srsName="EPSG:4326"><custom:pos srsDimension="3">2 1 3</custom:pos></custom:Point>
+gml_prefix_01|<Point srsName="EPSG:4326"><coordinates>1,2</coordinates></Point>
+gml_prefix_02|<Point srsName="EPSG:4326"><pos srsDimension="2">2 1</pos></Point>
+gml_prefix_03|<foo:Point srsName="EPSG:4326"><foo:coordinates>1,2</foo:coordinates></foo:Point>
+gml_prefix_04|<foo:Point srsName="EPSG:4326"><foo:pos srsDimension="2">2 1</foo:pos></foo:Point>
ERROR: GetProj4StringSPI: Cannot find SRID (10) in spatial_ref_sys
ERROR: Input geometry has unknown (-1) SRID
kml_empty_geom|