2822{
2823 GSERIALIZED *pg_geom1 = PG_GETARG_GSERIALIZED_P(0);
2824 GSERIALIZED *pg_geom2 = PG_GETARG_GSERIALIZED_P(1);
2825 double dist = PG_GETARG_FLOAT8(2);
2827 double calc_dist;
2831
2833 {
2834 elog(ERROR, "optimistic_overlap: first arg isn't a polygon\n");
2835 PG_RETURN_NULL();
2836 }
2837
2839 {
2840 elog(ERROR, "optimistic_overlap: 2nd arg isn't a [multi-]polygon\n");
2841 PG_RETURN_NULL();
2842 }
2843
2844
2846
2847 g1_bvol.
xmin = g1_bvol.
xmin - dist;
2848 g1_bvol.
ymin = g1_bvol.
ymin - dist;
2849 g1_bvol.
xmax = g1_bvol.
xmax + dist;
2850 g1_bvol.
ymax = g1_bvol.
ymax + dist;
2851
2854 {
2855 PG_RETURN_BOOL(false);
2856 }
2857
2858
2859
2860
2861
2862 calc_dist =
2863 DatumGetFloat8(DirectFunctionCall2(
ST_Distance, PointerGetDatum(pg_geom1), PointerGetDatum(pg_geom2)));
2864
2865 PG_RETURN_BOOL(calc_dist < dist);
2866}
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)