PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches
cu_out_kml.c
Go to the documentation of this file.
1/**********************************************************************
2 *
3 * PostGIS - Spatial Types for PostgreSQL
4 * http://postgis.net
5 * Copyright 2010 Olivier Courtin <olivier.courtin@oslandia.com>
6 *
7 * This is free software; you can redistribute and/or modify it under
8 * the terms of the GNU General Public Licence. See the COPYING file.
9 *
10 **********************************************************************/
11
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include "CUnit/Basic.h"
16
17#include "liblwgeom_internal.h"
18#include "cu_tester.h"
19
20static void do_kml_test(char * in, char * out, int precision)
21{
24
26
27 lwgeom_free(g);
28 lwfree(v);
29}
30
31
32static void do_kml_unsupported(char * in, char * out)
33{
35 lwvarlena_t *v = lwgeom_to_kml2(g, 0, "");
36
39
40 lwfree(v);
41 lwgeom_free(g);
42}
43
44
45static void do_kml_test_prefix(char * in, char * out, int precision, const char *prefix)
46{
48 lwvarlena_t *v = lwgeom_to_kml2(g, precision, prefix);
49
51
52 lwgeom_free(g);
53 lwfree(v);
54}
55
56
57static void out_kml_test_precision(void)
58{
59 /* 0 precision, i.e a round */
61 "POINT(1.1111111111111 1.1111111111111)",
62 "<Point><coordinates>1,1</coordinates></Point>",
63 0);
64
65 /* 3 digits precision */
67 "POINT(1.1111111111111 1.1111111111111)",
68 "<Point><coordinates>1.111,1.111</coordinates></Point>",
69 3);
70
71 /* 9 digits precision */
73 "POINT(1.2345678901234 1.2345678901234)",
74 "<Point><coordinates>1.23456789,1.23456789</coordinates></Point>",
75 8);
76
77 /* huge data */
79 "POINT(1E300 -1E300)",
80 "<Point><coordinates>1e+300,-1e+300</coordinates></Point>",
81 0);
82}
83
84
85static void out_kml_test_dims(void)
86{
87 /* 3D */
89 "POINT(0 1 2)",
90 "<Point><coordinates>0,1,2</coordinates></Point>",
91 0);
92
93 /* 3DM */
95 "POINTM(0 1 2)",
96 "<Point><coordinates>0,1</coordinates></Point>",
97 0);
98
99 /* 4D */
101 "POINT(0 1 2 3)",
102 "<Point><coordinates>0,1,2</coordinates></Point>",
103 0);
104}
105
106
107static void out_kml_test_geoms(void)
108{
109 /* Linestring */
111 "LINESTRING(0 1,2 3,4 5)",
112 "<LineString><coordinates>0,1 2,3 4,5</coordinates></LineString>",
113 0);
114
115 /* Polygon */
117 "POLYGON((0 1,2 3,4 5,0 1))",
118 "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs></Polygon>",
119 0);
120
121 /* Polygon - with internal ring */
123 "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))",
124 "<Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs><innerBoundaryIs><LinearRing><coordinates>6,7 8,9 10,11 6,7</coordinates></LinearRing></innerBoundaryIs></Polygon>",
125 0);
126
127 /* MultiPoint */
129 "MULTIPOINT(0 1,2 3)",
130 "<MultiGeometry><Point><coordinates>0,1</coordinates></Point><Point><coordinates>2,3</coordinates></Point></MultiGeometry>",
131 0);
132
133 /* MultiLine */
135 "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))",
136 "<MultiGeometry><LineString><coordinates>0,1 2,3 4,5</coordinates></LineString><LineString><coordinates>6,7 8,9 10,11</coordinates></LineString></MultiGeometry>",
137 0);
138
139 /* MultiPolygon */
141 "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))",
142 "<MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>0,1 2,3 4,5 0,1</coordinates></LinearRing></outerBoundaryIs></Polygon><Polygon><outerBoundaryIs><LinearRing><coordinates>6,7 8,9 10,11 6,7</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>",
143 0);
144
145 /* GeometryCollection */
147 "GEOMETRYCOLLECTION(POINT(0 1))",
148 "lwgeom_to_kml2: 'GeometryCollection' geometry type not supported");
149
150 /* CircularString */
152 "CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)",
153 "lwgeom_to_kml2: 'CircularString' geometry type not supported");
154
155 /* CompoundCurve */
157 "COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))",
158 "lwgeom_to_kml2: 'CompoundCurve' geometry type not supported");
159
160 /* CurvePolygon */
162 "CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))",
163 "lwgeom_to_kml2: 'CurvePolygon' geometry type not supported");
164
165 /* MultiCurve */
167 "MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))",
168 "lwgeom_to_kml2: 'MultiCurve' geometry type not supported");
169
170 /* MultiSurface */
172 "MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))",
173 "lwgeom_to_kml2: 'MultiSurface' geometry type not supported");
174}
175
176static void out_kml_test_prefix(void)
177{
178 /* Linestring */
180 "LINESTRING(0 1,2 3,4 5)",
181 "<kml:LineString><kml:coordinates>0,1 2,3 4,5</kml:coordinates></kml:LineString>",
182 0, "kml:");
183
184 /* Polygon */
186 "POLYGON((0 1,2 3,4 5,0 1))",
187 "<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>0,1 2,3 4,5 0,1</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon>",
188 0, "kml:");
189
190 /* Polygon - with internal ring */
192 "POLYGON((0 1,2 3,4 5,0 1),(6 7,8 9,10 11,6 7))",
193 "<kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>0,1 2,3 4,5 0,1</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs><kml:innerBoundaryIs><kml:LinearRing><kml:coordinates>6,7 8,9 10,11 6,7</kml:coordinates></kml:LinearRing></kml:innerBoundaryIs></kml:Polygon>",
194 0, "kml:");
195
196 /* MultiPoint */
198 "MULTIPOINT(0 1,2 3)",
199 "<kml:MultiGeometry><kml:Point><kml:coordinates>0,1</kml:coordinates></kml:Point><kml:Point><kml:coordinates>2,3</kml:coordinates></kml:Point></kml:MultiGeometry>",
200 0, "kml:");
201
202 /* MultiLine */
204 "MULTILINESTRING((0 1,2 3,4 5),(6 7,8 9,10 11))",
205 "<kml:MultiGeometry><kml:LineString><kml:coordinates>0,1 2,3 4,5</kml:coordinates></kml:LineString><kml:LineString><kml:coordinates>6,7 8,9 10,11</kml:coordinates></kml:LineString></kml:MultiGeometry>",
206 0, "kml:");
207
208 /* MultiPolygon */
210 "MULTIPOLYGON(((0 1,2 3,4 5,0 1)),((6 7,8 9,10 11,6 7)))",
211 "<kml:MultiGeometry><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>0,1 2,3 4,5 0,1</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon><kml:Polygon><kml:outerBoundaryIs><kml:LinearRing><kml:coordinates>6,7 8,9 10,11 6,7</kml:coordinates></kml:LinearRing></kml:outerBoundaryIs></kml:Polygon></kml:MultiGeometry>",
212 0, "kml:");
213
214}
215/*
216** Used by test harness to register the tests in this file.
217*/
218void out_kml_suite_setup(void);
220{
221 CU_pSuite suite = CU_add_suite("kml_output", NULL, NULL);
226}
static uint8_t precision
Definition cu_in_twkb.c:25
static void out_kml_test_dims(void)
Definition cu_out_kml.c:85
static void out_kml_test_prefix(void)
Definition cu_out_kml.c:176
static void do_kml_test(char *in, char *out, int precision)
Definition cu_out_kml.c:20
static void out_kml_test_precision(void)
Definition cu_out_kml.c:57
void out_kml_suite_setup(void)
Definition cu_out_kml.c:219
static void do_kml_test_prefix(char *in, char *out, int precision, const char *prefix)
Definition cu_out_kml.c:45
static void out_kml_test_geoms(void)
Definition cu_out_kml.c:107
static void do_kml_unsupported(char *in, char *out)
Definition cu_out_kml.c:32
void cu_error_msg_reset()
char cu_error_msg[MAX_CUNIT_ERROR_LENGTH+1]
#define ASSERT_VARLENA_EQUAL(v, s)
#define PG_ADD_TEST(suite, testfunc)
#define ASSERT_STRING_EQUAL(o, e)
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
lwvarlena_t * lwgeom_to_kml2(const LWGEOM *geom, int precision, const char *prefix)
Definition lwout_kml.c:44
void lwfree(void *mem)
Definition lwutil.c:248
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940