PostGIS  2.5.0beta2dev-r@@SVN_REVISION@@

◆ gserialized_get_gbox_p()

int gserialized_get_gbox_p ( const GSERIALIZED g,
GBOX box 
)

Pull a GBOX from the header of a GSERIALIZED, if one is available.

If it is not, calculate it from the geometry. If that doesn't work (null or empty) return LW_FAILURE.

Pull a GBOX from the header of a GSERIALIZED, if one is available.

Definition at line 639 of file g_serialized.c.

References gbox_float_round(), gserialized_from_any_size(), gserialized_peek_gbox_p(), gserialized_read_gbox_p(), LW_SUCCESS, lwgeom_calculate_gbox(), lwgeom_free(), and lwgeom_from_gserialized().

Referenced by BOX2D_combine(), CircTreePIP(), compute_gserialized_stats_mode(), contains(), containsproperly(), convexhull(), coveredby(), covers(), crosses(), disjoint(), geography_bestsrid(), geography_point_outside(), geos_intersects(), gserialized_cmp(), gserialized_datum_get_box2df_p(), LWGEOM_to_BOX2DF(), optimistic_overlap(), overlaps(), ST_Equals(), ST_Voronoi(), and touches().

640 {
641  /* Try to just read the serialized box. */
642  if ( gserialized_read_gbox_p(g, box) == LW_SUCCESS )
643  {
644  return LW_SUCCESS;
645  }
646  /* No box? Try to peek into simpler geometries and */
647  /* derive a box without creating an lwgeom */
648  else if ( gserialized_peek_gbox_p(g, box) == LW_SUCCESS )
649  {
650  return LW_SUCCESS;
651  }
652  /* Damn! Nothing for it but to create an lwgeom... */
653  /* See http://trac.osgeo.org/postgis/ticket/1023 */
654  else
655  {
656  LWGEOM *lwgeom = lwgeom_from_gserialized(g);
657  int ret = lwgeom_calculate_gbox(lwgeom, box);
658  gbox_float_round(box);
659  lwgeom_free(lwgeom);
660  return ret;
661  }
662 }
int gserialized_read_gbox_p(const GSERIALIZED *g, GBOX *gbox)
Pull a GBOX from the header of a GSERIALIZED, if one is available.
Definition: g_serialized.c:413
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
static int gserialized_peek_gbox_p(const GSERIALIZED *g, GBOX *gbox)
Definition: g_serialized.c:460
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1144
#define LW_SUCCESS
Definition: liblwgeom.h:79
int lwgeom_calculate_gbox(const LWGEOM *lwgeom, GBOX *gbox)
Calculate bounding box of a geometry, automatically taking into account whether it is cartesian or ge...
Definition: lwgeom.c:746
void gbox_float_round(GBOX *gbox)
Round given GBOX to float boundaries.
Definition: g_box.c:712
Here is the call graph for this function:
Here is the caller graph for this function: