}
}
+int gbox_union(const GBOX *g1, const GBOX *g2, GBOX *gout)
+{
+ if ( (g1 == NULL) && (g2 == NULL) )
+ return LW_FALSE;
+
+ if (g1 == NULL)
+ {
+ memcpy(gout, g2, sizeof(GBOX));
+ return LW_TRUE;
+ }
+ if (g2 == NULL)
+ {
+ memcpy(gout, g1, sizeof(GBOX));
+ return LW_TRUE;
+ }
+
+ if (g1->xmin < g2->xmin) gout->xmin = g1->xmin;
+ else gout->xmin = g2->xmin;
+
+ if (g1->ymin < g2->ymin) gout->ymin = g1->ymin;
+ else gout->ymin = g2->ymin;
+
+ if (g1->xmax > g2->xmax) gout->xmax = g1->xmax;
+ else gout->xmax = g2->xmax;
+
+ if (g1->ymax > g2->ymax) gout->ymax = g1->ymax;
+ else gout->ymax = g2->ymax;
+
+ return LW_TRUE;
+}
+
int gbox_same(const GBOX *g1, const GBOX *g2)
{
if (FLAGS_GET_ZM(g1->flags) != FLAGS_GET_ZM(g2->flags))
*/
extern int gbox_merge(const GBOX *new_box, GBOX *merged_box);
+/**
+* Update the output #GBOX to be large enough to include both inputs.
+*/
+extern int gbox_union(const GBOX *g1, const GBOX *g2, GBOX *gout);
+
/**
* Move the box minimums down and the maximums up by the distance provided.
*/
BOX2DFLOAT4 *n;
n = (BOX2DFLOAT4 *) lwalloc(sizeof(BOX2DFLOAT4));
+#ifdef GSERIALIZED_ON
+ if ( ! gbox_union(a,b,n) ) PG_RETURN_NULL();
+#else
if ( ! box2d_union_p(a,b,n) ) PG_RETURN_NULL();
+#endif
PG_RETURN_POINTER(n);
}
BOX2DFLOAT4 *result = (BOX2DFLOAT4 *)palloc(sizeof(BOX2DFLOAT4));
memcpy(result, box, sizeof(BOX2DFLOAT4));
+#ifdef GSERIALIZED_ON
+ gbox_expand(result, d);
+#else
expand_box2d(result, d);
-
+#endif
+
PG_RETURN_POINTER(result);
}
*sizep = sizeof(BOX2DFLOAT4);
- POSTGIS_DEBUGF(3, "GIST: gbox_union called with numranges=%i pageunion is: <%.16g %.16g,%.16g %.16g>", numranges,pageunion->xmin, pageunion->ymin, pageunion->xmax, pageunion->ymax);
+ POSTGIS_DEBUGF(3, "GIST: LWGEOM_gist_union called with numranges=%i pageunion is: <%.16g %.16g,%.16g %.16g>", numranges,pageunion->xmin, pageunion->ymin, pageunion->xmax, pageunion->ymax);
PG_RETURN_POINTER(pageunion);
}