PostGIS  2.3.8dev-r@@SVN_REVISION@@

◆ point4d_transform()

int point4d_transform ( POINT4D pt,
projPJ  srcpj,
projPJ  dstpj 
)

Definition at line 131 of file liblwgeom/lwgeom_transform.c.

References LWDEBUGF, lwerror(), lwnotice(), to_dec(), to_rad(), POINT4D::x, POINT4D::y, and POINT4D::z.

Referenced by ptarray_transform().

132 {
133  int* pj_errno_ref;
134  POINT4D orig_pt;
135 
136  /* Make a copy of the input point so we can report the original should an error occur */
137  orig_pt.x = pt->x;
138  orig_pt.y = pt->y;
139  orig_pt.z = pt->z;
140 
141  if (pj_is_latlong(srcpj)) to_rad(pt) ;
142 
143  LWDEBUGF(4, "transforming POINT(%f %f) from '%s' to '%s'", orig_pt.x, orig_pt.y, pj_get_def(srcpj,0), pj_get_def(dstpj,0));
144 
145  /* Perform the transform */
146  pj_transform(srcpj, dstpj, 1, 0, &(pt->x), &(pt->y), &(pt->z));
147 
148  /* For NAD grid-shift errors, display an error message with an additional hint */
149  pj_errno_ref = pj_get_errno_ref();
150 
151  if (*pj_errno_ref != 0)
152  {
153  if (*pj_errno_ref == -38)
154  {
155  lwnotice("PostGIS was unable to transform the point because either no grid shift files were found, or the point does not lie within the range for which the grid shift is defined. Refer to the ST_Transform() section of the PostGIS manual for details on how to configure PostGIS to alter this behaviour.");
156  lwerror("transform: couldn't project point (%g %g %g): %s (%d)",
157  orig_pt.x, orig_pt.y, orig_pt.z, pj_strerrno(*pj_errno_ref), *pj_errno_ref);
158  return 0;
159  }
160  else
161  {
162  lwerror("transform: couldn't project point (%g %g %g): %s (%d)",
163  orig_pt.x, orig_pt.y, orig_pt.z, pj_strerrno(*pj_errno_ref), *pj_errno_ref);
164  return 0;
165  }
166  }
167 
168  if (pj_is_latlong(dstpj)) to_dec(pt);
169  return 1;
170 }
double x
Definition: liblwgeom.h:351
static void to_dec(POINT4D *pt)
convert radians to decimal degress
void lwnotice(const char *fmt,...)
Write a notice out to the notice handler.
Definition: lwutil.c:89
double z
Definition: liblwgeom.h:351
static void to_rad(POINT4D *pt)
convert decimal degress to radians
double y
Definition: liblwgeom.h:351
#define LWDEBUGF(level, msg,...)
Definition: lwgeom_log.h:88
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:102
Here is the call graph for this function:
Here is the caller graph for this function: