PostGIS  3.0.0dev-r@@SVN_REVISION@@

◆ 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 3264 of file lwgeodetic.c.

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

Referenced by lwgeom_nudge_geodetic().

3265 {
3266 
3267  uint32_t i;
3268  POINT4D p;
3269  int altered = LW_FALSE;
3270  int rv = LW_FALSE;
3271  static double tolerance = 1e-10;
3272 
3273  if ( ! pa )
3274  lwerror("ptarray_nudge_geodetic called with null input");
3275 
3276  for(i = 0; i < pa->npoints; i++ )
3277  {
3278  getPoint4d_p(pa, i, &p);
3279  if ( p.x < -180.0 && (-180.0 - p.x < tolerance) )
3280  {
3281  p.x = -180.0;
3282  altered = LW_TRUE;
3283  }
3284  if ( p.x > 180.0 && (p.x - 180.0 < tolerance) )
3285  {
3286  p.x = 180.0;
3287  altered = LW_TRUE;
3288  }
3289  if ( p.y < -90.0 && (-90.0 - p.y < tolerance) )
3290  {
3291  p.y = -90.0;
3292  altered = LW_TRUE;
3293  }
3294  if ( p.y > 90.0 && (p.y - 90.0 < tolerance) )
3295  {
3296  p.y = 90.0;
3297  altered = LW_TRUE;
3298  }
3299  if ( altered == LW_TRUE )
3300  {
3301  ptarray_set_point4d(pa, i, &p);
3302  altered = LW_FALSE;
3303  rv = LW_TRUE;
3304  }
3305  }
3306  return rv;
3307 }
double x
Definition: liblwgeom.h:354
void ptarray_set_point4d(POINTARRAY *pa, uint32_t n, const POINT4D *p4d)
Definition: lwgeom_api.c:404
unsigned int uint32_t
Definition: uthash.h:78
#define LW_FALSE
Definition: liblwgeom.h:76
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:75
int getPoint4d_p(const POINTARRAY *pa, uint32_t n, POINT4D *point)
Definition: lwgeom_api.c:112
double y
Definition: liblwgeom.h:354
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
uint32_t npoints
Definition: liblwgeom.h:373
Here is the call graph for this function:
Here is the caller graph for this function: