Given two points, a dimensionality, an ordinate, and an interpolation value generate a new point that is proportionally between the input points, using the values in the provided dimension as the scaling factors. 
Definition at line 316 of file lwlinearreferencing.c.
  324         static char *dims = 
"XYZM";
 
  330 #if PARANOIA_LEVEL > 0 
  331         if (!(ordinate == 
'X' || ordinate == 
'Y' || ordinate == 
'Z' || ordinate == 
'M'))
 
  333                 lwerror(
"Cannot interpolate over %c ordinate.", ordinate);
 
  337         if (
FP_MIN(p1_value, p2_value) > interpolation_value || 
FP_MAX(p1_value, p2_value) < interpolation_value)
 
  339                 lwerror(
"Cannot interpolate to a value (%g) not between the input points (%g, %g).",
 
  347         proportion = (interpolation_value - p1_value) / (p2_value - p1_value);
 
  349         for (i = 0; i < 4; i++)
 
  351                 if (dims[i] == 
'Z' && !hasz)
 
  353                 if (dims[i] == 
'M' && !hasm)
 
  355                 if (dims[i] == ordinate)
 
  359                         double newordinate = 0.0;
 
  362                         newordinate = p1_value + proportion * (p2_value - p1_value);
 
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
void lwpoint_set_ordinate(POINT4D *p, char ordinate, double value)
Given a point, ordinate number and value, set that ordinate on the point.
double lwpoint_get_ordinate(const POINT4D *p, char ordinate)
Given a POINT4D and an ordinate number, return the value of the ordinate.
 
References FP_MAX, FP_MIN, LW_FAILURE, LW_SUCCESS, lwerror(), lwpoint_get_ordinate(), and lwpoint_set_ordinate().
Referenced by lwline_clip_to_ordinate_range(), ptarray_clamp_to_ordinate_range(), and test_point_interpolate().