Datum lwgeom_gt(PG_FUNCTION_ARGS);
Datum lwgeom_cmp(PG_FUNCTION_ARGS);
-
-#define BTREE_SRID_MISMATCH_SEVERITY ERROR
-
PG_FUNCTION_INFO_V1(lwgeom_lt);
Datum lwgeom_lt(PG_FUNCTION_ARGS)
{
POSTGIS_DEBUG(2, "lwgeom_lt called");
- if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2))
- {
- elog(BTREE_SRID_MISMATCH_SEVERITY,
- "Operation on two GEOMETRIES with different SRIDs\n");
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
POSTGIS_DEBUG(3, "lwgeom_lt passed getSRID test");
POSTGIS_DEBUG(2, "lwgeom_le called");
- if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2))
- {
- elog(BTREE_SRID_MISMATCH_SEVERITY,
- "Operation on two GEOMETRIES with different SRIDs\n");
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
gserialized_get_gbox_p(geom1, &box1);
gserialized_get_gbox_p(geom2, &box2);
POSTGIS_DEBUG(2, "lwgeom_eq called");
- if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2))
- {
- elog(BTREE_SRID_MISMATCH_SEVERITY,
- "Operation on two GEOMETRIES with different SRIDs\n");
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
gbox_init(&box1);
gbox_init(&box2);
POSTGIS_DEBUG(2, "lwgeom_ge called");
- if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2))
- {
- elog(BTREE_SRID_MISMATCH_SEVERITY,
- "Operation on two GEOMETRIES with different SRIDs\n");
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
gserialized_get_gbox_p(geom1, &box1);
gserialized_get_gbox_p(geom2, &box2);
POSTGIS_DEBUG(2, "lwgeom_gt called");
- if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2))
- {
- elog(BTREE_SRID_MISMATCH_SEVERITY,
- "Operation on two GEOMETRIES with different SRIDs\n");
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
gserialized_get_gbox_p(geom1, &box1);
gserialized_get_gbox_p(geom2, &box2);
POSTGIS_DEBUG(2, "lwgeom_cmp called");
- if (gserialized_get_srid(geom1) != gserialized_get_srid(geom2))
- {
- elog(BTREE_SRID_MISMATCH_SEVERITY,
- "Operation on two GEOMETRIES with different SRIDs\n");
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2));
gserialized_get_gbox_p(geom1, &box1);
gserialized_get_gbox_p(geom2, &box2);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
point = lwgeom_closest_point(lwgeom1, lwgeom2);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
theline = lwgeom_closest_line(lwgeom1, lwgeom2);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
theline = lwgeom_furthest_line(lwgeom1, lwgeom2);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
mindist = lwgeom_mindistance2d(lwgeom1, lwgeom2);
PG_RETURN_NULL();
}
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
mindist = lwgeom_mindistance2d_tolerance(lwgeom1,lwgeom2,tolerance);
PG_RETURN_NULL();
}
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
maxdist = lwgeom_maxdistance2d_tolerance(lwgeom1, lwgeom2, tolerance);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
maxdist = lwgeom_maxdistance2d(lwgeom1, lwgeom2);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
point = lwgeom_closest_point_3d(lwgeom1, lwgeom2);
// point = lw_dist3d_distancepoint(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MIN);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
theline = lwgeom_closest_line_3d(lwgeom1, lwgeom2);
// theline = lw_dist3d_distanceline(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MIN);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
theline = lwgeom_furthest_line_3d(lwgeom1, lwgeom2);
// theline = lw_dist3d_distanceline(lwgeom1, lwgeom2, lwgeom1->srid, DIST_MAX);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
mindist = lwgeom_mindistance3d(lwgeom1, lwgeom2);
PG_RETURN_NULL();
}
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
mindist = lwgeom_mindistance3d_tolerance(lwgeom1,lwgeom2,tolerance);
PG_RETURN_NULL();
}
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
maxdist = lwgeom_maxdistance3d_tolerance(lwgeom1, lwgeom2, tolerance);
PG_FREE_IF_COPY(geom1, 0);
LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1);
LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2);
- if (lwgeom1->srid != lwgeom2->srid)
- {
- elog(ERROR,"Operation on two GEOMETRIES with different SRIDs\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeom1->srid, lwgeom2->srid);
maxdist = lwgeom_maxdistance3d(lwgeom1, lwgeom2);
else
{
/* Check SRID homogeneity */
- if ( lwgeoms[count]->srid != srid )
- {
- elog(ERROR, "Operation on mixed SRID geometries");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(lwgeoms[count]->srid, srid);
/* COMPUTE_BBOX WHEN_SIMPLE */
if ( box )
}
else
{
- if ( geoms[ngeoms-1]->srid != srid )
- {
- elog(ERROR, "Operation on mixed SRID geometries");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(geoms[ngeoms-1]->srid, srid);
}
POSTGIS_DEBUGF(3, "%s: element %d deserialized", __func__, ngeoms);
LWLINE *line, *linecopy;
int where = -1;
- POSTGIS_DEBUG(2, "LWGEOM_addpoint called.");
+ POSTGIS_DEBUGF(2, "%s called.", __func__);
pglwg1 = PG_GETARG_GSERIALIZED_P(0);
pglwg2 = PG_GETARG_GSERIALIZED_P(1);
LWGEOM *geom1 = lwgeom_from_gserialized(pg_geom1);
LWGEOM *geom2 = lwgeom_from_gserialized(pg_geom2);
- if (geom1->srid != geom2->srid)
- {
- elog(ERROR,"optimistic_overlap:Operation on two GEOMETRIES with different SRIDs\\n");
- PG_RETURN_NULL();
- }
+ error_if_srid_mismatch(geom1->srid, geom2->srid);
if (geom1->type != POLYGONTYPE)
{