static VALUE get_point_from_coordseq(VALUE self, const GEOSCoordSequence* coord_seq, unsigned int i, char has_z) { VALUE result; RGeo_GeometryData* self_data; GEOSContextHandle_t self_context; double x, y, z; result = Qnil; self_data = RGEO_GEOMETRY_DATA_PTR(self); self_context = self_data->geos_context; if (GEOSCoordSeq_getX_r(self_context, coord_seq, i, &x)) { if (GEOSCoordSeq_getY_r(self_context, coord_seq, i, &y)) { if (has_z) { if (!GEOSCoordSeq_getZ_r(self_context, coord_seq, i, &z)) { z = 0.0; } } else { z = 0.0; } result = rgeo_create_geos_point(self_data->factory, x, y, z); } } return result; }
static VALUE cmethod_create(VALUE module, VALUE factory, VALUE x, VALUE y, VALUE z) { return rgeo_create_geos_point(factory, rb_num2dbl(x), rb_num2dbl(y), RGEO_FACTORY_DATA_PTR(factory)->flags & RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M ? rb_num2dbl(z) : 0); }