* @{
*/
/** For GML3 only, include srsDimension attribute in output */
-#define LW_GML_IS_DIMS (1<<0)
+#define LW_GML_IS_DIMS (1<<0)
/** For GML3 only, declare that datas are lat/lon. Swaps axis order */
-#define LW_GML_IS_DEGREE (1<<1)
+#define LW_GML_IS_DEGREE (1<<1)
+/** For GML3, use <LineString> rather than <Curve> for lines */
+#define LW_GML_SHORTLINE (1<<2)
#define IS_DIMS(x) ((x) & LW_GML_IS_DIMS)
#define IS_DEGREE(x) ((x) & LW_GML_IS_DEGREE)
size_t prefixlen = strlen(prefix);
size = pointArray_GMLsize(line->points, precision);
- size += ( sizeof("<Curve><segments><LineStringSegment><posList>/") + ( prefixlen * 4 ) ) * 2;
+ if ( opts & LW_GML_SHORTLINE )
+ {
+ size += (
+ sizeof("<LineString><posList>/") +
+ ( prefixlen * 2 )
+ ) * 2;
+ }
+ else
+ {
+ size += (
+ sizeof("<Curve><segments><LineStringSegment><posList>/") +
+ ( prefixlen * 4 )
+ ) * 2;
+ }
if (srs) size += strlen(srs) + sizeof(" srsName=..");
if (IS_DIMS(opts)) size += sizeof(" srsDimension='x'");
return size;
{
char *ptr=output;
int dimension=2;
+ int shortline = ( opts & LW_GML_SHORTLINE );
if (FLAGS_GET_Z(line->flags)) dimension = 3;
- if ( srs )
- {
- ptr += sprintf(ptr, "<%sCurve srsName=\"%s\">", prefix, srs);
+
+ if ( shortline ) {
+ ptr += sprintf(ptr, "<%sLineString", prefix);
+ } else {
+ ptr += sprintf(ptr, "<%sCurve", prefix);
}
- else
- {
- ptr += sprintf(ptr, "<%sCurve>", prefix);
+
+ if ( srs ) {
+ ptr += sprintf(ptr, " srsName=\"%s\">", srs);
+ } else {
+ ptr += sprintf(ptr, ">");
}
- ptr += sprintf(ptr, "<%ssegments>", prefix);
- ptr += sprintf(ptr, "<%sLineStringSegment>", prefix);
- if (IS_DIMS(opts)) ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">", prefix, dimension);
- else ptr += sprintf(ptr, "<%sposList>", prefix);
+
+ if ( ! shortline ) {
+ ptr += sprintf(ptr, "<%ssegments>", prefix);
+ ptr += sprintf(ptr, "<%sLineStringSegment>", prefix);
+ }
+
+ if (IS_DIMS(opts)) {
+ ptr += sprintf(ptr, "<%sposList srsDimension=\"%d\">",
+ prefix, dimension);
+ } else {
+ ptr += sprintf(ptr, "<%sposList>", prefix);
+ }
+
ptr += pointArray_toGML3(line->points, ptr, precision, opts);
- ptr += sprintf(ptr, "</%sposList></%sLineStringSegment>", prefix, prefix);
- ptr += sprintf(ptr, "</%ssegments>", prefix);
- ptr += sprintf(ptr, "</%sCurve>", prefix);
+
+ ptr += sprintf(ptr, "</%sposList>", prefix);
+
+ if ( shortline ) {
+ ptr += sprintf(ptr, "</%sLineString>", prefix);
+ } else {
+ ptr += sprintf(ptr, "</%sLineStringSegment>", prefix);
+ ptr += sprintf(ptr, "</%ssegments>", prefix);
+ ptr += sprintf(ptr, "</%sCurve>", prefix);
+ }
return (ptr-output);
}