Datum LWGEOM_length_ellipsoid_linestring(PG_FUNCTION_ARGS) { GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1); double length = 0.0; /* EMPTY things have no length */ if ( lwgeom_is_empty(lwgeom) ) { lwgeom_free(lwgeom); PG_RETURN_FLOAT8(0.0); } length = lwgeom_length_spheroid(lwgeom, sphere); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); /* Something went wrong... */ if ( length < 0.0 ) { elog(ERROR, "lwgeom_length_spheroid returned length < 0.0"); PG_RETURN_NULL(); } /* Clean up */ PG_RETURN_FLOAT8(length); }
Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS) { GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length_spheroid(lwgeom, sphere); lwgeom_free(lwgeom); PG_FREE_IF_COPY(geom, 0); PG_RETURN_FLOAT8(dist); }
// methods for calculating length double get_length_for_lwg() { double length = lwgeom_length_spheroid(lwg, &s); lwgeom_free(lwg); return length; }