PostGIS  2.5.0beta1dev-r@@SVN_REVISION@@

◆ ptarray_length()

double ptarray_length ( const POINTARRAY pts)

Find the 3d/2d length of the given POINTARRAY (depending on its dimensionality)

Definition at line 1710 of file ptarray.c.

References POINTARRAY::flags, FLAGS_GET_Z, getPoint3dz_p(), POINTARRAY::npoints, ptarray_length_2d(), POINT3DZ::x, POINT3DZ::y, and POINT3DZ::z.

Referenced by lwline_length(), lwpoly_perimeter(), and lwtriangle_perimeter().

1711 {
1712  double dist = 0.0;
1713  uint32_t i;
1714  POINT3DZ frm;
1715  POINT3DZ to;
1716 
1717  if ( pts->npoints < 2 ) return 0.0;
1718 
1719  /* compute 2d length if 3d is not available */
1720  if ( ! FLAGS_GET_Z(pts->flags) ) return ptarray_length_2d(pts);
1721 
1722  getPoint3dz_p(pts, 0, &frm);
1723  for ( i=1; i < pts->npoints; i++ )
1724  {
1725  getPoint3dz_p(pts, i, &to);
1726  dist += sqrt( ((frm.x - to.x)*(frm.x - to.x)) +
1727  ((frm.y - to.y)*(frm.y - to.y)) +
1728  ((frm.z - to.z)*(frm.z - to.z)) );
1729  frm = to;
1730  }
1731  return dist;
1732 }
double z
Definition: liblwgeom.h:336
double y
Definition: liblwgeom.h:336
double x
Definition: liblwgeom.h:336
unsigned int uint32_t
Definition: uthash.h:78
uint8_t flags
Definition: liblwgeom.h:371
#define FLAGS_GET_Z(flags)
Macros for manipulating the &#39;flags&#39; byte.
Definition: liblwgeom.h:139
double ptarray_length_2d(const POINTARRAY *pts)
Find the 2d length of the given POINTARRAY (even if it&#39;s 3d)
Definition: ptarray.c:1682
int getPoint3dz_p(const POINTARRAY *pa, uint32_t n, POINT3DZ *point)
Definition: lwgeom_api.c:205
uint32_t npoints
Definition: liblwgeom.h:373
Here is the call graph for this function:
Here is the caller graph for this function: