Datum LWGEOM_forceRHR_poly(PG_FUNCTION_ARGS);
Datum LWGEOM_noop(PG_FUNCTION_ARGS);
Datum LWGEOM_zmflag(PG_FUNCTION_ARGS);
-Datum LWGEOM_makepoint2d(PG_FUNCTION_ARGS);
-Datum LWGEOM_makepoint3dz(PG_FUNCTION_ARGS);
-Datum LWGEOM_makepoint3dm(PG_FUNCTION_ARGS);
-Datum LWGEOM_makepoint4d(PG_FUNCTION_ARGS);
+Datum LWGEOM_makepoint(PG_FUNCTION_ARGS);
+Datum LWGEOM_makepointm(PG_FUNCTION_ARGS);
/*------------------------------------------------------------------*/
PG_RETURN_BOOL(result);
}
-PG_FUNCTION_INFO_V1(LWGEOM_makepoint2d);
-Datum LWGEOM_makepoint2d(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(LWGEOM_makepoint);
+Datum LWGEOM_makepoint(PG_FUNCTION_ARGS)
{
- double x,y;
- int SRID;
- LWPOINT *point;
- PG_LWGEOM *result;
- size_t size;
-
- SRID = PG_GETARG_INT32(0);
- x = PG_GETARG_FLOAT8(1);
- y = PG_GETARG_FLOAT8(2);
-
- point = make_lwpoint2d(SRID, x, y);
-
- size = lwpoint_serialize_size(point);
- result = (PG_LWGEOM *)palloc(size+4);
- result->size = (size+4);
- lwpoint_serialize_buf(point, SERIALIZED_FORM(result), NULL);
-
- PG_RETURN_POINTER(result);
-}
-
-PG_FUNCTION_INFO_V1(LWGEOM_makepoint3dz);
-Datum LWGEOM_makepoint3dz(PG_FUNCTION_ARGS)
-{
- double x,y,z;
- int SRID;
+ double x,y,z,m;
LWPOINT *point;
PG_LWGEOM *result;
size_t size;
- SRID = PG_GETARG_INT32(0);
- x = PG_GETARG_FLOAT8(1);
- y = PG_GETARG_FLOAT8(2);
- z = PG_GETARG_FLOAT8(3);
+ x = PG_GETARG_FLOAT8(0);
+ y = PG_GETARG_FLOAT8(1);
- point = make_lwpoint3dz(SRID, x, y, z);
+ if ( PG_NARGS() == 2 ) point = make_lwpoint2d(-1, x, y);
+ else if ( PG_NARGS() == 3 ) {
+ z = PG_GETARG_FLOAT8(2);
+ point = make_lwpoint3dz(-1, x, y, z);
+ }
+ else if ( PG_NARGS() == 4 ) {
+ z = PG_GETARG_FLOAT8(2);
+ m = PG_GETARG_FLOAT8(3);
+ point = make_lwpoint4d(-1, x, y, z, m);
+ }
+ else {
+ elog(ERROR, "LWGEOM_makepoint: unsupported number of args: %d",
+ PG_NARGS());
+ PG_RETURN_NULL();
+ }
size = lwpoint_serialize_size(point);
result = (PG_LWGEOM *)palloc(size+4);
PG_LWGEOM *result;
size_t size;
- SRID = PG_GETARG_INT32(0);
- x = PG_GETARG_FLOAT8(1);
- y = PG_GETARG_FLOAT8(2);
- m = PG_GETARG_FLOAT8(3);
+ x = PG_GETARG_FLOAT8(0);
+ y = PG_GETARG_FLOAT8(1);
+ m = PG_GETARG_FLOAT8(2);
point = make_lwpoint3dm(SRID, x, y, m);
PG_RETURN_POINTER(result);
}
-PG_FUNCTION_INFO_V1(LWGEOM_makepoint4d);
-Datum LWGEOM_makepoint4d(PG_FUNCTION_ARGS)
-{
- double x,y,z,m;
- int SRID;
- LWPOINT *point;
- PG_LWGEOM *result;
- size_t size;
-
- SRID = PG_GETARG_INT32(0);
- x = PG_GETARG_FLOAT8(1);
- y = PG_GETARG_FLOAT8(2);
- z = PG_GETARG_FLOAT8(3);
- m = PG_GETARG_FLOAT8(4);
-
- point = make_lwpoint4d(SRID, x, y, z, m);
-
- size = lwpoint_serialize_size(point);
- result = (PG_LWGEOM *)palloc(size+4);
- result->size = (size+4);
- lwpoint_serialize_buf(point, SERIALIZED_FORM(result), NULL);
-
- PG_RETURN_POINTER(result);
-}
-- CONSTRUCTORS
------------------------------------------------------------------------
-CREATEFUNCTION makepoint2d(integer, float8, float8)
+CREATEFUNCTION makepoint(float8, float8)
RETURNS geometry
- AS '@MODULE_FILENAME@', 'LWGEOM_makepoint2d'
+ AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
LANGUAGE 'C' WITH (iscachable,isstrict);
-CREATEFUNCTION makepoint3dz(integer, float8, float8, float8)
+CREATEFUNCTION makepoint(float8, float8, float8)
RETURNS geometry
- AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dz'
+ AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
LANGUAGE 'C' WITH (iscachable,isstrict);
-CREATEFUNCTION makepoint3dm(integer, float8, float8, float8)
+CREATEFUNCTION makepoint(float8, float8, float8, float8)
RETURNS geometry
- AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
+ AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
LANGUAGE 'C' WITH (iscachable,isstrict);
-CREATEFUNCTION makepoint4d(integer, float8, float8, float8, float8)
+CREATEFUNCTION makePointM(float8, float8, float8)
RETURNS geometry
- AS '@MODULE_FILENAME@', 'LWGEOM_makepoint4d'
+ AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
LANGUAGE 'C' WITH (iscachable,isstrict);
------------------------------------------------------------------------