static size_t pointArray_geojson_size(POINTARRAY *pa, int precision);
static char *getSRSbySRID(int SRID, bool short_crs);
-#define SHOW_DIGS_DOUBLE 15
+#define MAX_DOUBLE 1E15
+#define SHOW_DIGS_DOUBLE 20
#define MAX_DOUBLE_PRECISION 15
#define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */
for (i=0; i<pa->npoints; i++)
{
POINT2D pt;
- getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- if ( i ) ptr += sprintf(ptr, ",");
- ptr += sprintf(ptr, "[%s,%s]", x, y);
+ getPoint2d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if ( i ) ptr += sprintf(ptr, ",");
+ ptr += sprintf(ptr, "[%s,%s]", x, y);
}
}
else
{
for (i=0; i<pa->npoints; i++)
{
- POINT4D pt;
- getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
- trim_trailing_zeros(z);
- if ( i ) ptr += sprintf(ptr, ",");
- ptr += sprintf(ptr, "[%s,%s,%s]", x, y, z);
+ POINT4D pt;
+ getPoint4d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
+ trim_trailing_zeros(z);
+
+ if ( i ) ptr += sprintf(ptr, ",");
+ ptr += sprintf(ptr, "[%s,%s,%s]", x, y, z);
}
}
static char *getSRSbySRID(int SRID, bool short_crs);
-#define SHOW_DIGS_DOUBLE 15
+#define MAX_DOUBLE 1E15
+#define SHOW_DIGS_DOUBLE 20
#define MAX_DOUBLE_PRECISION 15
#define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */
for (i=0; i<pa->npoints; i++)
{
POINT2D pt;
- getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- if ( i ) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr, "%s,%s", x, y);
+ getPoint2d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if ( i ) ptr += sprintf(ptr, " ");
+ ptr += sprintf(ptr, "%s,%s", x, y);
}
}
else
for (i=0; i<pa->npoints; i++)
{
POINT4D pt;
- getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
- trim_trailing_zeros(z);
- if ( i ) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr, "%s,%s,%s", x, y, z);
+ getPoint4d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
+ trim_trailing_zeros(z);
+
+ if ( i ) ptr += sprintf(ptr, " ");
+ ptr += sprintf(ptr, "%s,%s,%s", x, y, z);
}
}
{
for (i=0; i<pa->npoints; i++)
{
- POINT2D pt;
- getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- if ( i ) ptr += sprintf(ptr, " ");
- if (is_deegree)
- ptr += sprintf(ptr, "%s %s", y, x);
- else
- ptr += sprintf(ptr, "%s %s", x, y);
+ POINT2D pt;
+ getPoint2d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if ( i ) ptr += sprintf(ptr, " ");
+ if (is_deegree)
+ ptr += sprintf(ptr, "%s %s", y, x);
+ else
+ ptr += sprintf(ptr, "%s %s", x, y);
}
}
else
{
for (i=0; i<pa->npoints; i++)
{
- POINT4D pt;
- getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
- trim_trailing_zeros(z);
- if ( i ) ptr += sprintf(ptr, " ");
- if (is_deegree)
- ptr += sprintf(ptr, "%s %s %s", y, x, z);
- else
- ptr += sprintf(ptr, "%s %s %s", x, y, z);
+ POINT4D pt;
+ getPoint4d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
+ trim_trailing_zeros(z);
+
+ if ( i ) ptr += sprintf(ptr, " ");
+ if (is_deegree)
+ ptr += sprintf(ptr, "%s %s %s", y, x, z);
+ else
+ ptr += sprintf(ptr, "%s %s %s", x, y, z);
}
}
static size_t pointArray_KMLsize(POINTARRAY *pa, int precision);
-#define SHOW_DIGS_DOUBLE 15
+#define MAX_DOUBLE 1E15
+#define SHOW_DIGS_DOUBLE 20
#define MAX_DOUBLE_PRECISION 15
#define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */
{
for (i=0; i<pa->npoints; i++)
{
- POINT2D pt;
- getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- if ( i ) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr, "%s,%s", x, y);
+ POINT2D pt;
+ getPoint2d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if ( i ) ptr += sprintf(ptr, " ");
+ ptr += sprintf(ptr, "%s,%s", x, y);
}
}
else
{
for (i=0; i<pa->npoints; i++)
{
- POINT4D pt;
- getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
- trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
- trim_trailing_zeros(z);
- if ( i ) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr, "%s,%s,%s", x, y, z);
+ POINT4D pt;
+ getPoint4d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
+ trim_trailing_zeros(y);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
+ trim_trailing_zeros(z);
+
+ if ( i ) ptr += sprintf(ptr, " ");
+ ptr += sprintf(ptr, "%s,%s,%s", x, y, z);
}
}
static size_t pointArray_svg_rel(POINTARRAY *pa, char * output, bool close_ring, int precision);
static size_t pointArray_svg_abs(POINTARRAY *pa, char * output, bool close_ring, int precision);
-#define SHOW_DIGS_DOUBLE 15
+#define MAX_DOUBLE 1E15
+#define SHOW_DIGS_DOUBLE 20
#define MAX_DOUBLE_PRECISION 15
#define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */
return size;
}
+
static size_t
assvg_point_buf(LWPOINT *point, char * output, bool circle, int precision)
{
- char *ptr=output;
- char x[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1];
- char y[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1];
- POINT2D pt;
-
- getPoint2d_p(point->point, 0, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- /* SVG Y axis is reversed, an no need to transform 0 into -0 */
- sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
- trim_trailing_zeros(y);
-
- if (circle) ptr += sprintf(ptr, "x=\"%s\" y=\"%s\"", x, y);
- else ptr += sprintf(ptr, "cx=\"%s\" cy=\"%s\"", x, y);
-
- return (ptr-output);
+ char *ptr=output;
+ char x[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1];
+ char y[MAX_DIGS_DOUBLE+MAX_DOUBLE_PRECISION+1];
+ POINT2D pt;
+
+ getPoint2d_p(point->point, 0, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ /* SVG Y axis is reversed, an no need to transform 0 into -0 */
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
+ else
+ sprintf(y, "%g", fabs(pt.y) ? pt.y * -1 : pt.y);
+ trim_trailing_zeros(y);
+
+ if (circle) ptr += sprintf(ptr, "x=\"%s\" y=\"%s\"", x, y);
+ else ptr += sprintf(ptr, "cx=\"%s\" cy=\"%s\"", x, y);
+
+ return (ptr-output);
}
+
static char *
assvg_point(LWPOINT *point, bool circle, int precision)
{
else end = pa->npoints - 1;
/* Starting point */
- getPoint2d_p(pa, 0, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
- trim_trailing_zeros(y);
- ptr += sprintf(ptr,"%s %s l", x, y);
+ getPoint2d_p(pa, 0, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
+ else
+ sprintf(y, "%g", fabs(pt.y) ? pt.y * -1 : pt.y);
+ trim_trailing_zeros(y);
+
+ ptr += sprintf(ptr,"%s %s l", x, y);
/* All the following ones */
- for (i=1 ; i < end ; i++)
- {
- lpt = pt;
- getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x -lpt.x);
- trim_trailing_zeros(x);
- /* SVG Y axis is reversed, an no need to transform 0 into -0 */
- sprintf(y, "%.*f", precision,
- fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y));
- trim_trailing_zeros(y);
- ptr += sprintf(ptr," %s %s", x, y);
- }
+ for (i=1 ; i < end ; i++)
+ {
+ lpt = pt;
+
+ getPoint2d_p(pa, i, &pt);
+ if (fabs(pt.x -lpt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x -lpt.x);
+ else
+ sprintf(x, "%g", pt.x -lpt.x);
+ trim_trailing_zeros(x);
+
+ /* SVG Y axis is reversed, an no need to transform 0 into -0 */
+ if (fabs(pt.y -lpt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision,
+ fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y));
+ else
+ sprintf(y, "%g",
+ fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y));
+ trim_trailing_zeros(y);
+
+ ptr += sprintf(ptr," %s %s", x, y);
+ }
return (ptr-output);
}
else end = pa->npoints - 1;
for (i=0 ; i < end ; i++)
- {
- getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
- trim_trailing_zeros(x);
- /* SVG Y axis is reversed, an no need to transform 0 into -0 */
- sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1:pt.y);
- trim_trailing_zeros(y);
- if (i == 1) ptr += sprintf(ptr, " L ");
- else if (i) ptr += sprintf(ptr, " ");
- ptr += sprintf(ptr,"%s %s", x, y);
- }
+ {
+ getPoint2d_p(pa, i, &pt);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
+ trim_trailing_zeros(x);
+
+ /* SVG Y axis is reversed, an no need to transform 0 into -0 */
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1:pt.y);
+ else
+ sprintf(y, "%g", fabs(pt.y) ? pt.y * -1:pt.y);
+ trim_trailing_zeros(y);
+
+ if (i == 1) ptr += sprintf(ptr, " L ");
+ else if (i) ptr += sprintf(ptr, " ");
+ ptr += sprintf(ptr,"%s %s", x, y);
+ }
return (ptr-output);
}