PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ ptarray_length()

double ptarray_length ( const POINTARRAY pts)

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

Definition at line 2003 of file ptarray.c.

2004{
2005 double dist = 0.0;
2006 uint32_t i;
2007 POINT3DZ frm;
2008 POINT3DZ to;
2009
2010 if ( pts->npoints < 2 ) return 0.0;
2011
2012 /* compute 2d length if 3d is not available */
2013 if ( ! FLAGS_GET_Z(pts->flags) ) return ptarray_length_2d(pts);
2014
2015 getPoint3dz_p(pts, 0, &frm);
2016 for ( i=1; i < pts->npoints; i++ )
2017 {
2018 getPoint3dz_p(pts, i, &to);
2019 dist += sqrt( ((frm.x - to.x)*(frm.x - to.x)) +
2020 ((frm.y - to.y)*(frm.y - to.y)) +
2021 ((frm.z - to.z)*(frm.z - to.z)) );
2022 frm = to;
2023 }
2024 return dist;
2025}
#define FLAGS_GET_Z(flags)
Definition liblwgeom.h:165
int getPoint3dz_p(const POINTARRAY *pa, uint32_t n, POINT3DZ *point)
Definition lwgeom_api.c:215
double ptarray_length_2d(const POINTARRAY *pts)
Find the 2d length of the given POINTARRAY (even if it's 3d)
Definition ptarray.c:1975
double z
Definition liblwgeom.h:396
double x
Definition liblwgeom.h:396
double y
Definition liblwgeom.h:396
lwflags_t flags
Definition liblwgeom.h:431
uint32_t npoints
Definition liblwgeom.h:427

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

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

Here is the call graph for this function:
Here is the caller graph for this function: