</listitem>
</varlistentry>
+ <varlistentry>
+ <term>MakeBox2D(<LL>, <UR>)</term>
+
+ <listitem>
+ <para>Creates a BOX2D defined by the given point geometries.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>MakeBox3D(<LLB>, <URT>)</term>
+
+ <listitem>
+ <para>Creates a BOX3D defined by the given point geometries.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term>MakeLine(geometry set)</term>
PG_RETURN_POINTER(result);
}
+PG_FUNCTION_INFO_V1(BOX2DFLOAT4_construct);
+Datum BOX2DFLOAT4_construct(PG_FUNCTION_ARGS)
+{
+ PG_LWGEOM *min = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ PG_LWGEOM *max = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ BOX2DFLOAT4 *result = palloc(sizeof(BOX2DFLOAT4));
+ LWGEOM *minpoint, *maxpoint;
+ POINT2D minp, maxp;
+
+ minpoint = lwgeom_deserialize(SERIALIZED_FORM(min));
+ maxpoint = lwgeom_deserialize(SERIALIZED_FORM(max));
+
+ if ( TYPE_GETTYPE(minpoint->type) != POINTTYPE ||
+ TYPE_GETTYPE(maxpoint->type) != POINTTYPE )
+ {
+ elog(ERROR, "BOX2DFLOAT4_construct: args must be points");
+ PG_RETURN_NULL();
+ }
+ getPoint2d_p(((LWPOINT *)minpoint)->point, 0, &minp);
+ getPoint2d_p(((LWPOINT *)maxpoint)->point, 0, &maxp);
+
+ result->xmax = maxp.x;
+ result->ymax = maxp.y;
+
+ result->xmin = minp.x;
+ result->ymin = minp.y;
+
+ PG_RETURN_POINTER(result);
+}
+
PG_RETURN_POINTER(result);
}
+PG_FUNCTION_INFO_V1(BOX3D_construct);
+Datum BOX3D_construct(PG_FUNCTION_ARGS)
+{
+ PG_LWGEOM *min = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ PG_LWGEOM *max = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ BOX3D *result = palloc(sizeof(BOX3D));
+ LWGEOM *minpoint, *maxpoint;
+ POINT3DZ minp, maxp;
+
+ minpoint = lwgeom_deserialize(SERIALIZED_FORM(min));
+ maxpoint = lwgeom_deserialize(SERIALIZED_FORM(max));
+
+ if ( TYPE_GETTYPE(minpoint->type) != POINTTYPE ||
+ TYPE_GETTYPE(maxpoint->type) != POINTTYPE )
+ {
+ elog(ERROR, "BOX2DFLOAT4_construct: args must be points");
+ PG_RETURN_NULL();
+ }
+
+ getPoint3dz_p(((LWPOINT *)minpoint)->point, 0, &minp);
+ getPoint3dz_p(((LWPOINT *)maxpoint)->point, 0, &maxp);
+
+ result->xmax = maxp.x;
+ result->ymax = maxp.y;
+ result->zmax = maxp.z;
+
+ result->xmin = minp.x;
+ result->ymin = minp.y;
+ result->zmin = minp.z;
+
+ PG_RETURN_POINTER(result);
+}
+
//min(a,b)
double LWGEOM_Mind(double a, double b)
{
Datum BOX2D_union(PG_FUNCTION_ARGS);
Datum LWGEOM_same(PG_FUNCTION_ARGS);
+Datum BOX3D_construct(PG_FUNCTION_ARGS);
+Datum BOX2DFLOAT4_ymin(PG_FUNCTION_ARGS);
#endif // !defined _LWGEOM_PG_H 1
AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
LANGUAGE 'C' WITH (iscachable,isstrict);
+CREATEFUNCTION makeBox2d(geometry, geometry)
+ RETURNS box2d
+ AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_construct'
+ LANGUAGE 'C' WITH (iscachable,isstrict);
+
+CREATEFUNCTION makeBox3d(geometry, geometry)
+ RETURNS box3d
+ AS '@MODULE_FILENAME@', 'BOX3D_construct'
+ LANGUAGE 'C' WITH (iscachable,isstrict);
+
CREATEFUNCTION makeline_garray (geometry[])
RETURNS geometry
AS '@MODULE_FILENAME@', 'LWGEOM_makeline_garray'