PostGIS  2.5.7dev-r@@SVN_REVISION@@

◆ getPoint4d_p()

int getPoint4d_p ( const POINTARRAY pa,
uint32_t  n,
POINT4D op 
)

Definition at line 123 of file lwgeom_api.c.

124 {
125  uint8_t *ptr;
126  int zmflag;
127 
128  if ( ! pa )
129  {
130  lwerror("%s [%d] NULL POINTARRAY input", __FILE__, __LINE__);
131  return 0;
132  }
133 
134  if ( n>=pa->npoints )
135  {
136  lwnotice("%s [%d] called with n=%d and npoints=%d", __FILE__, __LINE__, n, pa->npoints);
137  return 0;
138  }
139 
140  LWDEBUG(4, "getPoint4d_p called.");
141 
142  /* Get a pointer to nth point offset and zmflag */
143  ptr=getPoint_internal(pa, n);
144  zmflag=FLAGS_GET_ZM(pa->flags);
145 
146  LWDEBUGF(4, "ptr %p, zmflag %d", ptr, zmflag);
147 
148  switch (zmflag)
149  {
150  case 0: /* 2d */
151  memcpy(op, ptr, sizeof(POINT2D));
152  op->m=NO_M_VALUE;
153  op->z=NO_Z_VALUE;
154  break;
155 
156  case 3: /* ZM */
157  memcpy(op, ptr, sizeof(POINT4D));
158  break;
159 
160  case 2: /* Z */
161  memcpy(op, ptr, sizeof(POINT3DZ));
162  op->m=NO_M_VALUE;
163  break;
164 
165  case 1: /* M */
166  memcpy(op, ptr, sizeof(POINT3DM));
167  op->m=op->z; /* we use Z as temporary storage */
168  op->z=NO_Z_VALUE;
169  break;
170 
171  default:
172  lwerror("Unknown ZM flag ??");
173  return 0;
174  }
175  return 1;
176 
177 }
uint8_t * getPoint_internal(const POINTARRAY *pa, uint32_t n)
Definition: ptarray.c:1750
#define FLAGS_GET_ZM(flags)
Definition: liblwgeom.h:153
#define NO_Z_VALUE
#define NO_M_VALUE
#define LWDEBUG(level, msg)
Definition: lwgeom_log.h:83
#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:190
void lwnotice(const char *fmt,...)
Write a notice out to the notice handler.
Definition: lwutil.c:177
double m
Definition: liblwgeom.h:355
double z
Definition: liblwgeom.h:355
uint32_t npoints
Definition: liblwgeom.h:374
uint8_t flags
Definition: liblwgeom.h:372
unsigned char uint8_t
Definition: uthash.h:79

References POINTARRAY::flags, FLAGS_GET_ZM, getPoint_internal(), LWDEBUG, LWDEBUGF, lwerror(), lwnotice(), POINT4D::m, NO_M_VALUE, NO_Z_VALUE, POINTARRAY::npoints, and POINT4D::z.

Referenced by _lwt_AddLineEdge(), _lwt_AddPoint(), analyze_pa(), circstring_from_pa(), encode_coords(), encode_mpoint(), getPoint4d(), linestring_from_pa(), lwarc_linearize(), lwcircstring_calculate_gbox_cartesian(), lwcircstring_linearize(), lwcompound_add_lwgeom(), lwcompound_linearize(), LWGEOM_dumppoints(), LWGEOM_setpoint_linestring(), LWGEOM_snaptogrid_pointoff(), lwgeom_wrapx(), lwline_add_lwpoint(), lwline_clip_to_ordinate_range(), lwline_from_lwmpoint(), lwline_interpolate_points(), lwline_split_by_point_to(), lwmpoint_construct(), lwmpoint_extract_points_4d(), lwpoint_get_m(), lwpoint_get_x(), lwpoint_get_y(), lwpoint_get_z(), lwpoint_getPoint4d_p(), lwpointiterator_peek(), lwpoly_from_twkb_state(), lwpoly_pt_outside_hack(), lwpsurface_is_closed(), lwtin_is_closed(), parse_kml_polygon(), printPA(), pta_unstroke(), ptarray_affine(), ptarray_append_point(), ptarray_calculate_gbox_cartesian(), ptarray_collect_mvals(), ptarray_flip_coordinates(), ptarray_force_dims(), ptarray_force_geodetic(), ptarray_length_spheroid(), ptarray_locate_along(), ptarray_locate_along_linear(), ptarray_locate_between_m(), ptarray_locate_point(), ptarray_nudge_geodetic(), ptarray_scale(), ptarray_segmentize2d(), ptarray_segmentize_sphere(), ptarray_startpoint(), ptarray_substring(), ptarray_swap_ordinates(), ptarray_to_kml2_sb(), ptarray_to_x3d3_sb(), ptarray_transform(), RTreeCreateLeafNode(), test_raster_convex_hull(), and test_raster_envelope_geom().

Here is the call graph for this function: