Exemple #1
0
static void destroy_factory_func(RGeo_FactoryData* data)
{
  GEOSContextHandle_t context;

  context = data->geos_context;
  if (data->wkt_reader) {
    GEOSWKTReader_destroy_r(context, data->wkt_reader);
  }
  if (data->wkb_reader) {
    GEOSWKBReader_destroy_r(context, data->wkb_reader);
  }
  if (data->wkt_writer) {
    GEOSWKTWriter_destroy_r(context, data->wkt_writer);
  }
  if (data->wkb_writer) {
    GEOSWKBWriter_destroy_r(context, data->wkb_writer);
  }
  if (data->psych_wkt_reader) {
    GEOSWKTReader_destroy_r(context, data->psych_wkt_reader);
  }
  if (data->marshal_wkb_reader) {
    GEOSWKBReader_destroy_r(context, data->marshal_wkb_reader);
  }
  if (data->psych_wkt_writer) {
    GEOSWKTWriter_destroy_r(context, data->psych_wkt_writer);
  }
  if (data->marshal_wkb_writer) {
    GEOSWKBWriter_destroy_r(context, data->marshal_wkb_writer);
  }
  finishGEOS_r(context);
  free(data);
}
Exemple #2
0
std::string Polygon::wkt(double precision, bool bOutputZ) const
{
    GEOSWKTWriter *writer = GEOSWKTWriter_create_r(m_ctx);
    GEOSWKTWriter_setRoundingPrecision_r(m_ctx, writer, precision);
    if (bOutputZ)
        GEOSWKTWriter_setOutputDimension_r(m_ctx, writer, 3);

    char *smoothWkt = GEOSWKTWriter_write_r(m_ctx, writer, m_geom);
    std::string output(smoothWkt);
    GEOSFree_r(m_ctx, smoothWkt);
    GEOSWKTWriter_destroy_r(m_ctx, writer);
    return output;
}
Exemple #3
0
static VALUE method_factory_initialize_copy(VALUE self, VALUE orig)
{
  RGeo_FactoryData* self_data;
  RGeo_FactoryData* orig_data;
  GEOSContextHandle_t context;

  // Clear out existing data
  self_data = RGEO_FACTORY_DATA_PTR(self);
  context = self_data->geos_context;
  if (self_data->wkt_reader) {
    GEOSWKTReader_destroy_r(context, self_data->wkt_reader);
    self_data->wkt_reader = NULL;
  }
  if (self_data->wkb_reader) {
    GEOSWKBReader_destroy_r(context, self_data->wkb_reader);
    self_data->wkb_reader = NULL;
  }
  if (self_data->wkt_writer) {
    GEOSWKTWriter_destroy_r(context, self_data->wkt_writer);
    self_data->wkt_writer = NULL;
  }
  if (self_data->wkb_writer) {
    GEOSWKBWriter_destroy_r(context, self_data->wkb_writer);
    self_data->wkb_writer = NULL;
  }
  if (self_data->psych_wkt_reader) {
    GEOSWKTReader_destroy_r(context, self_data->psych_wkt_reader);
    self_data->psych_wkt_reader = NULL;
  }
  if (self_data->marshal_wkb_reader) {
    GEOSWKBReader_destroy_r(context, self_data->marshal_wkb_reader);
    self_data->marshal_wkb_reader = NULL;
  }
  if (self_data->psych_wkt_writer) {
    GEOSWKTWriter_destroy_r(context, self_data->psych_wkt_writer);
    self_data->psych_wkt_writer = NULL;
  }
  if (self_data->marshal_wkb_writer) {
    GEOSWKBWriter_destroy_r(context, self_data->marshal_wkb_writer);
    self_data->marshal_wkb_writer = NULL;
  }
  self_data->wkrep_wkt_generator = Qnil;
  self_data->wkrep_wkb_generator = Qnil;
  self_data->wkrep_wkt_parser = Qnil;
  self_data->wkrep_wkb_parser = Qnil;
  self_data->proj4_obj = Qnil;
  self_data->coord_sys_obj = Qnil;

  // Copy new data from original object
  if (TYPE(orig) == T_DATA && RDATA(orig)->dfree == (RUBY_DATA_FUNC)destroy_factory_func) {
    orig_data = RGEO_FACTORY_DATA_PTR(orig);
    self_data->flags = orig_data->flags;
    self_data->srid = orig_data->srid;
    self_data->buffer_resolution = orig_data->buffer_resolution;
    self_data->wkrep_wkt_generator = orig_data->wkrep_wkt_generator;
    self_data->wkrep_wkb_generator = orig_data->wkrep_wkb_generator;
    self_data->wkrep_wkt_parser = orig_data->wkrep_wkt_parser;
    self_data->wkrep_wkb_parser = orig_data->wkrep_wkb_parser;
    self_data->proj4_obj = orig_data->proj4_obj;
    self_data->coord_sys_obj = orig_data->coord_sys_obj;
  }
  return self;
}