PostGIS  2.1.10dev-r@@SVN_REVISION@@
GEOSGeometry * LWGEOM_GEOS_getPointN ( const GEOSGeometry *  g_in,
uint32_t  n 
)

Definition at line 57 of file liblwgeom/lwgeom_geos_clean.c.

Referenced by LWGEOM_GEOS_nodeLines().

58 {
59  uint32_t dims;
60  const GEOSCoordSequence* seq_in;
61  GEOSCoordSeq seq_out;
62  double val;
63  uint32_t sz;
64  int gn;
65  GEOSGeometry* ret;
66 
67  switch ( GEOSGeomTypeId(g_in) )
68  {
69  case GEOS_MULTIPOINT:
70  case GEOS_MULTILINESTRING:
71  case GEOS_MULTIPOLYGON:
72  case GEOS_GEOMETRYCOLLECTION:
73  {
74  for (gn=0; gn<GEOSGetNumGeometries(g_in); ++gn)
75  {
76  const GEOSGeometry* g = GEOSGetGeometryN(g_in, gn);
77  ret = LWGEOM_GEOS_getPointN(g,n);
78  if ( ret ) return ret;
79  }
80  break;
81  }
82 
83  case GEOS_POLYGON:
84  {
85  ret = LWGEOM_GEOS_getPointN(GEOSGetExteriorRing(g_in), n);
86  if ( ret ) return ret;
87  for (gn=0; gn<GEOSGetNumInteriorRings(g_in); ++gn)
88  {
89  const GEOSGeometry* g = GEOSGetInteriorRingN(g_in, gn);
90  ret = LWGEOM_GEOS_getPointN(g, n);
91  if ( ret ) return ret;
92  }
93  break;
94  }
95 
96  case GEOS_POINT:
97  case GEOS_LINESTRING:
98  case GEOS_LINEARRING:
99  break;
100 
101  }
102 
103  seq_in = GEOSGeom_getCoordSeq(g_in);
104  if ( ! seq_in ) return NULL;
105  if ( ! GEOSCoordSeq_getSize(seq_in, &sz) ) return NULL;
106  if ( ! sz ) return NULL;
107 
108  if ( ! GEOSCoordSeq_getDimensions(seq_in, &dims) ) return NULL;
109 
110  seq_out = GEOSCoordSeq_create(1, dims);
111  if ( ! seq_out ) return NULL;
112 
113  if ( ! GEOSCoordSeq_getX(seq_in, n, &val) ) return NULL;
114  if ( ! GEOSCoordSeq_setX(seq_out, n, val) ) return NULL;
115  if ( ! GEOSCoordSeq_getY(seq_in, n, &val) ) return NULL;
116  if ( ! GEOSCoordSeq_setY(seq_out, n, val) ) return NULL;
117  if ( dims > 2 )
118  {
119  if ( ! GEOSCoordSeq_getZ(seq_in, n, &val) ) return NULL;
120  if ( ! GEOSCoordSeq_setZ(seq_out, n, val) ) return NULL;
121  }
122 
123  return GEOSGeom_createPoint(seq_out);
124 }
GEOSGeometry * LWGEOM_GEOS_getPointN(const GEOSGeometry *, uint32_t)

Here is the caller graph for this function: