XS-libgeos
view release on metacpan or search on metacpan
geos-3.7.3/capi/geos_c.cpp view on Meta::CPAN
/************************************************************************
*
*
* C-Wrapper for GEOS library
*
* Copyright (C) 2010 2011 Sandro Santilli <strk@kbt.io>
* Copyright (C) 2005-2006 Refractions Research Inc.
*
* This is free software; you can redistribute and/or modify it under
* the terms of the GNU Lesser General Public Licence as published
* by the Free Software Foundation.
* See the COPYING file for more information.
*
* Author: Sandro Santilli <strk@kbt.io>
*
***********************************************************************/
#include <geos/geom/prep/PreparedGeometryFactory.h>
#include <geos/index/strtree/STRtree.h>
#include <geos/io/WKTReader.h>
#include <geos/io/WKBReader.h>
#include <geos/io/WKTWriter.h>
#include <geos/io/WKBWriter.h>
#include <geos/operation/overlay/OverlayOp.h>
#include <geos/operation/union/CascadedPolygonUnion.h>
#include <geos/algorithm/distance/DiscreteHausdorffDistance.h>
#include <geos/algorithm/distance/DiscreteFrechetDistance.h>
#include <geos/util/Interrupt.h>
#include <stdexcept>
#include <new>
#ifdef _MSC_VER
#pragma warning(disable : 4099)
#endif
// Some extra magic to make type declarations in geos_c.h work - for cross-checking of types in header.
#define GEOSGeometry geos::geom::Geometry
#define GEOSPreparedGeometry geos::geom::prep::PreparedGeometry
#define GEOSCoordSequence geos::geom::CoordinateSequence
#define GEOSSTRtree geos::index::strtree::STRtree
#define GEOSWKTReader_t geos::io::WKTReader
#define GEOSWKTWriter_t geos::io::WKTWriter
#define GEOSWKBReader_t geos::io::WKBReader
#define GEOSWKBWriter_t geos::io::WKBWriter
typedef struct GEOSBufParams_t GEOSBufferParams;
#include "geos_c.h"
/// Define this if you want operations triggering Exceptions to
/// be printed (will use the NOTIFY channel - only implemented for GEOSUnion so far)
///
#undef VERBOSE_EXCEPTIONS
#include <geos/export.h>
/*
#if defined(_MSC_VER)
# define GEOS_DLL __declspec(dllexport)
#else
# define GEOS_DLL
#endif
*/
// import the most frequently used definitions globally
using geos::geom::Geometry;
using geos::geom::LineString;
using geos::geom::Polygon;
using geos::geom::CoordinateSequence;
using geos::geom::GeometryFactory;
using geos::io::WKTReader;
using geos::io::WKTWriter;
using geos::io::WKBReader;
using geos::io::WKBWriter;
using geos::index::strtree::STRtree;
using geos::operation::overlay::OverlayOp;
using geos::operation::overlay::overlayOp;
using geos::operation::geounion::CascadedPolygonUnion;
typedef std::unique_ptr<Geometry> GeomPtr;
//## GLOBALS ################################################
// NOTE: SRID will have to be changed after geometry creation
GEOSContextHandle_t handle = NULL;
extern "C" {
void
initGEOS (GEOSMessageHandler nf, GEOSMessageHandler ef)
{
if ( ! handle )
{
handle = initGEOS_r( nf, ef );
}
else
{
GEOSContext_setNoticeHandler_r(handle, nf);
GEOSContext_setErrorHandler_r(handle, ef);
}
geos::util::Interrupt::cancel();
}
void
finishGEOS ()
{
if (handle != NULL) {
finishGEOS_r( handle );
handle = NULL;
}
}
GEOSInterruptCallback*
GEOS_interruptRegisterCallback(GEOSInterruptCallback* cb)
{
return geos::util::Interrupt::registerCallback(cb);
}
void
GEOS_interruptRequest()
{
geos::util::Interrupt::request();
}
void
GEOS_interruptCancel()
{
geos::util::Interrupt::cancel();
}
void
GEOSFree (void* buffer)
{
GEOSFree_r( handle, buffer );
}
( run in 0.516 second using v1.01-cache-2.11-cpan-5a3173703d6 )