PostGIS  3.4.0dev-r@@SVN_REVISION@@
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Pages

◆ ptarray_nudge_geodetic()

static int ptarray_nudge_geodetic ( POINTARRAY pa)
static

When features are snapped or sometimes they are just this way, they are very close to the geodetic bounds but slightly over.

This routine nudges those points, and only those points, back over to the bounds. http://trac.osgeo.org/postgis/ticket/1292

Definition at line 3351 of file lwgeodetic.c.

3352 {
3353 
3354  uint32_t i;
3355  POINT4D p;
3356  int altered = LW_FALSE;
3357  int rv = LW_FALSE;
3358  static double tolerance = 1e-10;
3359 
3360  if ( ! pa )
3361  lwerror("ptarray_nudge_geodetic called with null input");
3362 
3363  for(i = 0; i < pa->npoints; i++ )
3364  {
3365  getPoint4d_p(pa, i, &p);
3366  if ( p.x < -180.0 && (-180.0 - p.x <= tolerance) )
3367  {
3368  p.x = -180.0;
3369  altered = LW_TRUE;
3370  }
3371  if ( p.x > 180.0 && (p.x - 180.0 <= tolerance) )
3372  {
3373  p.x = 180.0;
3374  altered = LW_TRUE;
3375  }
3376  if ( p.y < -90.0 && (-90.0 - p.y <= tolerance) )
3377  {
3378  p.y = -90.0;
3379  altered = LW_TRUE;
3380  }
3381  if ( p.y > 90.0 && (p.y - 90.0 <= tolerance) )
3382  {
3383  p.y = 90.0;
3384  altered = LW_TRUE;
3385  }
3386  if ( altered == LW_TRUE )
3387  {
3388  ptarray_set_point4d(pa, i, &p);
3389  altered = LW_FALSE;
3390  rv = LW_TRUE;
3391  }
3392  }
3393  return rv;
3394 }
#define LW_FALSE
Definition: liblwgeom.h:94
int getPoint4d_p(const POINTARRAY *pa, uint32_t n, POINT4D *point)
Definition: lwgeom_api.c:125
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:93
void ptarray_set_point4d(POINTARRAY *pa, uint32_t n, const POINT4D *p4d)
Definition: lwgeom_api.c:369
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
double x
Definition: liblwgeom.h:414
double y
Definition: liblwgeom.h:414
uint32_t npoints
Definition: liblwgeom.h:427

References getPoint4d_p(), LW_FALSE, LW_TRUE, lwerror(), POINTARRAY::npoints, ptarray_set_point4d(), POINT4D::x, and POINT4D::y.

Referenced by lwgeom_nudge_geodetic().

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