*
**********************************************************************/
-
-#if !HAVE_ISFINITE
-#endif
-
#include "liblwgeom_internal.h"
#include "lwgeom_log.h"
#include <stdlib.h>
{
if ( ( ! g1 ) && ( ! g2 ) )
return LW_FALSE;
-
- if ( ! g1 )
+ else if (!g1)
{
memcpy(gout, g2, sizeof(GBOX));
return LW_TRUE;
}
- if ( ! g2 )
+ else if (!g2)
{
memcpy(gout, g1, sizeof(GBOX));
return LW_TRUE;
static int lwcircstring_calculate_gbox_cartesian(LWCIRCSTRING *curve, GBOX *gbox)
{
- uint8_t flags = gflags(FLAGS_GET_Z(curve->flags), FLAGS_GET_M(curve->flags), 0);
GBOX tmp;
POINT4D p1, p2, p3;
uint32_t i;
- if ( ! curve ) return LW_FAILURE;
- if ( curve->points->npoints < 3 ) return LW_FAILURE;
+ if (!curve) return LW_FAILURE;
+ if (curve->points->npoints < 3) return LW_FAILURE;
- tmp.flags = flags;
+ tmp.flags =
+ gflags(FLAGS_GET_Z(curve->flags), FLAGS_GET_M(curve->flags), 0);
/* Initialize */
gbox->xmin = gbox->ymin = gbox->zmin = gbox->mmin = FLT_MAX;
return -1;
/* Non-empty > Empty */
- if (!g2_is_empty && g2_is_empty)
+ if (!g1_is_empty && g2_is_empty)
return 1;
/* Return equality for perfect equality only */
return col;
}
-
-LWCOLLECTION *
-lwcollection_segmentize2d(const LWCOLLECTION *col, double dist)
+LWCOLLECTION*
+lwcollection_segmentize2d(const LWCOLLECTION* col, double dist)
{
- uint32_t i,j;
- LWGEOM **newgeoms;
+ uint32_t i, j;
+ LWGEOM** newgeoms;
- if ( ! col->ngeoms ) return lwcollection_clone(col);
+ if (!col->ngeoms) return lwcollection_clone(col);
- newgeoms = lwalloc(sizeof(LWGEOM *)*col->ngeoms);
- for (i=0; i<col->ngeoms; i++)
+ newgeoms = lwalloc(sizeof(LWGEOM*) * col->ngeoms);
+ for (i = 0; i < col->ngeoms; i++)
{
newgeoms[i] = lwgeom_segmentize2d(col->geoms[i], dist);
- if ( ! newgeoms[i] ) {
- for (j=0; j < i; i++)
+ if (!newgeoms[i])
+ {
+ for (j = 0; j < i; j++)
lwgeom_free(newgeoms[j]);
lwfree(newgeoms);
return NULL;
}
}
- return lwcollection_construct(col->type, col->srid, NULL, col->ngeoms, newgeoms);
+ return lwcollection_construct(
+ col->type, col->srid, NULL, col->ngeoms, newgeoms);
}
/** @brief check for same geometry composition
* WARNING: the output will contain references to geometries in the input,
* so the result must be carefully released, not freed.
*/
-LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type)
+LWCOLLECTION*
+lwcollection_extract(LWCOLLECTION* col, int type)
{
uint32_t i = 0;
- LWGEOM **geomlist;
- LWCOLLECTION *outcol;
+ LWGEOM** geomlist;
+ LWCOLLECTION* outcol;
int geomlistsize = 16;
int geomlistlen = 0;
uint8_t outtype;
- if ( ! col ) return NULL;
+ if (!col) return NULL;
switch (type)
{
outtype = MULTIPOLYGONTYPE;
break;
default:
- lwerror("Only POLYGON, LINESTRING and POINT are supported by lwcollection_extract. %s requested.", lwtype_name(type));
+ lwerror(
+ "Only POLYGON, LINESTRING and POINT are supported by "
+ "lwcollection_extract. %s requested.",
+ lwtype_name(type));
return NULL;
}
geomlist = lwalloc(sizeof(LWGEOM*) * geomlistsize);
/* Process each sub-geometry */
- for ( i = 0; i < col->ngeoms; i++ )
+ for (i = 0; i < col->ngeoms; i++)
{
int subtype = col->geoms[i]->type;
/* Don't bother adding empty sub-geometries */
- if ( lwgeom_is_empty(col->geoms[i]) )
- {
- continue;
- }
+ if (lwgeom_is_empty(col->geoms[i])) continue;
/* Copy our sub-types into the output list */
- if ( subtype == type )
+ if (subtype == type)
{
- /* We've over-run our buffer, double the memory segment */
- if ( geomlistlen == geomlistsize )
+ /* We've over-run our buffer, double the memory segment
+ */
+ if (geomlistlen == geomlistsize)
{
geomlistsize *= 2;
- geomlist = lwrealloc(geomlist, sizeof(LWGEOM*) * geomlistsize);
+ geomlist = lwrealloc(
+ geomlist, sizeof(LWGEOM*) * geomlistsize);
}
geomlist[geomlistlen] = lwgeom_clone(col->geoms[i]);
geomlistlen++;
}
/* Recurse into sub-collections */
- if ( lwtype_is_collection( subtype ) )
+ if (lwtype_is_collection(subtype))
{
uint32_t j = 0;
- LWCOLLECTION *tmpcol = lwcollection_extract((LWCOLLECTION*)col->geoms[i], type);
- for ( j = 0; j < tmpcol->ngeoms; j++ )
+ LWCOLLECTION* tmpcol = lwcollection_extract(
+ (LWCOLLECTION*)col->geoms[i], type);
+ for (j = 0; j < tmpcol->ngeoms; j++)
{
- /* We've over-run our buffer, double the memory segment */
- if ( geomlistlen == geomlistsize )
+ /* We've over-run our buffer, double the memory
+ * segment */
+ if (geomlistlen == geomlistsize)
{
geomlistsize *= 2;
- geomlist = lwrealloc(geomlist, sizeof(LWGEOM*) * geomlistsize);
+ geomlist = lwrealloc(geomlist,
+ sizeof(LWGEOM*) *
+ geomlistsize);
}
geomlist[geomlistlen] = tmpcol->geoms[j];
geomlistlen++;
}
- if (tmpcol->geoms)
- lwfree(tmpcol->geoms);
- if (tmpcol->bbox)
- lwfree(tmpcol->bbox);
+ if (tmpcol->ngeoms) lwfree(tmpcol->geoms);
+ if (tmpcol->bbox) lwfree(tmpcol->bbox);
lwfree(tmpcol);
}
}
- if ( geomlistlen > 0 )
+ if (geomlistlen > 0)
{
GBOX gbox;
- outcol = lwcollection_construct(outtype, col->srid, NULL, geomlistlen, geomlist);
- lwgeom_calculate_gbox((LWGEOM *) outcol, &gbox);
+ outcol = lwcollection_construct(
+ outtype, col->srid, NULL, geomlistlen, geomlist);
+ lwgeom_calculate_gbox((LWGEOM*)outcol, &gbox);
outcol->bbox = gbox_copy(&gbox);
}
else
{
lwfree(geomlist);
- outcol = lwcollection_construct_empty(outtype, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags));
+ outcol = lwcollection_construct_empty(outtype,
+ col->srid,
+ FLAGS_GET_Z(col->flags),
+ FLAGS_GET_M(col->flags));
}
return outcol;
}
-
LWCOLLECTION*
lwcollection_force_dims(const LWCOLLECTION *col, int hasz, int hasm)
{
}
- /* Polygon/polygon case, if start point-in-poly, return zero, else return distance. */
- if ( ( type1 == POLYGONTYPE && type2 == POLYGONTYPE ) ||
- ( type2 == POLYGONTYPE && type1 == POLYGONTYPE ) )
+ /* Polygon/polygon case, if start point-in-poly, return zero, else
+ * return distance. */
+ if (type1 == POLYGONTYPE && type2 == POLYGONTYPE)
{
- const POINT2D *p;
- LWPOLY *lwpoly1 = (LWPOLY*)lwgeom1;
- LWPOLY *lwpoly2 = (LWPOLY*)lwgeom2;
+ const POINT2D* p;
+ LWPOLY* lwpoly1 = (LWPOLY*)lwgeom1;
+ LWPOLY* lwpoly2 = (LWPOLY*)lwgeom2;
double distance = FLT_MAX;
uint32_t i, j;
/* Point of 2 in polygon 1 implies zero distance */
p = getPoint2d_cp(lwpoly1->rings[0], 0);
- if ( lwpoly_covers_point2d(lwpoly2, p) )
- return 0.0;
+ if (lwpoly_covers_point2d(lwpoly2, p)) return 0.0;
/* Point of 1 in polygon 2 implies zero distance */
p = getPoint2d_cp(lwpoly2->rings[0], 0);
- if ( lwpoly_covers_point2d(lwpoly1, p) )
- return 0.0;
+ if (lwpoly_covers_point2d(lwpoly1, p)) return 0.0;
/* Not contained, so what's the actual distance? */
- for ( i = 0; i < lwpoly1->nrings; i++ )
+ for (i = 0; i < lwpoly1->nrings; i++)
{
- for ( j = 0; j < lwpoly2->nrings; j++ )
+ for (j = 0; j < lwpoly2->nrings; j++)
{
- double ring_distance = ptarray_distance_spheroid(lwpoly1->rings[i], lwpoly2->rings[j], spheroid, tolerance, check_intersection);
- if ( ring_distance < distance )
+ double ring_distance =
+ ptarray_distance_spheroid(
+ lwpoly1->rings[i],
+ lwpoly2->rings[j],
+ spheroid,
+ tolerance,
+ check_intersection);
+ if (ring_distance < distance)
distance = ring_distance;
- if ( distance < tolerance )
- return distance;
+ if (distance < tolerance) return distance;
}
}
return distance;
for ( i = 0; i < col->ngeoms; i++ )
{
- double geom_distance = lwgeom_distance_spheroid(col->geoms[i], lwgeom2, spheroid, tolerance);
+ double geom_distance = lwgeom_distance_spheroid(
+ col->geoms[i], lwgeom2, spheroid, tolerance);
if ( geom_distance < distance )
distance = geom_distance;
if ( distance < tolerance )
uint32_t i;
if ( ! node ) return;
- for ( i = 0; i < node->num_nodes; i++ )
- circ_tree_free(node->nodes[i]);
-
- if ( node->nodes ) lwfree(node->nodes);
+ if (node->nodes)
+ {
+ for (i = 0; i < node->num_nodes; i++)
+ circ_tree_free(node->nodes[i]);
+ lwfree(node->nodes);
+ }
lwfree(node);
}
return (const POINT3DZ*)getPoint_internal(pa, n);
}
-
const POINT4D*
-getPoint4d_cp(const POINTARRAY *pa, uint32_t n)
+getPoint4d_cp(const POINTARRAY* pa, uint32_t n)
{
- if ( ! pa ) return 0;
+ if (!pa) return 0;
- if ( ! (FLAGS_GET_Z(pa->flags) && FLAGS_GET_Z(pa->flags)) )
+ if (!(FLAGS_GET_Z(pa->flags) && FLAGS_GET_M(pa->flags)))
{
lwerror("getPoint4d_cp: no Z and M coordinates in point array");
return 0; /*error */
}
- if ( n>=pa->npoints )
+ if (n >= pa->npoints)
{
lwerror("getPoint4d_cp: point offset out of range");
return 0; /*error */
return (const POINT4D*)getPoint_internal(pa, n);
}
-
-
/*
* set point N to the given value
* NOTE that the pointarray can be of any
break;
case POLYGONTYPE:
- lwpoly = (LWPOLY *)lwgeom;
- if ( lwgeom_is_empty(lwgeom) )
- {
+ lwpoly = (LWPOLY*)lwgeom;
+ if (lwgeom_is_empty(lwgeom))
g = GEOSGeom_createEmptyPolygon();
- }
else
{
shell = ptarray_to_GEOSLinearRing(lwpoly->rings[0], autofix);
if ( ! shell ) return NULL;
/*lwerror("LWGEOM2GEOS: exception during polygon shell conversion"); */
ngeoms = lwpoly->nrings-1;
- if ( ngeoms > 0 )
- geoms = malloc(sizeof(GEOSGeom)*ngeoms);
+ if (ngeoms > 0)
+ geoms = malloc(sizeof(GEOSGeom) * ngeoms);
- for (i=1; i<lwpoly->nrings; ++i)
+ for (i = 1; i < lwpoly->nrings; i++)
{
geoms[i-1] = ptarray_to_GEOSLinearRing(lwpoly->rings[i], autofix);
if ( ! geoms[i-1] )
{
uint32_t k;
- for (k = 0; k < i-1; k++)
+ for (k = 0; k < i - 1; k++)
GEOSGeom_destroy(geoms[k]);
free(geoms);
GEOSGeom_destroy(shell);
lwc = (LWCOLLECTION *)lwgeom;
ngeoms = lwc->ngeoms;
- if ( ngeoms > 0 )
- geoms = malloc(sizeof(GEOSGeom)*ngeoms);
+ if (ngeoms > 0) geoms = malloc(sizeof(GEOSGeom) * ngeoms);
j = 0;
for (i=0; i<ngeoms; ++i)
geoms[j++] = g;
}
g = GEOSGeom_createCollection(geostype, geoms, j);
- if ( geoms ) free(geoms);
+ if (ngeoms > 0) free(geoms);
if ( ! g ) return NULL;
break;
n = 2;
edge = lwt_be_getEdgeByNode( topo, nid, &n, LWT_COL_EDGE_EDGE_ID );
- if ( n == -1 )
+ if ((n == -1) || (edge == NULL))
{
- lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
- return -1;
+ lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
+ return -1;
}
- for ( i=0; i<n; ++i )
+ for (i = 0; i < n; ++i)
{
- if ( edge[i].edge_id == id ) continue;
- lwfree(edge);
- lwerror("SQL/MM Spatial exception - not isolated edge");
- return -1;
+ if (edge[i].edge_id != id)
+ {
+ lwfree(edge);
+ lwerror("SQL/MM Spatial exception - not isolated edge");
+ return -1;
+ }
}
- if ( edge ) lwfree(edge);
+ lwfree(edge);
deledge.edge_id = id;
n = lwt_be_deleteEdges( topo, &deledge, LWT_COL_EDGE_EDGE_ID );
ids[1] = eid2;
nedges = 2;
edges = lwt_be_getEdgeById(topo, ids, &nedges, LWT_COL_EDGE_ALL);
- if ( nedges == -1 )
+ if ((nedges == -1) || (edges == NULL))
{
lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
return -1;
}
if ( ! e1 )
{
- if ( edges ) _lwt_release_edges(edges, nedges);
- lwerror("SQL/MM Spatial exception - non-existent edge %"
- LWTFMT_ELEMID, eid1);
- return -1;
+ _lwt_release_edges(edges, nedges);
+ lwerror(
+ "SQL/MM Spatial exception - non-existent edge %" LWTFMT_ELEMID,
+ eid1);
+ return -1;
}
if ( ! e2 )
{
- if ( edges ) _lwt_release_edges(edges, nedges);
- lwerror("SQL/MM Spatial exception - non-existent edge %"
- LWTFMT_ELEMID, eid2);
- return -1;
+ _lwt_release_edges(edges, nedges);
+ lwerror(
+ "SQL/MM Spatial exception - non-existent edge %" LWTFMT_ELEMID,
+ eid2);
+ return -1;
}
/* NOT IN THE SPECS: See if any of the two edges are closed. */
s.check = check;
s.coords = coords;
- /* Handle the check catch-all values */
- if ( check & LW_PARSER_CHECK_NONE )
- s.check = 0;
- else
- s.check = check;
-
-
/* Read the rest of the geometry */
return lwgeom_from_twkb_state(&s);
}
s.has_srid = LW_FALSE;
s.pos = wkb;
- /* Hand the check catch-all values */
- if ( check & LW_PARSER_CHECK_NONE )
- s.check = 0;
- else
- s.check = check;
-
return lwgeom_from_wkb_state(&s);
}
int added_last_point = 0;
POINT4D *p = NULL, *q = NULL, *r = NULL;
double ordinate_value_p = 0.0, ordinate_value_q = 0.0;
- char hasz = lwgeom_has_z(lwline_as_lwgeom(line));
- char hasm = lwgeom_has_m(lwline_as_lwgeom(line));
- char dims = FLAGS_NDIMS(line->flags);
+ char hasz, hasm;
+ char dims;
/* Null input, nothing we can do. */
if ( ! line )
lwerror("Null input geometry.");
return NULL;
}
+ hasz = lwgeom_has_z(lwline_as_lwgeom(line));
+ hasm = lwgeom_has_m(lwline_as_lwgeom(line));
+ dims = FLAGS_NDIMS(line->flags);
/* Ensure 'from' is less than 'to'. */
if ( to < from )
lwerror("lwgeom_clip_to_ordinate_range clipping routine returned NULL");
/* Return if we aren't going to offset the result */
- if ( FP_EQUALS(offset, 0.0) || lwgeom_is_empty(lwcollection_as_lwgeom(out_col)) )
+ if (FP_IS_ZERO(offset) ||
+ lwgeom_is_empty(lwcollection_as_lwgeom(out_col)))
return out_col;
/* Construct a collection to hold our outputs. */
{
/* Do not simplify empties when outputting to canonical form */
- if ( lwgeom_is_empty(geom) & ! (variant & WKB_EXTENDED) )
+ if (lwgeom_is_empty(geom) && !(variant & WKB_EXTENDED))
return empty_to_wkb_buf(geom, buf, variant);
switch ( geom->type )
return result;
}
-void lwpoly_free(LWPOLY *poly)
+void
+lwpoly_free(LWPOLY* poly)
{
uint32_t t;
- if( ! poly ) return;
+ if (!poly) return;
- if ( poly->bbox )
- lwfree(poly->bbox);
-
- for (t=0; t<poly->nrings; t++)
- {
- if ( poly->rings[t] )
- ptarray_free(poly->rings[t]);
- }
+ if (poly->bbox) lwfree(poly->bbox);
if ( poly->rings )
+ {
+ for (t = 0; t < poly->nrings; t++)
+ if (poly->rings[t]) ptarray_free(poly->rings[t]);
lwfree(poly->rings);
+ }
lwfree(poly);
}
/* Closest point is in the arc, but not in the segment, so */
/* one of the segment end points must be the closest. */
- if ( pt_in_arc & ! pt_in_seg )
+ if (pt_in_arc && !pt_in_seg)
{
lw_dist2d_pt_arc(A1, B1, B2, B3, dl);
lw_dist2d_pt_arc(A2, B1, B2, B3, dl);
return LW_TRUE;
}
/* or, one of the arc end points is the closest */
- else if ( pt_in_seg && ! pt_in_arc )
+ else if (pt_in_seg && !pt_in_arc)
{
lw_dist2d_pt_seg(B1, A1, A2, dl);
lw_dist2d_pt_seg(B3, A1, A2, dl);
/* Closest point is in the arc A, but not in the arc B, so */
/* one of the B end points must be the closest. */
- if ( pt_in_arc_A & ! pt_in_arc_B )
+ if (pt_in_arc_A && !pt_in_arc_B)
{
lw_dist2d_pt_arc(B1, A1, A2, A3, dl);
lw_dist2d_pt_arc(B3, A1, A2, A3, dl);
dl->p2=theP;
}
return LW_TRUE;
-
}
- lwerror("unspecified error in function lw_dist2d_seg_seg");
- return LW_FALSE; /*If we have come here something is wrong*/
}
lwerror("Unsupported geometry type: %s", lwtype_name(t1));
return LW_FALSE;
}
- /*You shouldn't being able to get here*/
- lwerror("unspecified error in function lw_dist3d_distribute_bruteforce");
- return LW_FALSE;
}
int
ptarray_remove_point(POINTARRAY *pa, uint32_t where)
{
- size_t ptsize = ptarray_point_size(pa);
-
/* Check for pathology */
if( ! pa )
{
}
/* If the point is any but the last, we need to copy the data back one point */
- if( where < pa->npoints - 1 )
- {
- memmove(getPoint_internal(pa, where), getPoint_internal(pa, where+1), ptsize * (pa->npoints - where - 1));
- }
+ if (where < pa->npoints - 1)
+ memmove(getPoint_internal(pa, where),
+ getPoint_internal(pa, where + 1),
+ ptarray_point_size(pa) * (pa->npoints - where - 1));
/* We have one less point */
pa->npoints--;
gserialized_datum_get_gidx_p(Datum gsdatum, GIDX *gidx)
{
GSERIALIZED *gpart;
- int result = LW_SUCCESS;
POSTGIS_DEBUG(4, "entered function");
GIDX_SET_MAX(gidx,2,FLT_MAX);
}
SET_VARSIZE(gidx, VARHDRSZ + size);
- result = LW_SUCCESS;
}
else
{
}
lwgeom_free(lwgeom);
POSTGIS_FREE_IF_COPY_P(g, gsdatum);
- result = gidx_from_gbox_p(gbox, gidx);
+ gidx_from_gbox_p(gbox, gidx);
}
POSTGIS_FREE_IF_COPY_P(gpart, gsdatum);
- if ( result == LW_SUCCESS )
- {
- POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
- }
+ POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
- return result;
+ return LW_SUCCESS;
}
*/
int gserialized_get_gidx_p(const GSERIALIZED *g, GIDX *gidx)
{
- int result = LW_SUCCESS;
-
POSTGIS_DEBUG(4, "entered function");
-
POSTGIS_DEBUGF(4, "got flags %d", g->flags);
if ( FLAGS_GET_BBOX(g->flags) )
return LW_FAILURE;
}
lwgeom_free(lwgeom);
- result = gidx_from_gbox_p(gbox, gidx);
- }
- if ( result == LW_SUCCESS )
- {
- POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
+ gidx_from_gbox_p(gbox, gidx);
}
+ POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
- return result;
+ return LW_SUCCESS;
}
/* Delete the projection object from the hash */
he = (PJHashEntry *) hash_search(PJHash, key, HASH_REMOVE, NULL);
- he->projection = NULL;
-
if (!he)
elog(ERROR, "DeletePJHashEntry: There was an error removing the PROJ4 projection object from this MemoryContext (%p)", (void *)mcxt);
+ else
+ he->projection = NULL;
}
bool
{
if (strcmp(state->field_names[z], name) == 0)
{
- strncat(name, "__", MAXFIELDNAMELEN);
- snprintf(name + strlen(name), MAXFIELDNAMELEN, "%i", j);
+ strncat(name, "__", MAXFIELDNAMELEN - 1);
+ snprintf(name + strlen(name),
+ MAXFIELDNAMELEN - 1 - strlen(name),
+ "%i",
+ j);
break;
}
}
char *srs;
int srid = SRID_DEFAULT;
int precision = DBL_DIG;
- int option=0;
+ int option = 0;
int lwopts = LW_GML_IS_DIMS;
static const char *default_prefix = "gml:";
const char *prefix = default_prefix;
/* Revert lat/lon only with long SRS */
if (option & 1) lwopts |= LW_GML_IS_DEGREE;
if (option & 2) lwopts &= ~LW_GML_IS_DIMS;
+ if (option & 8)
+ {
+ elog(ERROR,
+ "Options %d passed to ST_AsGML(geography) sets "
+ "unsupported value 8",
+ option);
+ PG_RETURN_NULL();
+ }
+ if ((option & 4) || (option & 16) || (option & 32))
+ {
+ elog(ERROR,
+ "Options %d passed to ST_AsGML(geography) but are only "
+ "applicable to ST_AsGML(geometry)",
+ option);
+ PG_RETURN_NULL();
+ }
if (version == 2)
gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);
double min[ND_DIMS];
double max[ND_DIMS];
double total_count = 0.0;
- int ndims_max = Max(nd_stats->ndims, gbox_ndims(box));
- /* int ndims_min = Min(nd_stats->ndims, gbox_ndims(box)); */
+ int ndims_max;
/* Calculate the overlap of the box on the histogram */
if ( ! nd_stats )
return FALLBACK_ND_SEL;
}
+ ndims_max = Max(nd_stats->ndims, gbox_ndims(box));
+
/* Initialize nd_box. */
nd_box_from_gbox(box, &nd_box);
{
char *s = (char*)palloc(64);
char *str = s;
- uint32 typmod = PG_GETARG_INT32(0);
- uint32 srid = TYPMOD_GET_SRID(typmod);
- uint32 type = TYPMOD_GET_TYPE(typmod);
- uint32 hasz = TYPMOD_GET_Z(typmod);
- uint32 hasm = TYPMOD_GET_M(typmod);
+ int32 typmod = PG_GETARG_INT32(0);
+ int32 srid = TYPMOD_GET_SRID(typmod);
+ int32 type = TYPMOD_GET_TYPE(typmod);
+ int32 hasz = TYPMOD_GET_Z(typmod);
+ int32 hasm = TYPMOD_GET_M(typmod);
POSTGIS_DEBUGF(3, "Got typmod(srid = %d, type = %d, hasz = %d, hasm = %d)", srid, type, hasz, hasm);
/* No SRID or type or dimensionality? Then no typmod at all. Return empty string. */
- if ( ! ( srid || type || hasz || hasm ) )
+ if (!(srid || type || hasz || hasm) || typmod < 0)
{
*str = '\0';
PG_RETURN_CSTRING(str);
str += sprintf(str, "(");
/* Has type? */
- if ( type )
+ if (type)
str += sprintf(str, "%s", lwtype_name(type));
- else if ( (!type) && ( srid || hasz || hasm ) )
- str += sprintf(str, "Geometry");
+ else if (srid || hasz || hasm)
+ str += sprintf(str, "Geometry");
/* Has Z? */
- if ( hasz )
- str += sprintf(str, "%s", "Z");
+ if (hasz) str += sprintf(str, "%s", "Z");
/* Has M? */
- if ( hasm )
- str += sprintf(str, "%s", "M");
-
- /* Comma? */
- if ( srid )
- str += sprintf(str, ",");
+ if (hasm) str += sprintf(str, "%s", "M");
/* Has SRID? */
- if ( srid )
- str += sprintf(str, "%d", srid);
+ if (srid) str += sprintf(str, ",%d", srid);
/* Closing bracket. */
str += sprintf(str, ")");
static uint32 gserialized_typmod_in(ArrayType *arr, int is_geography)
{
- uint32 typmod = 0;
+ int32 typmod = 0;
Datum *elem_values;
int n = 0;
int i = 0;
Datum geography_typmod_in(PG_FUNCTION_ARGS)
{
ArrayType *arr = (ArrayType *) DatumGetPointer(PG_GETARG_DATUM(0));
- uint32 typmod = gserialized_typmod_in(arr, LW_TRUE);
+ int32 typmod = gserialized_typmod_in(arr, LW_TRUE);
int srid = TYPMOD_GET_SRID(typmod);
/* Check the SRID is legal (geographic coordinates) */
srid_is_latlong(fcinfo, srid);
int rv;
/* Can't do anything with null inputs */
- if ( (box == NULL) && (geom == NULL) )
- PG_RETURN_NULL();
-
+ if ((box == NULL) && (geom == NULL)) { PG_RETURN_NULL(); }
/* Null geometry but non-null box, return the box */
- if (geom == NULL)
+ else if (geom == NULL)
{
result = palloc(sizeof(BOX3D));
memcpy(result, box, sizeof(BOX3D));
char query[256];
int srid, err;
- if (srs == NULL)
- return 0;
+ if (!srs) return 0;
if (SPI_OK_CONNECT != SPI_connect ())
{
}
srid = atoi(SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1));
- if ( ! srs )
- {
- SPI_finish();
- return 0;
- }
SPI_finish();
geom = PG_GETARG_GSERIALIZED_P(1);
/* Retrieve precision if any (default is max) */
- if (PG_NARGS() >2 && !PG_ARGISNULL(2))
+ if (PG_NARGS() > 2 && !PG_ARGISNULL(2))
{
precision = PG_GETARG_INT32(2);
/* TODO: leave this to liblwgeom ? */
- if ( precision > DBL_DIG )
+ if (precision > DBL_DIG)
precision = DBL_DIG;
- else if ( precision < 0 ) precision = 0;
+ else if (precision < 0)
+ precision = 0;
}
/* retrieve option */
- if (PG_NARGS() >3 && !PG_ARGISNULL(3))
- option = PG_GETARG_INT32(3);
+ if (PG_NARGS() > 3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3);
/* retrieve prefix */
if (PG_NARGS() >4 && !PG_ARGISNULL(4))
else if (option & 1) srs = getSRSbySRID(srid, false);
else srs = getSRSbySRID(srid, true);
- if (option & 2) lwopts &= ~LW_GML_IS_DIMS;
- if (option & 4) lwopts |= LW_GML_SHORTLINE;
+ if (option & 2) lwopts &= ~LW_GML_IS_DIMS;
+ if (option & 4) lwopts |= LW_GML_SHORTLINE;
+ if (option & 8)
+ {
+ elog(ERROR,
+ "Options %d passed to ST_AsGML(geography) sets "
+ "unsupported value 8",
+ option);
+ PG_RETURN_NULL();
+ }
if (option & 16) lwopts |= LW_GML_IS_DEGREE;
- if (option & 32) lwopts |= LW_GML_EXTENT;
+ if (option & 32) lwopts |= LW_GML_EXTENT;
lwgeom = lwgeom_from_gserialized(geom);
- if (version == 2 && lwopts & LW_GML_EXTENT)
- gml = lwgeom_extent_to_gml2(lwgeom, srs, precision, prefix);
- else if (version == 2)
- gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);
- else if (version == 3 && lwopts & LW_GML_EXTENT)
- gml = lwgeom_extent_to_gml3(lwgeom, srs, precision, lwopts, prefix);
- else if (version == 3)
- gml = lwgeom_to_gml3(lwgeom, srs, precision, lwopts, prefix, gml_id);
+ if (version == 2)
+ {
+ if (lwopts & LW_GML_EXTENT)
+ gml = lwgeom_extent_to_gml2(
+ lwgeom, srs, precision, prefix);
+ else
+ gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);
+ }
+ if (version == 3)
+ {
+ if (lwopts & LW_GML_EXTENT)
+ gml = lwgeom_extent_to_gml3(
+ lwgeom, srs, precision, lwopts, prefix);
+ else
+ gml = lwgeom_to_gml3(
+ lwgeom, srs, precision, lwopts, prefix, gml_id);
+ }
lwgeom_free(lwgeom);
PG_FREE_IF_COPY(geom, 1);
lwcol = lwcollection_as_lwgeom(lwcollection_extract((LWCOLLECTION*)lwgeom, type));
}
-#if 0
- if (lwgeom_is_empty(lwcollection_as_lwgeom(lwcol)))
- {
- lwgeom_free(lwgeom);
- PG_RETURN_NULL();
- }
-#endif
output = geometry_serialize((LWGEOM*)lwcol);
lwgeom_free(lwgeom);
lwgeom_free(lwcol);
lwoutput = lwgeom_homogenize(lwgeom);
lwgeom_free(lwgeom);
- if ( ! lwoutput )
+ if (!lwoutput)
{
- PG_RETURN_NULL();
PG_FREE_IF_COPY(input, 0);
+ PG_RETURN_NULL();
}
output = geometry_serialize(lwoutput);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
retcode = GEOSHausdorffDistance(g1, g2, &result);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (retcode == 0)
- {
- HANDLE_GEOS_ERROR("GEOSHausdorffDistance");
- PG_RETURN_NULL(); /*never get here */
- }
+ if (retcode == 0) HANDLE_GEOS_ERROR("GEOSHausdorffDistance");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
retcode = GEOSHausdorffDistanceDensify(g1, g2, densifyFrac, &result);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (retcode == 0)
- {
- HANDLE_GEOS_ERROR("GEOSHausdorffDistanceDensify");
- PG_RETURN_NULL(); /*never get here */
- }
+ if (retcode == 0) HANDLE_GEOS_ERROR("GEOSHausdorffDistanceDensify");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
if (densifyFrac <= 0.0)
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (retcode == 0)
- {
- HANDLE_GEOS_ERROR("GEOSFrechetDistance");
- PG_RETURN_NULL(); /*never get here */
- }
+ if (retcode == 0) HANDLE_GEOS_ERROR("GEOSFrechetDistance");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
/* Uh oh! Exception thrown at construction... */
if ( ! g )
{
- HANDLE_GEOS_ERROR("One of the geometries in the set "
- "could not be converted to GEOS");
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "One of the geometries in the set "
+ "could not be converted to GEOS");
}
/* Ensure we have enough space in our storage array */
if (curgeom > 0)
{
g = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, geoms, curgeom);
- if ( ! g )
- {
- HANDLE_GEOS_ERROR("Could not create GEOS COLLECTION from geometry array");
- PG_RETURN_NULL();
- }
+ if (!g)
+ HANDLE_GEOS_ERROR(
+ "Could not create GEOS COLLECTION from geometry "
+ "array");
g_union = GEOSUnaryUnion(g);
GEOSGeom_destroy(g);
- if ( ! g_union )
- {
- HANDLE_GEOS_ERROR("GEOSUnaryUnion");
- PG_RETURN_NULL();
- }
+ if (!g_union) HANDLE_GEOS_ERROR("GEOSUnaryUnion");
GEOSSetSRID(g_union, srid);
gser_out = GEOS2POSTGIS(g_union, is3d);
g1 = LWGEOM2GEOS(lwgeom, 0);
lwgeom_free(lwgeom);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g3 = (GEOSGeometry *)GEOSBoundary(g1);
- if (g3 == NULL)
+ if (!g3)
{
GEOSGeom_destroy(g1);
HANDLE_GEOS_ERROR("GEOSBoundary");
- PG_RETURN_NULL(); /* never get here */
}
POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
result = GEOS2POSTGIS(g3, gserialized_has_z(geom1));
- if (result == NULL)
+ if (!result)
{
GEOSGeom_destroy(g1);
-
GEOSGeom_destroy(g3);
- elog(NOTICE,"GEOS2POSTGIS threw an error (result postgis geometry formation)!");
+ elog(NOTICE,
+ "GEOS2POSTGIS threw an error (result postgis geometry "
+ "formation)!");
PG_RETURN_NULL(); /* never get here */
}
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g3 = (GEOSGeometry *)GEOSConvexHull(g1);
GEOSGeom_destroy(g1);
- if (g3 == NULL)
- {
- HANDLE_GEOS_ERROR("GEOSConvexHull");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (!g3) HANDLE_GEOS_ERROR("GEOSConvexHull");
POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
lwout = GEOS2LWGEOM(g3, gserialized_has_z(geom1));
GEOSGeom_destroy(g3);
- if (lwout == NULL)
+ if (!lwout)
{
- elog(ERROR,"convexhull() failed to convert GEOS geometry to LWGEOM");
+ elog(ERROR,
+ "convexhull() failed to convert GEOS geometry to LWGEOM");
PG_RETURN_NULL(); /* never get here */
}
result = geometry_serialize(lwout);
lwgeom_free(lwout);
- if (result == NULL)
+ if (!result)
{
elog(ERROR,"GEOS convexhull() threw an error (result postgis geometry formation)!");
PG_RETURN_NULL(); /* never get here */
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g3 = GEOSTopologyPreserveSimplify(g1,tolerance);
GEOSGeom_destroy(g1);
- if (g3 == NULL)
- {
- HANDLE_GEOS_ERROR("GEOSTopologyPreserveSimplify");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (!g3) HANDLE_GEOS_ERROR("GEOSTopologyPreserveSimplify");
POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
result = GEOS2POSTGIS(g3, gserialized_has_z(geom1));
GEOSGeom_destroy(g3);
- if (result == NULL)
+ if (!result)
{
elog(ERROR,"GEOS topologypreservesimplify() threw an error (result postgis geometry formation)!");
PG_RETURN_NULL(); /* never get here */
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
if (nargs > 2)
{
{
char *key, *val;
param = strtok(param, " ");
- if ( param == NULL ) break;
+ if (!param) break;
POSTGIS_DEBUGF(3, "Param: %s", param);
key = param;
val = strchr(key, '=');
- if ( val == NULL || *(val+1) == '\0' )
+ if (!val || *(val + 1) == '\0')
{
lwpgerror("Missing value for buffer "
"parameter %s", key);
g3 = GEOSBufferWithStyle(g1, size, quadsegs, endCapStyle, joinStyle, mitreLimit);
GEOSGeom_destroy(g1);
- if (g3 == NULL)
- {
- HANDLE_GEOS_ERROR("GEOSBuffer");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (!g3) HANDLE_GEOS_ERROR("GEOSBuffer");
POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
result = GEOS2POSTGIS(g3, gserialized_has_z(geom1));
GEOSGeom_destroy(g3);
- if (result == NULL)
+ if (!result)
{
elog(ERROR,"GEOS buffer() threw an error (result postgis geometry formation)!");
PG_RETURN_NULL(); /* never get here */
{
char *key, *val;
param = strtok(param, " ");
- if ( param == NULL ) break;
+ if (!param) break;
POSTGIS_DEBUGF(3, "Param: %s", param);
key = param;
val = strchr(key, '=');
- if ( val == NULL || *(val+1) == '\0' )
+ if (!val || *(val + 1) == '\0')
{
lwpgerror("ST_OffsetCurve: Missing value for buffer parameter %s", key);
break;
lwgeom_result = lwgeom_offsetcurve(lwgeom_as_lwline(lwgeom_input), size, quadsegs, joinStyle, mitreLimit);
- if (lwgeom_result == NULL)
+ if (!lwgeom_result)
lwpgerror("ST_OffsetCurve: lwgeom_offsetcurve returned NULL");
gser_result = gserialized_from_lwgeom(lwgeom_result, 0);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom);
- if ( 0 == g1 ) /* exception thrown at construction */
+ if (!g1)
{
/* Why is this a WARNING rather than an error ? */
/* TODO: use HANDLE_GEOS_ERROR instead */
g3 = GEOSPointOnSurface(g1);
- if (g3 == NULL)
+ if (!g3)
{
GEOSGeom_destroy(g1);
HANDLE_GEOS_ERROR("GEOSPointOnSurface");
- PG_RETURN_NULL(); /* never get here */
}
POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ;
result = GEOS2POSTGIS(g3, gserialized_has_z(geom));
- if (result == NULL)
+ if (!result)
{
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g3);
PG_FREE_IF_COPY(geom, 0); /*free memory, we already have a lwgeom geometry copy*/
linear_geom = lwgeom_stroke(igeom, perQuad);
lwgeom_free(igeom);
- if (linear_geom == NULL)
- PG_RETURN_NULL();
+ if (!linear_geom) PG_RETURN_NULL();
geom = geometry_serialize(linear_geom);
lwgeom_free(linear_geom);
geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom);
- if ( 0 == geosgeom ) /* exception thrown at construction */
- {
+ if (!geosgeom)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
geosresult = GEOSGetCentroid(geosgeom);
- if ( geosresult == NULL )
+ if (!geosresult)
{
GEOSGeom_destroy(geosgeom);
HANDLE_GEOS_ERROR("GEOSGetCentroid");
- PG_RETURN_NULL();
}
GEOSSetSRID(geosresult, gserialized_get_srid(geom));
result = GEOS2POSTGIS(geosresult, gserialized_has_z(geom));
- if (result == NULL)
+ if (!result)
{
GEOSGeom_destroy(geosgeom);
GEOSGeom_destroy(geosresult);
lwgeom_free(lwgeom1);
PG_FREE_IF_COPY(geom1, 0);
- if ( lwresult == NULL )
- PG_RETURN_NULL();
+ if (!lwresult) PG_RETURN_NULL();
result = geometry_serialize(lwresult) ;
lwgeom_free(lwresult) ;
{
reason_str = GEOSisValidReason(g1);
GEOSGeom_destroy((GEOSGeometry *)g1);
- if (reason_str == NULL)
- {
- HANDLE_GEOS_ERROR("GEOSisValidReason");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (!reason_str) HANDLE_GEOS_ERROR("GEOSisValidReason");
result = cstring2text(reason_str);
GEOSFree(reason_str);
}
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
GEOSGeom_destroy(g1);
HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
}
result = GEOSOverlaps(g1,g2);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSOverlaps");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSOverlaps");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
{
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+
POSTGIS_DEBUG(4, "containsPrepared: cache is live, running preparedcontains");
result = GEOSPreparedContains( prep_cache->prepared_geom, g1);
GEOSGeom_destroy(g1);
else
{
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
- HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+ if (!g1)
+ HANDLE_GEOS_ERROR(
+ "First argument geometry could not be converted to "
+ "GEOS");
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted "
+ "to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
}
POSTGIS_DEBUG(4, "containsPrepared: cache is not ready, running standard contains");
result = GEOSContains( g1, g2);
GEOSGeom_destroy(g2);
}
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSContains");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSContains");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
{
GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g ) /* exception thrown at construction */
- {
- HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+ if (!g)
+ HANDLE_GEOS_ERROR(
+ "First argument geometry could not be converted to "
+ "GEOS");
result = GEOSPreparedContainsProperly( prep_cache->prepared_geom, g);
GEOSGeom_destroy(g);
}
GEOSGeometry *g1;
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
- HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+ if (!g1)
+ HANDLE_GEOS_ERROR(
+ "First argument geometry could not be converted to "
+ "GEOS");
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted "
+ "to GEOS");
}
result = GEOSRelatePattern( g1, g2, "T**FF*FF*" );
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
}
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSContains");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSContains");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
{
GEOSGeometry *g1 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
- HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+ if (!g1)
+ HANDLE_GEOS_ERROR(
+ "First argument geometry could not be converted to "
+ "GEOS");
result = GEOSPreparedCovers( prep_cache->prepared_geom, g1);
GEOSGeom_destroy(g1);
}
GEOSGeometry *g2;
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
- HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+ if (!g1)
+ HANDLE_GEOS_ERROR(
+ "First argument geometry could not be converted to "
+ "GEOS");
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted "
+ "to GEOS");
}
result = GEOSRelatePattern( g1, g2, "******FF*" );
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
}
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSCovers");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSCovers");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
result = GEOSRelatePattern(g1,g2,patt);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSCoveredBy");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSCoveredBy");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
PG_RETURN_BOOL(result);
}
-
-
PG_FUNCTION_INFO_V1(crosses);
Datum crosses(PG_FUNCTION_ARGS)
{
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
result = GEOSCrosses(g1,g2);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSCrosses");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSCrosses");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
if ( prep_cache->argnum == 1 )
{
GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g ) /* exception thrown at construction */
- {
+ if (!g)
HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
result = GEOSPreparedIntersects( prep_cache->prepared_geom, g);
GEOSGeom_destroy(g);
}
else
{
GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g ) /* exception thrown at construction */
- {
+ if (!g)
HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
result = GEOSPreparedIntersects( prep_cache->prepared_geom, g);
GEOSGeom_destroy(g);
}
GEOSGeometry *g1;
GEOSGeometry *g2;
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
- HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
+ if (!g1)
+ HANDLE_GEOS_ERROR(
+ "First argument geometry could not be converted to "
+ "GEOS");
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted "
+ "to GEOS");
}
result = GEOSIntersects( g1, g2);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
}
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSIntersects");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSIntersects");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 );
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 );
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
result = GEOSTouches(g1,g2);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSTouches");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSTouches");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
result = GEOSDisjoint(g1,g2);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSDisjoint");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSDisjoint");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
geom1 = PG_GETARG_GSERIALIZED_P(0);
geom2 = PG_GETARG_GSERIALIZED_P(1);
-
/* TODO handle empty */
errorIfGeometryCollection(geom1,geom2);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
patt = DatumGetCString(DirectFunctionCall1(textout,
GEOSGeom_destroy(g2);
pfree(patt);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSRelatePattern");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSRelatePattern");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 );
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 );
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
POSTGIS_DEBUG(3, "constructed geometries ");
- if ((g1==NULL) || (g2 == NULL))
- elog(NOTICE,"g1 or g2 are null");
-
POSTGIS_DEBUGF(3, "%s", GEOSGeomToWKT(g1));
POSTGIS_DEBUGF(3, "%s", GEOSGeomToWKT(g2));
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (relate_str == NULL)
- {
- HANDLE_GEOS_ERROR("GEOSRelate");
- PG_RETURN_NULL(); /* never get here */
- }
+ if (!relate_str) HANDLE_GEOS_ERROR("GEOSRelate");
result = cstring2text(relate_str);
GEOSFree(relate_str);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
- if ( 0 == g2 ) /* exception thrown at construction */
+ if (!g2)
{
- HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
GEOSGeom_destroy(g1);
- PG_RETURN_NULL();
+ HANDLE_GEOS_ERROR(
+ "Second argument geometry could not be converted to GEOS");
}
result = GEOSEquals(g1,g2);
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSEquals");
- PG_RETURN_NULL(); /*never get here */
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSEquals");
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
initGEOS(lwpgnotice, lwgeom_geos_error);
g1 = (GEOSGeometry *)POSTGIS2GEOS(geom);
- if ( 0 == g1 ) /* exception thrown at construction */
- {
+ if (!g1)
HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
if ( GEOSGeomTypeId(g1) != GEOS_LINESTRING )
{
result = GEOSisRing(g1);
GEOSGeom_destroy(g1);
- if (result == 2)
- {
- HANDLE_GEOS_ERROR("GEOSisRing");
- PG_RETURN_NULL();
- }
+ if (result == 2) HANDLE_GEOS_ERROR("GEOSisRing");
PG_FREE_IF_COPY(geom, 0);
PG_RETURN_BOOL(result);
*is3d = *is3d || gserialized_has_z(geom);
geos_geoms[i] = (GEOSGeometry*) POSTGIS2GEOS(geom);
- if (!geos_geoms[i]) /* exception thrown at construction */
+ if (!geos_geoms[i])
{
uint32_t j;
lwpgerror("Geometry could not be converted to GEOS");
GEOSSetSRID(geos_result, srid);
result = GEOS2POSTGIS(geos_result, is3d);
GEOSGeom_destroy(geos_result);
- if ( result == NULL )
+ if (!result)
{
elog(ERROR, "%s returned an error", __func__);
PG_RETURN_NULL(); /*never get here */
input = PG_GETARG_GSERIALIZED_P(0);
input_geos = POSTGIS2GEOS(input);
- if (!input_geos) /* exception thrown at construction */
- {
+ if (!input_geos)
HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
error = GEOSMinimumClearance(input_geos, &result);
GEOSGeom_destroy(input_geos);
- if (error)
- {
- HANDLE_GEOS_ERROR("Error computing minimum clearance");
- PG_RETURN_NULL();
- }
+ if (error) HANDLE_GEOS_ERROR("Error computing minimum clearance");
PG_FREE_IF_COPY(input, 0);
PG_RETURN_FLOAT8(result);
input = PG_GETARG_GSERIALIZED_P(0);
srid = gserialized_get_srid(input);
input_geos = POSTGIS2GEOS(input);
- if (!input_geos) /* exception thrown at construction */
- {
+ if (!input_geos)
HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
- PG_RETURN_NULL();
- }
result_geos = GEOSMinimumClearanceLine(input_geos);
GEOSGeom_destroy(input_geos);
if (!result_geos)
- {
HANDLE_GEOS_ERROR("Error computing minimum clearance");
- PG_RETURN_NULL();
- }
GEOSSetSRID(result_geos, srid);
result = GEOS2POSTGIS(result_geos, LW_FALSE);
if (!z) *hasz = false;
ptarray_append_point(dpa, &p, LW_FALSE);
- x = y = z = false;
return dpa; /* ptarray_clone_deep(dpa); */
}
{
for (xb = xa->children ; xb != NULL ; xb = xb->next)
{
- if (xb != NULL)
- geom = (LWGEOM*)lwmpoint_add_lwpoint((LWMPOINT*)geom,
- (LWPOINT*)parse_gml(xb, hasz, root_srid));
+ geom = (LWGEOM*)lwmpoint_add_lwpoint(
+ (LWMPOINT*)geom,
+ (LWPOINT*)parse_gml(xb, hasz, root_srid));
}
}
else if (!strcmp((char *) xa->name, "pointMember"))
SELECT 'segmentize_geography_3667', abs(ST_Length(geog) - ST_Length(ST_Segmentize(geog, 30000))) < 0.00001
FROM (SELECT ST_GeographyFromText('LINESTRING(38.769917 10.780694, 38.769917 9.106194)') As geog) AS f;
--- Clean up spatial_ref_sys
-DELETE FROM spatial_ref_sys WHERE srid IN (4269,4326);
+-- typmod checks
+select 'typmod_point_4326', geography_typmod_out(geography_typmod_in('{Point,4326}'));
+select 'typmod_point_0', geography_typmod_out(geography_typmod_in('{Point,0}'));
+select 'typmod_point_-1', geography_typmod_out(geography_typmod_in('{Point,-1}'));
+select 'typmod_pointzm_0', geography_typmod_out(geography_typmod_in('{PointZM,0}'));
+select 'typmod_geometry_0', geography_typmod_out(geography_typmod_in('{Geometry,0}'));
+select 'typmod_geometry_4326', geography_typmod_out(geography_typmod_in('{Geometry,4326}'));
+select 'typmod_geography_0', geography_typmod_out(geography_typmod_in('{Geogrpahy,0}'));
+
+-- ST_DWithin
+select 'dwithin_pt_pt_1', ST_DWithin('POINT(0 0)'::geography, 'POINT(1 1)'::geography, 300000);
+select 'dwithin_pt_pt_2', ST_DWithin('POINT(0 0)'::geography, 'POINT(1 1)'::geography, 10);
+select 'dwithin_pt_line_1', ST_DWithin('POINT(0 0)'::geography, 'LINESTRING(1 1, 2 2)'::geography, 300000);
+select 'dwithin_line_pt_1', ST_DWithin('LINESTRING(1 1, 2 2)'::geography, 'POINT(0 0)'::geography, 300000);
+select 'dwithin_pt_poly_1', ST_DWithin('POINT(0 0)'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+select 'dwithin_poly_pt_1', ST_DWithin('POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 'POINT(0 0)'::geography, 300000);
+select 'dwithin_line_poly_1', ST_DWithin('LINESTRING(-1 -1, 0 0)'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+select 'dwithin_poly_line_1', ST_DWithin('POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 'LINESTRING(-1 -1, 0 0)'::geography, 300000);
+select 'dwithin_poly_poly_1', ST_DWithin('POLYGON((0 0, -2 -2, -3 0, 0 0))'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 10);
+select 'dwithin_poly_poly_2', ST_DWithin('POLYGON((0 0, -2 -2, -3 0, 0 0))'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+select 'dwithin_poly_poly_3', ST_DWithin('POLYGON((1 1, -2 -2, -3 0, 1 1))'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+-- Clean up spatial_ref_sys
+DELETE FROM spatial_ref_sys WHERE srid IN (4269, 4326);
segmentize_geography|39092
segmentize_geography2|t
segmentize_geography_3667|t
+typmod_point_4326|(Point,4326)
+typmod_point_0|(Point,4326)
+NOTICE: SRID value -1 converted to the officially unknown SRID value 0
+typmod_point_-1|(Point,4326)
+typmod_pointzm_0|(PointZM,4326)
+typmod_geometry_0|(Geometry,4326)
+typmod_geometry_4326|(Geometry,4326)
+ERROR: Invalid geometry type modifier: Geogrpahy
+dwithin_pt_pt_1|t
+dwithin_pt_pt_2|f
+dwithin_pt_line_1|t
+dwithin_line_pt_1|t
+dwithin_pt_poly_1|t
+dwithin_poly_pt_1|t
+dwithin_line_poly_1|t
+dwithin_poly_line_1|t
+dwithin_poly_poly_1|f
+dwithin_poly_poly_2|t
+dwithin_poly_poly_3|t
--- ST_Azimuth
SELECT 'ST_Azimuth_regular' , round(ST_Azimuth(geom1,geom2)::numeric,4)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, CAST('POINT(1 0)' AS geometry) AS geom2 ;
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, CAST('POINT(1 0)' AS geometry) AS geom2 ;
SELECT 'ST_Azimuth_same_point' , ST_Azimuth(geom1,geom1)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1 ;
+FROM CAST('POINT(0 1)' AS geometry) AS geom1 ;
SELECT 'ST_Azimuth_mixed_srid' , ST_Azimuth(geom1,geom2)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('POINT(1 0)',4326) AS geom2;
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('POINT(1 0)',4326) AS geom2;
SELECT 'ST_Azimuth_not_point' , ST_Azimuth(geom1,geom2)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('LINESTRING(1 0 ,2 0)',4326) AS geom2;
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('LINESTRING(1 0 ,2 0)',4326) AS geom2;
SELECT 'ST_Azimuth_null_geom' , ST_Azimuth(geom1,geom2)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('EMPTY') AS geom2;
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('EMPTY') AS geom2;
---- ST_Angle( points)
+--- ST_Angle(points)
SELECT 'ST_Angle_4_pts', St_Angle(p1,p2,p3,p4)
FROM ST_GeomFromtext('POINT(0 1)') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
- , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
+ , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
SELECT 'ST_Angle_4_pts', St_Angle(p1,p2,p3,p4)
FROM ST_GeomFromtext('POINT(2 0)') AS p1, ST_GeomFromtext('POINT(1 0)') AS p2
- , ST_GeomFromtext('POINT(1 -1)') AS p3, ST_GeomFromtext('POINT(0 0)') AS p4 ;
+ , ST_GeomFromtext('POINT(1 -1)') AS p3, ST_GeomFromtext('POINT(0 0)') AS p4;
SELECT 'ST_Angle_3_pts', St_Angle(p1,p2,p3)
FROM ST_GeomFromtext('POINT(0 1)') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
- , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
+ , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
SELECT 'ST_Angle_mixed_srid', St_Angle(p1,p2,p3,p4)
FROM ST_GeomFromtext('POINT(0 1)') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
- , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
+ , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
SELECT 'ST_Angle_empty' , St_Angle(p1,p2,p3,p4)
FROM ST_GeomFromtext('POINT EMPTY') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
- , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
---- ST_Angle( lines)
+ , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
+--- ST_Angle(lines)
SELECT 'ST_Angle_2_lines', St_Angle(l1,l2)
FROM ST_GeomFromtext('LINESTRING(0 1,0 0)') AS l1
- , ST_GeomFromtext('LINESTRING(1 0, 2 0)') AS l2 ;
+ , ST_GeomFromtext('LINESTRING(1 0, 2 0)') AS l2;
--- ST_ClusterKMeans
group by cid
order by count(*)
limit 1;
+
+
+-- typmod checks
+select 'typmod_point_4326', geometry_typmod_out(geometry_typmod_in('{Point,4326}'));
+select 'typmod_point_0', geometry_typmod_out(geometry_typmod_in('{Point,0}'));
+select 'typmod_point_-1', geometry_typmod_out(geometry_typmod_in('{Point,-1}'));
+select 'typmod_pointzm_0', geometry_typmod_out(geometry_typmod_in('{PointZM,0}'));
+select 'typmod_geometry_0', geometry_typmod_out(geometry_typmod_in('{Geometry,0}'));
+select 'typmod_geometry_4326', geometry_typmod_out(geometry_typmod_in('{Geometry,4326}'));
+select 'typmod_geography_0', geometry_typmod_out(geometry_typmod_in('{Geogrpahy,0}'));
ST_Angle_2_lines|4.71238898038469
#3965|25|25
#3971|t
+typmod_point_4326|(Point,4326)
+typmod_point_0|(Point)
+NOTICE: SRID value -1 converted to the officially unknown SRID value 0
+typmod_point_-1|(Point)
+typmod_pointzm_0|(PointZM)
+typmod_geometry_0|
+typmod_geometry_4326|(Geometry,4326)
+ERROR: Invalid geometry type modifier: Geogrpahy
--
-- Empty Geometry
-SELECT 'gml_empty_geom', ST_AsGML(geography(GeomFromEWKT(NULL)));
+SELECT 'gml_empty_geom', ST_AsGML(geography(ST_GeomFromEWKT('GEOMETRYCOLLECTION EMPTY')));
-- Precision
-SELECT 'gml_precision_01', ST_AsGML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
-SELECT 'gml_precision_02', ST_AsGML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
+SELECT 'gml_precision_01', ST_AsGML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
+SELECT 'gml_precision_02', ST_AsGML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
-- Version
-SELECT 'gml_version_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'gml_version_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'gml_version_03', ST_AsGML(21, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'gml_version_04', ST_AsGML(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_02', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_03', ST_AsGML(21, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_04', ST_AsGML(-4, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
-- Option
-SELECT 'gml_option_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 0);
-SELECT 'gml_option_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 1);
-SELECT 'gml_option_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2);
+SELECT 'gml_option_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
+SELECT 'gml_option_02', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+SELECT 'gml_option_03', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 2);
+SELECT 'gml_option_04', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 4);
+
+-- These are geometry-only
+SELECT 'gml_option_05', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 16);
+SELECT 'gml_option_06', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)')), 0, 32);
+SELECT 'gml_option_07', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)')), 0, 32);
-- Deegree data
-SELECT 'gml_deegree_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
-SELECT 'gml_deegree_02', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
-SELECT 'gml_deegree_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
-SELECT 'gml_deegree_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+SELECT 'gml_deegree_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
+SELECT 'gml_deegree_02', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+SELECT 'gml_deegree_03', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
+SELECT 'gml_deegree_04', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
-- Prefix
-SELECT 'gml_prefix_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
-SELECT 'gml_prefix_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
-SELECT 'gml_prefix_03', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
-SELECT 'gml_prefix_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
+SELECT 'gml_prefix_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
+SELECT 'gml_prefix_02', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
+SELECT 'gml_prefix_03', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
+SELECT 'gml_prefix_04', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
--
--
-- SRID
-SELECT 'kml_srid_01', ST_AsKML(geography(GeomFromEWKT('SRID=10;POINT(0 1)')));
-SELECT 'kml_srid_02', ST_AsKML(geography(GeomFromEWKT('POINT(0 1)')));
+SELECT 'kml_srid_01', ST_AsKML(geography(ST_GeomFromEWKT('SRID=10;POINT(0 1)')));
+SELECT 'kml_srid_02', ST_AsKML(geography(ST_GeomFromEWKT('POINT(0 1)')));
-- Empty Geometry
-SELECT 'kml_empty_geom', ST_AsKML(geography(GeomFromEWKT(NULL)));
+SELECT 'kml_empty_geom', ST_AsKML(geography(ST_GeomFromEWKT(NULL)));
-- Precision
-SELECT 'kml_precision_01', ST_AsKML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
-SELECT 'kml_precision_02', ST_AsKML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
+SELECT 'kml_precision_01', ST_AsKML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
+SELECT 'kml_precision_02', ST_AsKML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
-- Version
-SELECT 'kml_version_01', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'kml_version_02', ST_AsKML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'kml_version_03', ST_AsKML(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'kml_version_01', ST_AsKML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'kml_version_02', ST_AsKML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'kml_version_03', ST_AsKML(-4, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
-- Prefix
-SELECT 'kml_prefix_01', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, '');
-SELECT 'kml_prefix_02', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 'kml');
+SELECT 'kml_prefix_01', ST_AsKML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, '');
+SELECT 'kml_prefix_02', ST_AsKML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 'kml');
-- Projected
-- National Astronomical Observatory of Colombia - Bogota, Colombia (Placemark)
-SELECT 'kml_projection_01', ST_AsKML(geography(GeomFromEWKT('SRID=102189;POINT(1000000 1000000)')), 3);
+SELECT 'kml_projection_01', ST_AsKML(geography(ST_GeomFromEWKT('SRID=102189;POINT(1000000 1000000)')), 3);
--
--
-- Empty Geometry
-SELECT 'svg_empty_geom', ST_AsSVG(geography(GeomFromEWKT(NULL)));
+SELECT 'svg_empty_geom', ST_AsSVG(geography(ST_GeomFromEWKT(NULL)));
-- Option
-SELECT 'svg_option_01', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0);
-SELECT 'svg_option_02', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1);
-SELECT 'svg_option_03', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0, 0);
-SELECT 'svg_option_04', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1, 0);
+SELECT 'svg_option_01', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0);
+SELECT 'svg_option_02', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1);
+SELECT 'svg_option_03', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0, 0);
+SELECT 'svg_option_04', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1, 0);
-- Precision
-SELECT 'svg_precision_01', ST_AsSVG(geography(GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, -2);
-SELECT 'svg_precision_02', ST_AsSVG(geography(GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, 19);
+SELECT 'svg_precision_01', ST_AsSVG(geography(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, -2);
+SELECT 'svg_precision_02', ST_AsSVG(geography(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, 19);
--
--- GeoJson
+-- GeoJSON
--
-- Empty Geometry
-SELECT 'geojson_empty_geom', ST_AsGeoJson(geography(GeomFromEWKT(NULL)));
+SELECT 'geojson_empty_geom', ST_AsGeoJSON(geography(ST_GeomFromEWKT(NULL)));
-- Precision
-SELECT 'geojson_precision_01', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
-SELECT 'geojson_precision_02', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
+SELECT 'geojson_precision_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
+SELECT 'geojson_precision_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
-- Version
-SELECT 'geojson_version_01', ST_AsGeoJson(1, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'geojson_version_02', ST_AsGeoJson(21, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'geojson_version_03', ST_AsGeoJson(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'geojson_version_01', ST_AsGeoJSON(1, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'geojson_version_02', ST_AsGeoJSON(21, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'geojson_version_03', ST_AsGeoJSON(-4, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
-- CRS
-SELECT 'geojson_crs_01', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2);
-SELECT 'geojson_crs_02', ST_AsGeoJson(geography(GeomFromEWKT('POINT(1 1)')), 0, 2);
-SELECT 'geojson_crs_03', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 4);
-SELECT 'geojson_crs_04', ST_AsGeoJson(geography(GeomFromEWKT('POINT(1 1)')), 0, 4);
-SELECT 'geojson_crs_05', ST_AsGeoJson(geography(GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 2);
-SELECT 'geojson_crs_06', ST_AsGeoJson(geography(GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 4);
+SELECT 'geojson_crs_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2);
+SELECT 'geojson_crs_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('POINT(1 1)')), 0, 2);
+SELECT 'geojson_crs_03', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 4);
+SELECT 'geojson_crs_04', ST_AsGeoJSON(geography(ST_GeomFromEWKT('POINT(1 1)')), 0, 4);
+SELECT 'geojson_crs_05', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 2);
+SELECT 'geojson_crs_06', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 4);
-- Bbox
-SELECT 'geojson_bbox_01', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
-SELECT 'geojson_bbox_02', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
-SELECT 'geojson_bbox_03', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
-SELECT 'geojson_bbox_04', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
+SELECT 'geojson_bbox_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
+SELECT 'geojson_bbox_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
+SELECT 'geojson_bbox_03', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
+SELECT 'geojson_bbox_04', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
-- CRS and Bbox
-SELECT 'geojson_options_01', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 0);
-SELECT 'geojson_options_02', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
-SELECT 'geojson_options_03', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
-SELECT 'geojson_options_04', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
-SELECT 'geojson_options_05', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
-SELECT 'geojson_options_06', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
-SELECT 'geojson_options_07', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
-SELECT 'geojson_options_08', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
-SELECT 'geojson_options_09', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
-SELECT 'geojson_options_10', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
-SELECT 'geojson_options_11', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
-SELECT 'geojson_options_12', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
-SELECT 'geojson_options_13', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
-SELECT 'geojson_options_14', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
-SELECT 'geojson_options_15', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
-SELECT 'geojson_options_16', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
+SELECT 'geojson_options_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 0);
+SELECT 'geojson_options_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
+SELECT 'geojson_options_03', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
+SELECT 'geojson_options_04', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
+SELECT 'geojson_options_05', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
+SELECT 'geojson_options_06', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
+SELECT 'geojson_options_07', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
+SELECT 'geojson_options_08', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
+SELECT 'geojson_options_09', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
+SELECT 'geojson_options_10', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
+SELECT 'geojson_options_11', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
+SELECT 'geojson_options_12', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
+SELECT 'geojson_options_13', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
+SELECT 'geojson_options_14', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
+SELECT 'geojson_options_15', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
+SELECT 'geojson_options_16', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
--
gml_version_02|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
ERROR: Only GML 2 and GML 3 are supported
ERROR: Only GML 2 and GML 3 are supported
-gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point>
-gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
-gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point>
+gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
+gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
+gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>
+ERROR: Options 4 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
+ERROR: Options 16 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
+ERROR: Options 32 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
+ERROR: Options 32 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
gml_deegree_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
gml_deegree_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
--
-- Empty Geometry
-SELECT 'gml_empty_geom', ST_AsGML(GeomFromEWKT(NULL));
+SELECT 'gml_empty_geom', ST_AsGML(ST_GeomFromEWKT(NULL));
-- Precision
-SELECT 'gml_precision_01', ST_AsGML(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
-SELECT 'gml_precision_02', ST_AsGML(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
+SELECT 'gml_precision_01', ST_AsGML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
+SELECT 'gml_precision_02', ST_AsGML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
-- Version
-SELECT 'gml_version_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'gml_version_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'gml_version_03', ST_AsGML(21, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'gml_version_04', ST_AsGML(-4, GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_01', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_02', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_03', ST_AsGML(21, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_04', ST_AsGML(-4, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
-- Option
-SELECT 'gml_option_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 0);
-SELECT 'gml_option_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 1);
-SELECT 'gml_option_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2);
+SELECT 'gml_option_01', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
+SELECT 'gml_option_02', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 1);
+SELECT 'gml_option_03', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 2);
+SELECT 'gml_option_04', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 4);
+SELECT 'gml_option_05', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'gml_option_06', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)'), 0, 32);
+SELECT 'gml_option_07', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)'), 0, 32);
-- Deegree data
-SELECT 'gml_deegree_01', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
-SELECT 'gml_deegree_02', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
-SELECT 'gml_deegree_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
-SELECT 'gml_deegree_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0);
-SELECT 'gml_deegree_05', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
-SELECT 'gml_deegree_06', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
+SELECT 'gml_deegree_01', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
+SELECT 'gml_deegree_02', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'gml_deegree_03', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'gml_deegree_04', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0);
+SELECT 'gml_deegree_05', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
+SELECT 'gml_deegree_06', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
-- Prefix
-SELECT 'gml_prefix_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
-SELECT 'gml_prefix_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
-SELECT 'gml_prefix_03', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
-SELECT 'gml_prefix_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
+SELECT 'gml_prefix_01', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
+SELECT 'gml_prefix_02', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
+SELECT 'gml_prefix_03', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
+SELECT 'gml_prefix_04', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
-- LineString
-SELECT 'gml_shortline_01', ST_AsGML(3, GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 6, '');
-SELECT 'gml_shortline_02', ST_AsGML(3, GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 2, '');
-SELECT 'gml_shortline_03', ST_AsGML(3, GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 6, '');
-SELECT 'gml_shortline_04', ST_AsGML(3, GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 2, '');
+SELECT 'gml_shortline_01', ST_AsGML(3, ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 6, '');
+SELECT 'gml_shortline_02', ST_AsGML(3, ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 2, '');
+SELECT 'gml_shortline_03', ST_AsGML(3, ST_GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 6, '');
+SELECT 'gml_shortline_04', ST_AsGML(3, ST_GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 2, '');
-- CIRCULARSTRING / COMPOUNDCURVE / CURVEPOLYGON / MULTISURFACE / MULTICURVE
-SELECT 'gml_out_curve_01', ST_AsGML( 3, GeomFromEWKT('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)'));
-SELECT 'gml_out_curve_02', ST_ASGML( 3, GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))'));
-SELECT 'gml_out_curve_03', ST_AsGML( 3, GeomFromEWKT('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))'));
-SELECT 'gml_out_curve_04', ST_AsGML( 3, GeomFromEWKT('MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))'));
-SELECT 'gml_out_curve_05', ST_AsGML( 3, GeomFromEWKT('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)))'));
+SELECT 'gml_out_curve_01', ST_AsGML(3, ST_GeomFromEWKT('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)'));
+SELECT 'gml_out_curve_02', ST_ASGML(3, ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))'));
+SELECT 'gml_out_curve_03', ST_AsGML(3, ST_GeomFromEWKT('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))'));
+SELECT 'gml_out_curve_04', ST_AsGML(3, ST_GeomFromEWKT('MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))'));
+SELECT 'gml_out_curve_05', ST_AsGML(3, ST_GeomFromEWKT('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)))'));
--
-- KML
--
-- SRID
-SELECT 'kml_srid_01', ST_AsKML(GeomFromEWKT('SRID=10;POINT(0 1)'));
-SELECT 'kml_srid_02', ST_AsKML(GeomFromEWKT('POINT(0 1)'));
+SELECT 'kml_srid_01', ST_AsKML(ST_GeomFromEWKT('SRID=10;POINT(0 1)'));
+SELECT 'kml_srid_02', ST_AsKML(ST_GeomFromEWKT('POINT(0 1)'));
-- Empty Geometry
-SELECT 'kml_empty_geom', ST_AsKML(GeomFromEWKT(NULL));
+SELECT 'kml_empty_geom', ST_AsKML(ST_GeomFromEWKT(NULL));
-- Precision
SELECT 'kml_precision_01', ST_AsKML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
SELECT 'kml_precision_02', ST_AsKML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
-- Version
-SELECT 'kml_version_01', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'kml_version_02', ST_AsKML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'kml_version_03', ST_AsKML(-4, GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'kml_version_01', ST_AsKML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'kml_version_02', ST_AsKML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'kml_version_03', ST_AsKML(-4, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
-- Prefix
-SELECT 'kml_prefix_01', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, '');
-SELECT 'kml_prefix_02', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 'kml');
+SELECT 'kml_prefix_01', ST_AsKML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, '');
+SELECT 'kml_prefix_02', ST_AsKML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 'kml');
-- Projected
-- National Astronomical Observatory of Colombia - Bogota, Colombia (Placemark)
--
-- Encoded Polyline
--
-SELECT 'encoded_polyline_01', ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
-SELECT 'encoded_polyline_02', ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;MULTIPOINT(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
-SELECT 'encoded_polyline_03', ST_AsEncodedPolyline(GeomFromEWKT('LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
-SELECT 'encoded_polyline_04', ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.234467 38.5,-120.95 40.7343495,-126.453 43.252)'), 6);
+SELECT 'encoded_polyline_01', ST_AsEncodedPolyline(ST_GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
+SELECT 'encoded_polyline_02', ST_AsEncodedPolyline(ST_GeomFromEWKT('SRID=4326;MULTIPOINT(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
+SELECT 'encoded_polyline_03', ST_AsEncodedPolyline(ST_GeomFromEWKT('LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
+SELECT 'encoded_polyline_04', ST_AsEncodedPolyline(ST_GeomFromEWKT('SRID=4326;LINESTRING(-120.234467 38.5,-120.95 40.7343495,-126.453 43.252)'), 6);
--
-- SVG
--
-- Empty Geometry
-SELECT 'svg_empty_geom', ST_AsSVG(GeomFromEWKT(NULL));
+SELECT 'svg_empty_geom', ST_AsSVG(ST_GeomFromEWKT(NULL));
-- Option
-SELECT 'svg_option_01', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0);
-SELECT 'svg_option_02', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1);
-SELECT 'svg_option_03', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0, 0);
-SELECT 'svg_option_04', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1, 0);
+SELECT 'svg_option_01', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0);
+SELECT 'svg_option_02', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1);
+SELECT 'svg_option_03', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0, 0);
+SELECT 'svg_option_04', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1, 0);
-- Precision
-SELECT 'svg_precision_01', ST_AsSVG(GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, -2);
-SELECT 'svg_precision_02', ST_AsSVG(GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, 19);
+SELECT 'svg_precision_01', ST_AsSVG(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, -2);
+SELECT 'svg_precision_02', ST_AsSVG(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, 19);
--
--- GeoJson
+-- GeoJSON
--
-- Empty Geometry
-SELECT 'geojson_empty_geom', ST_AsGeoJson(GeomFromEWKT(NULL));
+SELECT 'geojson_empty_geom', ST_AsGeoJSON(ST_GeomFromEWKT(NULL));
-- Precision
-SELECT 'geojson_precision_01', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
-SELECT 'geojson_precision_02', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
+SELECT 'geojson_precision_01', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
+SELECT 'geojson_precision_02', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
-- Version
-SELECT 'geojson_version_01', ST_AsGeoJson(1, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'geojson_version_02', ST_AsGeoJson(21, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'geojson_version_03', ST_AsGeoJson(-4, GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'geojson_version_01', ST_AsGeoJSON(1, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'geojson_version_02', ST_AsGeoJSON(21, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'geojson_version_03', ST_AsGeoJSON(-4, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
-- CRS
-SELECT 'geojson_crs_01', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2);
-SELECT 'geojson_crs_02', ST_AsGeoJson(GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 2);
-SELECT 'geojson_crs_03', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 4);
-SELECT 'geojson_crs_04', ST_AsGeoJson(GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 4);
-SELECT 'geojson_crs_05', ST_AsGeoJson(GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 2);
-SELECT 'geojson_crs_06', ST_AsGeoJson(GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 4);
+SELECT 'geojson_crs_01', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2);
+SELECT 'geojson_crs_02', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 2);
+SELECT 'geojson_crs_03', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 4);
+SELECT 'geojson_crs_04', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 4);
+SELECT 'geojson_crs_05', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 2);
+SELECT 'geojson_crs_06', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 4);
-- Bbox
-SELECT 'geojson_bbox_01', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
-SELECT 'geojson_bbox_02', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
-SELECT 'geojson_bbox_03', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
-SELECT 'geojson_bbox_04', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
+SELECT 'geojson_bbox_01', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
+SELECT 'geojson_bbox_02', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
+SELECT 'geojson_bbox_03', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
+SELECT 'geojson_bbox_04', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
-- CRS and Bbox
-SELECT 'geojson_options_01', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 0);
-SELECT 'geojson_options_02', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
-SELECT 'geojson_options_03', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
-SELECT 'geojson_options_04', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
-SELECT 'geojson_options_05', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
-SELECT 'geojson_options_06', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
-SELECT 'geojson_options_07', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
-SELECT 'geojson_options_08', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
-SELECT 'geojson_options_09', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
-SELECT 'geojson_options_10', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
-SELECT 'geojson_options_11', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
-SELECT 'geojson_options_12', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
-SELECT 'geojson_options_13', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
-SELECT 'geojson_options_14', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
-SELECT 'geojson_options_15', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
-SELECT 'geojson_options_16', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
+SELECT 'geojson_options_01', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 0);
+SELECT 'geojson_options_02', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
+SELECT 'geojson_options_03', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
+SELECT 'geojson_options_04', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
+SELECT 'geojson_options_05', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
+SELECT 'geojson_options_06', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
+SELECT 'geojson_options_07', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
+SELECT 'geojson_options_08', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
+SELECT 'geojson_options_09', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
+SELECT 'geojson_options_10', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
+SELECT 'geojson_options_11', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
+SELECT 'geojson_options_12', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
+SELECT 'geojson_options_13', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
+SELECT 'geojson_options_14', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
+SELECT 'geojson_options_15', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
+SELECT 'geojson_options_16', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
-- Out and in to PostgreSQL native geometric types
WITH p AS ( SELECT '((0,0),(0,1),(1,1),(1,0),(0,0))'::text AS p )
gml_version_02|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
ERROR: Only GML 2 and GML 3 are supported
ERROR: Only GML 2 and GML 3 are supported
-gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point>
-gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
-gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point>
+gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
+gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
+gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>
+gml_option_04|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
+gml_option_05|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
+gml_option_06|<gml:Box srsName="EPSG:4326"><gml:coordinates>1,2 3,4</gml:coordinates></gml:Box>
+gml_option_07|<gml:Envelope srsName="EPSG:4326" srsDimension="2"><gml:lowerCorner>1 2</gml:lowerCorner><gml:upperCorner>3 4</gml:upperCorner></gml:Envelope>
gml_deegree_01|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
gml_deegree_02|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
static SPIPlanPtr plan = NULL;
argtypes[0] = CSTRINGOID;
+ sql =
+ "SELECT id,srid,precision,null::geometry "
+ "FROM topology.topology WHERE name = $1::varchar";
if ( ! plan ) /* prepare on first call */
{
- sql = "SELECT id,srid,precision,null::geometry"
- " FROM topology.topology "
- "WHERE name = $1::varchar";
plan = SPI_prepare(sql, 1, argtypes);
if ( ! plan )
{