2795{
2796 GSERIALIZED *pg_geom1 = PG_GETARG_GSERIALIZED_P(0);
2797 GSERIALIZED *pg_geom2 = PG_GETARG_GSERIALIZED_P(1);
2798 double dist = PG_GETARG_FLOAT8(2);
2800 double calc_dist;
2804
2806 {
2807 elog(ERROR, "optimistic_overlap: first arg isn't a polygon\n");
2808 PG_RETURN_NULL();
2809 }
2810
2812 {
2813 elog(ERROR, "optimistic_overlap: 2nd arg isn't a [multi-]polygon\n");
2814 PG_RETURN_NULL();
2815 }
2816
2817
2819
2820 g1_bvol.
xmin = g1_bvol.
xmin - dist;
2821 g1_bvol.
ymin = g1_bvol.
ymin - dist;
2822 g1_bvol.
xmax = g1_bvol.
xmax + dist;
2823 g1_bvol.
ymax = g1_bvol.
ymax + dist;
2824
2827 {
2828 PG_RETURN_BOOL(false);
2829 }
2830
2831
2832
2833
2834
2835 calc_dist =
2836 DatumGetFloat8(DirectFunctionCall2(
ST_Distance, PointerGetDatum(pg_geom1), PointerGetDatum(pg_geom2)));
2837
2838 PG_RETURN_BOOL(calc_dist < dist);
2839}
void gserialized_error_if_srid_mismatch(const GSERIALIZED *g1, const GSERIALIZED *g2, const char *funcname)
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
int gserialized_get_gbox_p(const GSERIALIZED *g, GBOX *gbox)
Read the box from the GSERIALIZED or calculate it if necessary.
Datum ST_Distance(PG_FUNCTION_ARGS)