"<custom:MultiGeometry><custom:geometryMember><custom:Point><custom:pos srsDimension=\"2\">0 1</custom:pos></custom:Point></custom:geometryMember><custom:geometryMember><custom:Curve><custom:segments><custom:LineStringSegment><custom:posList srsDimension=\"2\">2 3 4 5</custom:posList></custom:LineStringSegment></custom:segments></custom:Curve></custom:geometryMember></custom:MultiGeometry>",
NULL, 0, 0, "custom:");
-
- /* GML2 - Empty GeometryCollection */
- do_gml2_test_prefix(
- "GEOMETRYCOLLECTION EMPTY",
- "<custom:MultiGeometry/>",
- NULL, 0, "custom:");
-
- /* GML3 - Empty GeometryCollection */
- do_gml3_test_prefix(
- "GEOMETRYCOLLECTION EMPTY",
- "<custom:MultiGeometry/>",
- NULL, 0, 0, "custom:");
-
/* GML2 - Nested GeometryCollection */
do_gml2_test_prefix(
"GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))",
"<MultiGeometry><geometryMember><Point><pos srsDimension=\"2\">0 1</pos></Point></geometryMember><geometryMember><Curve><segments><LineStringSegment><posList srsDimension=\"2\">2 3 4 5</posList></LineStringSegment></segments></Curve></geometryMember></MultiGeometry>",
NULL, 0, 0, "");
-
- /* GML2 - Empty GeometryCollection */
- do_gml2_test_prefix(
- "GEOMETRYCOLLECTION EMPTY",
- "<MultiGeometry/>",
- NULL, 0, "");
-
- /* GML3 - Empty GeometryCollection */
- do_gml3_test_prefix(
- "GEOMETRYCOLLECTION EMPTY",
- "<MultiGeometry/>",
- NULL, 0, 0, "");
-
/* GML2 - Nested GeometryCollection */
do_gml2_test_prefix(
"GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))",
}
-
-static void out_gml_test_empty(void)
-{
- /* POINT EMPTY, GML2 */
- do_gml2_test("POINT EMPTY", "<gml:Point/>", NULL, 0);
-
- /* POINT EMPTY, GML3 */
- do_gml3_test("POINT EMPTY", "<gml:Point/>", NULL, 0, 0);
-
- /* LINESTRING EMPTY, GML2 */
- do_gml2_test("LINESTRING EMPTY", "<gml:LineString/>", NULL, 0);
-
- /* LINESTRING EMPTY, GML3 */
- do_gml3_test("LINESTRING EMPTY", "<gml:Curve/>", NULL, 0, 0);
-
- /* POLYGON EMPTY, GML2 */
- do_gml2_test("POLYGON EMPTY", "<gml:Polygon/>", NULL, 0);
-
- /* POLYGON EMPTY, GML3 */
- do_gml3_test("POLYGON EMPTY", "<gml:Polygon/>", NULL, 0, 0);
-
- /* MULTIPOINT EMPTY, GML2 */
- do_gml2_test("MULTIPOINT EMPTY", "<gml:MultiPoint/>", NULL, 0);
-
- /* MULTIPOINT EMPTY, GML3 */
- do_gml3_test("MULTIPOINT EMPTY", "<gml:MultiPoint/>", NULL, 0, 0);
-
- /* MULTILINESTRING EMPTY, GML2 */
- do_gml2_test("MULTILINESTRING EMPTY", "<gml:MultiLineString/>", NULL, 0);
-
- /* MULTILINESTRING EMPTY, GML3 */
- do_gml3_test("MULTILINESTRING EMPTY", "<gml:MultiCurve/>", NULL, 0, 0);
-
- /* MULTIPOLYGON EMPTY, GML2 */
- do_gml2_test("MULTIPOLYGON EMPTY", "<gml:MultiPolygon/>", NULL, 0);
-
- /* MULTIPOLYGON EMPTY, GML3 */
- do_gml3_test("MULTIPOLYGON EMPTY", "<gml:MultiSurface/>", NULL, 0, 0);
-
- /* GEOMETRYCOLLECTION EMPTY, GML2 */
- do_gml2_test("GEOMETRYCOLLECTION EMPTY", "<gml:MultiGeometry/>", NULL, 0);
-
- /* GEOMETRYCOLLECTION EMPTY, GML3 */
- do_gml3_test("GEOMETRYCOLLECTION EMPTY", "<gml:MultiGeometry/>", NULL, 0, 0);
-
-}
-
-
/*
** Used by test harness to register the tests in this file.
*/
PG_TEST(out_gml_test_geoms_nodims),
PG_TEST(out_gml2_extent),
PG_TEST(out_gml3_extent),
- PG_TEST(out_gml_test_empty),
CU_TEST_INFO_NULL
};
CU_SuiteInfo out_gml_suite = {"out_gml", NULL, NULL, out_gml_tests};
{
int type = geom->type;
+ /* Return null for empty (#1377) */
+ if ( lwgeom_is_empty(geom) )
+ return NULL;
+
switch (type)
{
case POINTTYPE:
{
int type = geom->type;
+ /* Return null for empty (#1377) */
+ if ( lwgeom_is_empty(geom) )
+ return NULL;
+
switch (type)
{
case POINTTYPE:
lwgeom_free(lwgeom);
PG_FREE_IF_COPY(g, 1);
+ /* Return null on null */
+ if ( ! gml )
+ PG_RETURN_NULL();
+
+ /* Turn string result into text for return */
result = cstring2text(gml);
lwfree(gml);
\r
lwgeom = lwgeom_from_gserialized(geom);\r
\r
- if (version == 2 && lwopts & LW_GML_EXTENT)\r
+ if (version == 2 && lwopts & LW_GML_EXTENT)\r
gml = lwgeom_extent_to_gml2(lwgeom, srs, precision, prefix);\r
else if (version == 2)\r
gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);\r
- else if (version == 3 && lwopts & LW_GML_EXTENT)\r
+ else if (version == 3 && lwopts & LW_GML_EXTENT)\r
gml = lwgeom_extent_to_gml3(lwgeom, srs, precision, lwopts, prefix);\r
else if (version == 3) \r
gml = lwgeom_to_gml3(lwgeom, srs, precision, lwopts, prefix);\r
lwgeom_free(lwgeom);\r
PG_FREE_IF_COPY(geom, 1);\r
\r
+ /* Return null on null */\r
+ if ( ! gml )\r
+ PG_RETURN_NULL();\r
+\r
result = cstring2text(gml);\r
lwfree(gml);\r
-\r
PG_RETURN_TEXT_P(result);\r
}\r
\r
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(TINTYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOINTTYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(MULTILINETYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(MULTILINETYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOLYGONTYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(MULTIPOLYGONTYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(POLYHEDRALSURFACETYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
if (is_xlink(xnode)) xnode = get_xlink_node(xnode);
+ parse_gml_srs(xnode, &srs);
+ if (*root_srid == SRID_UNKNOWN && srs.srid != SRID_UNKNOWN)
+ *root_srid = srs.srid;
+
geom = (LWGEOM *)lwcollection_construct_empty(COLLECTIONTYPE, *root_srid, 1, 0);
if (xnode->children == NULL)
T2.2|SRID=4326;POLYGON EMPTY
T2.3|SRID=4326;POLYGON EMPTY
T2.4|4326|POLYGON
-T3.1|<gml:Point/>
-T3.2|<gml:LineString/>
-T3.3|<gml:Polygon/>
-T3.4|<gml:MultiPolygon/>
-T3.5|<gml:MultiLineString/>
-T3.6|<gml:MultiGeometry/>
-T3.7|<gml:Point/>
-T3.8|<gml:Curve/>
-T3.9|<gml:Polygon/>
-T3.10|<gml:MultiSurface/>
-T3.11|<gml:MultiCurve/>
-T3.12|<gml:MultiGeometry/>
-T3.13|<gml:Point/>
-T3.14|<gml:Curve/>
-T3.15|<gml:Polygon/>
-T3.16|<gml:MultiSurface/>
-T3.17|<gml:MultiCurve/>
-T3.18|<gml:MultiGeometry/>
+T3.1|
+T3.2|
+T3.3|
+T3.4|
+T3.5|
+T3.6|
+T3.7|
+T3.8|
+T3.9|
+T3.10|
+T3.11|
+T3.12|
+T3.13|
+T3.14|
+T3.15|
+T3.16|
+T3.17|
+T3.18|
ST_Buffer(empty, tolerance) == empty|010300000000000000
ST_Union(geometry, empty) == geometry|0103000000010000000400000000000000000000000000000000000000000000000000244000000000000000000000000000001440000000000000144000000000000000000000000000000000
ST_Union(empty, empty) == empty|010300000000000000
-- #680 --
SELECT '#680', encode(ST_AsBinary(geography(foo1.the_geom)),'hex') As result FROM ((SELECT ST_SetSRID(ST_MakePointM(i,j,m),4326) As the_geom FROM generate_series(-10,50,10) As i CROSS JOIN generate_series(50,70, 20) AS j CROSS JOIN generate_series(1,2) As m ORDER BY i, j, i*j*m)) As foo1 LIMIT 1;
+-- #681 --
+SELECT '#681a', ST_AsGML(ST_GeomFromText('POINT EMPTY', 4326));
+SELECT '#681b', ST_AsGML(ST_GeomFromText('POLYGON EMPTY', 4326));
+SELECT '#681c', ST_AsGML(ST_GeomFromText('LINESTRING EMPTY', 4326));
+SELECT '#681d', ST_AsGML(ST_GeomFromText('MULTIPOINT EMPTY', 4326));
+SELECT '#681e', ST_AsGML(ST_GeomFromText('MULTILINESTRING EMPTY', 4326));
+SELECT '#681f', ST_AsGML(ST_GeomFromText('MULTIPOLYGON EMPTY', 4326));
+SELECT '#681g', ST_AsGML(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 4326));
+
+
-- #682 --
SELECT '#682', ST_Buffer(ST_GeomFromText('POLYGON EMPTY',4326) , 0.5);
#667|SRID=4326;CURVEPOLYGON(CIRCULARSTRING(30 40,-49.2314112161292 32.1963871193548,30 40))
#677|1121395
#680|01d107000000000000000024c000000000000049400000000000000040
+#681a|
+#681b|
+#681c|
+#681d|
+#681e|
+#681f|
+#681g|
#682|0103000020E610000000000000
#683|0103000020E610000000000000
#684|0103000020E610000000000000