lwgeom_free(g);
}
-
static void out_gml_test_precision(void)
{
/* GML2 - 0 precision, i.e a round */
static void out_gml_test_geoms(void)
{
- /* GML2 - LINESTRING EMPTY
- do_gml2_test(
- "LINESTRING EMPTY",
- "<gml:Polygon></gml:Polygon>",
- NULL, 0);
- */
-
- /* GML2 - POLYGON EMPTY */
- do_gml2_test(
- "POLYGON EMPTY",
- "<gml:Polygon></gml:Polygon>",
- NULL, 0);
-
/* GML2 - Linestring */
do_gml2_test(
"LINESTRING(0 1,2 3,4 5)",
NULL, 0, 0);
- /* GML2 - Empty GeometryCollection */
- do_gml2_test(
- "GEOMETRYCOLLECTION EMPTY",
- "<gml:MultiGeometry></gml:MultiGeometry>",
- NULL, 0);
-
- /* GML3 - Empty GeometryCollection */
- do_gml3_test(
- "GEOMETRYCOLLECTION EMPTY",
- "<gml:MultiGeometry></gml:MultiGeometry>",
- NULL, 0, 0);
-
/* GML2 - Nested GeometryCollection */
do_gml2_test(
"GEOMETRYCOLLECTION(POINT(0 1),GEOMETRYCOLLECTION(LINESTRING(2 3,4 5)))",
/* GML2 - Empty GeometryCollection */
do_gml2_test_prefix(
"GEOMETRYCOLLECTION EMPTY",
- "<custom:MultiGeometry></custom:MultiGeometry>",
+ "<custom:MultiGeometry/>",
NULL, 0, "custom:");
/* GML3 - Empty GeometryCollection */
do_gml3_test_prefix(
"GEOMETRYCOLLECTION EMPTY",
- "<custom:MultiGeometry></custom:MultiGeometry>",
+ "<custom:MultiGeometry/>",
NULL, 0, 0, "custom:");
/* GML2 - Nested GeometryCollection */
/* GML2 - Empty GeometryCollection */
do_gml2_test_prefix(
"GEOMETRYCOLLECTION EMPTY",
- "<MultiGeometry></MultiGeometry>",
+ "<MultiGeometry/>",
NULL, 0, "");
/* GML3 - Empty GeometryCollection */
do_gml3_test_prefix(
"GEOMETRYCOLLECTION EMPTY",
- "<MultiGeometry></MultiGeometry>",
+ "<MultiGeometry/>",
NULL, 0, 0, "");
/* GML2 - Nested GeometryCollection */
}
+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);
+
+}
/*
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 = {"GML Out Suite", NULL, NULL, out_gml_tests};
+CU_SuiteInfo out_gml_suite = {"out_gml", NULL, NULL, out_gml_tests};
{
char *ptr = output;
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sPoint srsName=\"%s\">", prefix, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%sPoint>", prefix);
+ ptr += sprintf(ptr, "<%sPoint", prefix);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+ if ( lwpoint_is_empty(point) ) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
ptr += sprintf(ptr, "<%scoordinates>", prefix);
ptr += pointArray_toGML2(point->point, ptr, precision);
ptr += sprintf(ptr, "</%scoordinates></%sPoint>", prefix, prefix);
{
char *ptr=output;
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sLineString srsName=\"%s\">", prefix, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%sLineString>", prefix);
+ ptr += sprintf(ptr, "<%sLineString", prefix);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+
+ if ( lwline_is_empty(line) ) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
+
ptr += sprintf(ptr, "<%scoordinates>", prefix);
ptr += pointArray_toGML2(line->points, ptr, precision);
ptr += sprintf(ptr, "</%scoordinates></%sLineString>", prefix, prefix);
int i;
char *ptr=output;
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sPolygon srsName=\"%s\">", prefix, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%sPolygon>", prefix);
+ ptr += sprintf(ptr, "<%sPolygon", prefix);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+ if ( lwpoly_is_empty(poly) ) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
- if ( ! lwpoly_is_empty(poly) )
+ ptr += sprintf(ptr, ">");
+ ptr += sprintf(ptr, "<%souterBoundaryIs><%sLinearRing><%scoordinates>",
+ prefix, prefix, prefix);
+ ptr += pointArray_toGML2(poly->rings[0], ptr, precision);
+ ptr += sprintf(ptr, "</%scoordinates></%sLinearRing></%souterBoundaryIs>", prefix, prefix, prefix);
+ for (i=1; i<poly->nrings; i++)
{
- ptr += sprintf(ptr, "<%souterBoundaryIs><%sLinearRing><%scoordinates>",
- prefix, prefix, prefix);
- ptr += pointArray_toGML2(poly->rings[0], ptr, precision);
- ptr += sprintf(ptr, "</%scoordinates></%sLinearRing></%souterBoundaryIs>", prefix, prefix, prefix);
- for (i=1; i<poly->nrings; i++)
- {
- ptr += sprintf(ptr, "<%sinnerBoundaryIs><%sLinearRing><%scoordinates>", prefix, prefix, prefix);
- ptr += pointArray_toGML2(poly->rings[i], ptr, precision);
- ptr += sprintf(ptr, "</%scoordinates></%sLinearRing></%sinnerBoundaryIs>", prefix, prefix, prefix);
- }
+ ptr += sprintf(ptr, "<%sinnerBoundaryIs><%sLinearRing><%scoordinates>", prefix, prefix, prefix);
+ ptr += pointArray_toGML2(poly->rings[i], ptr, precision);
+ ptr += sprintf(ptr, "</%scoordinates></%sLinearRing></%sinnerBoundaryIs>", prefix, prefix, prefix);
}
ptr += sprintf(ptr, "</%sPolygon>", prefix);
else if (type == MULTIPOLYGONTYPE) gmltype = "MultiPolygon";
/* Open outmost tag */
- if ( srs )
- {
- ptr += sprintf(ptr, "<%s%s srsName=\"%s\">", prefix, gmltype, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%s%s>", prefix, gmltype);
+ ptr += sprintf(ptr, "<%s%s", prefix, gmltype);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+
+ if (!col->ngeoms) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
for (i=0; i<col->ngeoms; i++)
{
ptr = output;
/* Open outmost tag */
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sMultiGeometry srsName=\"%s\">", prefix, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%sMultiGeometry>", prefix);
+ ptr += sprintf(ptr, "<%sMultiGeometry", prefix);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+
+ if (!col->ngeoms) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
for (i=0; i<col->ngeoms; i++)
{
int dimension=2;
if (FLAGS_GET_Z(point->flags)) dimension = 3;
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sPoint srsName=\"%s\">", prefix, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%sPoint>", prefix);
+
+ ptr += sprintf(ptr, "<%sPoint", prefix);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+ if ( lwpoint_is_empty(point) ) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+
+ ptr += sprintf(ptr, ">");
if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%spos srsDimension=\"%d\">", prefix, dimension);
else ptr += sprintf(ptr, "<%spos>", prefix);
ptr += pointArray_toGML3(point->point, ptr, precision, opts);
}
if ( srs ) {
- ptr += sprintf(ptr, " srsName=\"%s\">", srs);
- } else {
- ptr += sprintf(ptr, ">");
+ ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+ }
+ if ( lwline_is_empty(line) ) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
if ( ! shortline ) {
ptr += sprintf(ptr, "<%ssegments>", prefix);
if (FLAGS_GET_Z(poly->flags)) dimension = 3;
if (is_patch)
{
- if (srs) ptr += sprintf(ptr, "<%sPolygonPatch srsName=\"%s\">", prefix, srs);
- else ptr += sprintf(ptr, "<%sPolygonPatch>", prefix);
+ ptr += sprintf(ptr, "<%sPolygonPatch", prefix);
+
}
else
{
- if (srs) ptr += sprintf(ptr, "<%sPolygon srsName=\"%s\">", prefix, srs);
- else ptr += sprintf(ptr, "<%sPolygon>", prefix);
+ ptr += sprintf(ptr, "<%sPolygon", prefix);
+ }
+
+ if (srs) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+
+ if ( lwpoly_is_empty(poly) ) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
ptr += sprintf(ptr, "<%sexterior><%sLinearRing>", prefix, prefix);
if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">", prefix, dimension);
else if (type == MULTIPOLYGONTYPE) gmltype = "MultiSurface";
/* Open outmost tag */
- if ( srs )
- {
- ptr += sprintf(ptr, "<%s%s srsName=\"%s\">", prefix, gmltype, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%s%s>", prefix, gmltype);
+ ptr += sprintf(ptr, "<%s%s", prefix, gmltype);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+
+ if (!col->ngeoms) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
for (i=0; i<col->ngeoms; i++)
{
ptr = output;
/* Open outmost tag */
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sMultiGeometry srsName=\"%s\">", prefix, srs);
- }
- else
- {
- ptr += sprintf(ptr, "<%sMultiGeometry>", prefix);
+ ptr += sprintf(ptr, "<%sMultiGeometry", prefix);
+ if ( srs ) ptr += sprintf(ptr, " srsName=\"%s\"", srs);
+
+ if (!col->ngeoms) {
+ ptr += sprintf(ptr, "/>");
+ return (ptr-output);
}
+ ptr += sprintf(ptr, ">");
for (i=0; i<col->ngeoms; i++)
{
SELECT 'T3.4', ST_AsGML('MULTIPOLYGON EMPTY');
SELECT 'T3.5', ST_AsGML('MULTILINESTRING EMPTY');
SELECT 'T3.6', ST_AsGML('GEOMETRYCOLLECTION EMPTY');
--- There's a crash somewhere in here...
---SELECT 'T3.7', ST_AsGML(3,'POINT EMPTY'::geometry);
---SELECT 'T3.8', ST_AsGML(3,'LINESTRING EMPTY'::geometry);
---SELECT 'T3.9', ST_AsGML(3,'POLYGON EMPTY'::geometry);
---SELECT 'T3.10', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry);
---SELECT 'T3.11', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry);
---SELECT 'T3.12', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry);
---SELECT 'T3.13', ST_AsGML(3,'POINT EMPTY'::geometry);
---SELECT 'T3.14', ST_AsGML(3,'LINESTRING EMPTY'::geometry);
---SELECT 'T3.15', ST_AsGML(3,'POLYGON EMPTY'::geometry);
---SELECT 'T3.16', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry);
---SELECT 'T3.17', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry);
---SELECT 'T3.18', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry);
+SELECT 'T3.7', ST_AsGML(3,'POINT EMPTY'::geometry);
+SELECT 'T3.8', ST_AsGML(3,'LINESTRING EMPTY'::geometry);
+SELECT 'T3.9', ST_AsGML(3,'POLYGON EMPTY'::geometry);
+SELECT 'T3.10', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry);
+SELECT 'T3.11', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry);
+SELECT 'T3.12', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry);
+SELECT 'T3.13', ST_AsGML(3,'POINT EMPTY'::geometry);
+SELECT 'T3.14', ST_AsGML(3,'LINESTRING EMPTY'::geometry);
+SELECT 'T3.15', ST_AsGML(3,'POLYGON EMPTY'::geometry);
+SELECT 'T3.16', ST_AsGML(3,'MULTIPOLYGON EMPTY'::geometry);
+SELECT 'T3.17', ST_AsGML(3,'MULTILINESTRING EMPTY'::geometry);
+SELECT 'T3.18', ST_AsGML(3,'GEOMETRYCOLLECTION EMPTY'::geometry);