SEXP rgeos_Init(void) { GEOSContextHandle_t r = initGEOS_r((GEOSMessageHandler) __warningHandler, (GEOSMessageHandler) __errorHandler); SEXP sxpHandle = R_MakeExternalPtr((void *) r, mkChar("GEOSContextHandle"), R_NilValue); R_RegisterCFinalizerEx(sxpHandle, rgeos_finish_handle, TRUE); return(sxpHandle); }
geos_handle_t * geom_geos_init(errorstream_t *error) { GPKG_TLS_KEY_CREATE(last_geos_error); geos_handle_t *geos = initGEOS_r(geom_null_msg_handler, geom_tls_msg_handler); if (geos == NULL) { error_append(error, "GEOS initialization failed"); } return geos; }
void Crop::ready(PointContext ctx) { #ifdef PDAL_HAVE_GEOS if (!m_poly.empty()) { m_geosEnvironment = initGEOS_r(pdal::geos::_GEOSWarningHandler, pdal::geos::_GEOSErrorHandler); m_geosGeometry = GEOSGeomFromWKT_r(m_geosEnvironment, m_poly.c_str()); if (!m_geosGeometry) throw pdal_error("unable to import polygon WKT"); int gtype = GEOSGeomTypeId_r(m_geosEnvironment, m_geosGeometry); if (!(gtype == GEOS_POLYGON || gtype == GEOS_MULTIPOLYGON)) throw pdal_error("input WKT was not a POLYGON or MULTIPOLYGON"); char* out_wkt = GEOSGeomToWKT_r(m_geosEnvironment, m_geosGeometry); log()->get(LogLevel::Debug2) << "Ingested WKT for filters.crop: " << std::string(out_wkt) <<std::endl; GEOSFree_r(m_geosEnvironment, out_wkt); if (!GEOSisValid_r(m_geosEnvironment, m_geosGeometry)) { char* reason = GEOSisValidReason_r(m_geosEnvironment, m_geosGeometry); std::ostringstream oss; oss << "WKT is invalid: " << std::string(reason) << std::endl; GEOSFree_r(m_geosEnvironment, reason); throw pdal_error(oss.str()); } m_geosPreparedGeometry = GEOSPrepare_r(m_geosEnvironment, m_geosGeometry); if (!m_geosPreparedGeometry) throw pdal_error("unable to prepare geometry for " "index-accelerated intersection"); m_bounds = computeBounds(m_geosGeometry); log()->get(LogLevel::Debug) << "Computed bounds from given WKT: " << m_bounds <<std::endl; } else { log()->get(LogLevel::Debug) << "Using simple bounds for " "filters.crop: " << m_bounds << std::endl; } #endif }
static VALUE cmethod_factory_create(VALUE klass, VALUE flags, VALUE srid, VALUE buffer_resolution, VALUE wkt_generator, VALUE wkb_generator, VALUE proj4_obj, VALUE coord_sys_obj) { VALUE result; RGeo_FactoryData* data; GEOSContextHandle_t context; VALUE wrapped_globals; result = Qnil; data = ALLOC(RGeo_FactoryData); if (data) { context = initGEOS_r(message_handler, message_handler); if (context) { wrapped_globals = rb_const_get_at(klass, rb_intern("INTERNAL_CGLOBALS")); data->globals = (RGeo_Globals*)DATA_PTR(wrapped_globals); data->geos_context = context; data->flags = NUM2INT(flags); data->srid = NUM2INT(srid); data->buffer_resolution = NUM2INT(buffer_resolution); data->wkt_reader = NULL; data->wkb_reader = NULL; data->wkt_writer = NULL; data->wkb_writer = NULL; data->psych_wkt_reader = NULL; data->marshal_wkb_reader = NULL; data->psych_wkt_writer = NULL; data->marshal_wkb_writer = NULL; data->wkrep_wkt_generator = wkt_generator; data->wkrep_wkb_generator = wkb_generator; data->wkrep_wkt_parser = Qnil; data->wkrep_wkb_parser = Qnil; data->proj4_obj = proj4_obj; data->coord_sys_obj = coord_sys_obj; result = Data_Wrap_Struct(klass, mark_factory_func, destroy_factory_func, data); } else { free(data); } } return result; }
test_capigeosgeom_create_data() : geom1_(0), handle_(initGEOS_r(notice, notice)) { }
SPATIALITE_DECLARE void * spatialite_alloc_connection () { /* allocating and initializing an empty internal cache */ #ifdef GEOS_REENTRANT /* reentrant (thread-safe) initialization */ return spatialite_alloc_reentrant (); #else /* end GEOS_REENTRANT */ gaiaOutBufferPtr out; int i; struct splite_internal_cache *cache = NULL; struct splite_geos_cache_item *p; struct splite_xmlSchema_cache_item *p_xmlSchema; int pool_index; /* attempting to implicitly initialize the library */ spatialite_initialize (); /* locking the semaphore */ splite_cache_semaphore_lock (); pool_index = find_free_connection (); if (pool_index < 0) goto done; cache = malloc (sizeof (struct splite_internal_cache)); if (cache == NULL) { invalidate (pool_index); goto done; } cache->magic1 = SPATIALITE_CACHE_MAGIC1; cache->magic2 = SPATIALITE_CACHE_MAGIC2; cache->gpkg_mode = 0; cache->gpkg_amphibious_mode = 0; cache->decimal_precision = -1; cache->GEOS_handle = NULL; cache->PROJ_handle = NULL; cache->cutterMessage = NULL; cache->pool_index = pool_index; confirm (pool_index, cache); cache->gaia_geos_error_msg = NULL; cache->gaia_geos_warning_msg = NULL; cache->gaia_geosaux_error_msg = NULL; /* initializing an empty linked list of Topologies */ cache->firstTopology = NULL; cache->lastTopology = NULL; cache->next_topo_savepoint = 0; cache->topo_savepoint_name = NULL; cache->firstNetwork = NULL; cache->lastNetwork = NULL; cache->next_network_savepoint = 0; cache->network_savepoint_name = NULL; /* initializing the XML error buffers */ out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlParsingErrors = out; out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlSchemaValidationErrors = out; out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlXPathErrors = out; /* initializing the GEOS cache */ p = &(cache->cacheItem1); memset (p->gaiaBlob, '\0', 64); p->gaiaBlobSize = 0; p->crc32 = 0; p->geosGeom = NULL; p->preparedGeosGeom = NULL; p = &(cache->cacheItem2); memset (p->gaiaBlob, '\0', 64); p->gaiaBlobSize = 0; p->crc32 = 0; p->geosGeom = NULL; p->preparedGeosGeom = NULL; for (i = 0; i < MAX_XMLSCHEMA_CACHE; i++) { /* initializing the XmlSchema cache */ p_xmlSchema = &(cache->xmlSchemaCache[i]); p_xmlSchema->timestamp = 0; p_xmlSchema->schemaURI = NULL; p_xmlSchema->schemaDoc = NULL; p_xmlSchema->parserCtxt = NULL; p_xmlSchema->schema = NULL; } #include "cache_aux_3.h" /* initializing GEOS and PROJ.4 handles */ #ifndef OMIT_GEOS /* initializing GEOS */ cache->GEOS_handle = initGEOS_r (cache->geos_warning, cache->geos_error); #endif /* end GEOS */ #ifndef OMIT_PROJ /* initializing the PROJ.4 context */ cache->PROJ_handle = pj_ctx_alloc (); #endif /* end PROJ.4 */ done: /* unlocking the semaphore */ splite_cache_semaphore_unlock (); return cache; #endif }
/* definitely releasing the slot */ struct splite_connection *p = &(splite_connection_pool[i]); p->conn_ptr = NULL; } #endif /* END obsolete partially thread-safe mode */ #ifdef GEOS_REENTRANT /* reentrant (thread-safe) initialization */ static void * spatialite_alloc_reentrant () { /* * allocating and initializing an empty internal cache * fully reentrant (thread-safe) version requiring GEOS >= 3.5.0 */ struct splite_internal_cache *cache = NULL; gaiaOutBufferPtr out; int i; struct splite_geos_cache_item *p; struct splite_xmlSchema_cache_item *p_xmlSchema; /* attempting to implicitly initialize the library */ spatialite_initialize (); cache = malloc (sizeof (struct splite_internal_cache)); if (cache == NULL) goto done; cache->magic1 = SPATIALITE_CACHE_MAGIC1; cache->magic2 = SPATIALITE_CACHE_MAGIC2; cache->gpkg_mode = 0; cache->gpkg_amphibious_mode = 0; cache->decimal_precision = -1; cache->GEOS_handle = NULL; cache->PROJ_handle = NULL; cache->cutterMessage = NULL; cache->pool_index = -1; cache->gaia_geos_error_msg = NULL; cache->gaia_geos_warning_msg = NULL; cache->gaia_geosaux_error_msg = NULL; /* initializing an empty linked list of Topologies */ cache->firstTopology = NULL; cache->lastTopology = NULL; cache->next_topo_savepoint = 0; cache->topo_savepoint_name = NULL; cache->firstNetwork = NULL; cache->lastNetwork = NULL; cache->next_network_savepoint = 0; cache->network_savepoint_name = NULL; /* initializing the XML error buffers */ out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlParsingErrors = out; out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlSchemaValidationErrors = out; out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlXPathErrors = out; /* initializing the GEOS cache */ p = &(cache->cacheItem1); memset (p->gaiaBlob, '\0', 64); p->gaiaBlobSize = 0; p->crc32 = 0; p->geosGeom = NULL; p->preparedGeosGeom = NULL; p = &(cache->cacheItem2); memset (p->gaiaBlob, '\0', 64); p->gaiaBlobSize = 0; p->crc32 = 0; p->geosGeom = NULL; p->preparedGeosGeom = NULL; for (i = 0; i < MAX_XMLSCHEMA_CACHE; i++) { /* initializing the XmlSchema cache */ p_xmlSchema = &(cache->xmlSchemaCache[i]); p_xmlSchema->timestamp = 0; p_xmlSchema->schemaURI = NULL; p_xmlSchema->schemaDoc = NULL; p_xmlSchema->parserCtxt = NULL; p_xmlSchema->schema = NULL; } /* initializing GEOS and PROJ.4 handles */ #ifndef OMIT_GEOS /* initializing GEOS */ cache->GEOS_handle = initGEOS_r (NULL, NULL); GEOSContext_setNoticeMessageHandler_r (cache->GEOS_handle, conn_geos_warning, cache); GEOSContext_setErrorMessageHandler_r (cache->GEOS_handle, conn_geos_error, cache); #endif /* end GEOS */ #ifndef OMIT_PROJ /* initializing the PROJ.4 context */ cache->PROJ_handle = pj_ctx_alloc (); #endif /* end PROJ.4 */ done: return cache; }