PostGIS  2.5.1dev-r@@SVN_REVISION@@

## ◆ ptarray_arc_length_2d()

 double ptarray_arc_length_2d ( const POINTARRAY * pts )

Find the 2d length of the given POINTARRAY, using circular arc interpolation between each coordinate triple.

Length(A1, A2, A3, A4, A5) = Length(A1, A2, A3)+Length(A3, A4, A5)

Definition at line 1662 of file ptarray.c.

References getPoint2d_cp(), lw_arc_length(), lwerror(), and POINTARRAY::npoints.

Referenced by lwcircstring_length_2d().

1663 {
1664  double dist = 0.0;
1665  uint32_t i;
1666  const POINT2D *a1;
1667  const POINT2D *a2;
1668  const POINT2D *a3;
1669
1670  if ( pts->npoints % 2 != 1 )
1671  lwerror("arc point array with even number of points");
1672
1673  a1 = getPoint2d_cp(pts, 0);
1674
1675  for ( i=2; i < pts->npoints; i += 2 )
1676  {
1677  a2 = getPoint2d_cp(pts, i-1);
1678  a3 = getPoint2d_cp(pts, i);
1679  dist += lw_arc_length(a1, a2, a3);
1680  a1 = a3;
1681  }
1682  return dist;
1683 }
unsigned int uint32_t
Definition: uthash.h:78
double lw_arc_length(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3)
Returns the length of a circular arc segment.
Definition: lwalgorithm.c:118
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from...
Definition: lwgeom_api.c:364
uint32_t npoints
Definition: liblwgeom.h:373
Here is the call graph for this function:
Here is the caller graph for this function: