1 /************************************************************************
4 * C-Wrapper for GEOS library
6 * Copyright (C) 2010 2011 Sandro Santilli <strk@keybit.net>
7 * Copyright (C) 2005-2006 Refractions Research Inc.
9 * This is free software; you can redistribute and/or modify it under
10 * the terms of the GNU Lesser General Public Licence as published
11 * by the Free Software Foundation.
12 * See the COPYING file for more information.
14 * Author: Sandro Santilli <strk@keybit.net>
16 ***********************************************************************/
18 #include <geos/geom/prep/PreparedGeometryFactory.h>
19 #include <geos/index/strtree/STRtree.h>
20 #include <geos/io/WKTReader.h>
21 #include <geos/io/WKBReader.h>
22 #include <geos/io/WKTWriter.h>
23 #include <geos/io/WKBWriter.h>
24 #include <geos/io/CLocalizer.h>
25 #include <geos/operation/overlay/OverlayOp.h>
26 #include <geos/operation/union/CascadedPolygonUnion.h>
27 #include <geos/algorithm/distance/DiscreteHausdorffDistance.h>
28 #include <geos/util/Interrupt.h>
34 #pragma warning(disable : 4099)
37 // Some extra magic to make type declarations in geos_c.h work - for cross-checking of types in header.
38 #define GEOSGeometry geos::geom::Geometry
39 #define GEOSPreparedGeometry geos::geom::prep::PreparedGeometry
40 #define GEOSCoordSequence geos::geom::CoordinateSequence
41 #define GEOSSTRtree geos::index::strtree::STRtree
42 #define GEOSWKTReader_t geos::io::WKTReader
43 #define GEOSWKTWriter_t geos::io::WKTWriter
44 #define GEOSWKBReader_t geos::io::WKBReader
45 #define GEOSWKBWriter_t geos::io::WKBWriter
46 typedef struct GEOSBufParams_t GEOSBufferParams
;
50 /// Define this if you want operations triggering Exceptions to
51 /// be printed (will use the NOTIFY channel - only implemented for GEOSUnion so far)
53 #undef VERBOSE_EXCEPTIONS
55 #include <geos/export.h>
59 # define GEOS_DLL __declspec(dllexport)
65 // import the most frequently used definitions globally
66 using geos::geom::Geometry
;
67 using geos::geom::LineString
;
68 using geos::geom::Polygon
;
69 using geos::geom::CoordinateSequence
;
70 using geos::geom::GeometryFactory
;
72 using geos::io::WKTReader
;
73 using geos::io::WKTWriter
;
74 using geos::io::WKBReader
;
75 using geos::io::WKBWriter
;
76 using geos::io::CLocalizer
;
78 using geos::index::strtree::STRtree
;
80 using geos::operation::overlay::OverlayOp
;
81 using geos::operation::overlay::overlayOp
;
82 using geos::operation::geounion::CascadedPolygonUnion
;
84 typedef std::auto_ptr
<Geometry
> GeomAutoPtr
;
86 //## GLOBALS ################################################
88 // NOTE: SRID will have to be changed after geometry creation
89 GEOSContextHandle_t handle
= NULL
;
94 initGEOS (GEOSMessageHandler nf
, GEOSMessageHandler ef
)
98 handle
= initGEOS_r( nf
, ef
);
102 GEOSContext_setNoticeHandler_r(handle
, nf
);
103 GEOSContext_setErrorHandler_r(handle
, ef
);
106 geos::util::Interrupt::cancel();
112 if (handle
!= NULL
) {
113 finishGEOS_r( handle
);
118 GEOSInterruptCallback
*
119 GEOS_interruptRegisterCallback(GEOSInterruptCallback
* cb
)
121 return geos::util::Interrupt::registerCallback(cb
);
125 GEOS_interruptRequest()
127 geos::util::Interrupt::request();
131 GEOS_interruptCancel()
133 geos::util::Interrupt::cancel();
137 GEOSFree (void* buffer
)
139 GEOSFree_r( handle
, buffer
);
142 /****************************************************************
143 ** relate()-related functions
144 ** return 0 = false, 1 = true, 2 = error occured
148 GEOSDisjoint(const Geometry
*g1
, const Geometry
*g2
)
150 return GEOSDisjoint_r( handle
, g1
, g2
);
154 GEOSTouches(const Geometry
*g1
, const Geometry
*g2
)
156 return GEOSTouches_r( handle
, g1
, g2
);
160 GEOSIntersects(const Geometry
*g1
, const Geometry
*g2
)
162 return GEOSIntersects_r( handle
, g1
, g2
);
166 GEOSCrosses(const Geometry
*g1
, const Geometry
*g2
)
168 return GEOSCrosses_r( handle
, g1
, g2
);
172 GEOSWithin(const Geometry
*g1
, const Geometry
*g2
)
174 return GEOSWithin_r( handle
, g1
, g2
);
177 // call g1->contains(g2)
180 // 2 = error was trapped
182 GEOSContains(const Geometry
*g1
, const Geometry
*g2
)
184 return GEOSContains_r( handle
, g1
, g2
);
188 GEOSOverlaps(const Geometry
*g1
, const Geometry
*g2
)
190 return GEOSOverlaps_r( handle
, g1
, g2
);
194 GEOSCovers(const Geometry
*g1
, const Geometry
*g2
)
196 return GEOSCovers_r( handle
, g1
, g2
);
200 GEOSCoveredBy(const Geometry
*g1
, const Geometry
*g2
)
202 return GEOSCoveredBy_r( handle
, g1
, g2
);
206 //-------------------------------------------------------------------
207 // low-level relate functions
208 //------------------------------------------------------------------
211 GEOSRelatePattern(const Geometry
*g1
, const Geometry
*g2
, const char *pat
)
213 return GEOSRelatePattern_r( handle
, g1
, g2
, pat
);
217 GEOSRelatePatternMatch(const char *mat
, const char *pat
)
219 return GEOSRelatePatternMatch_r( handle
, mat
, pat
);
223 GEOSRelate(const Geometry
*g1
, const Geometry
*g2
)
225 return GEOSRelate_r( handle
, g1
, g2
);
229 GEOSRelateBoundaryNodeRule(const Geometry
*g1
, const Geometry
*g2
, int bnr
)
231 return GEOSRelateBoundaryNodeRule_r( handle
, g1
, g2
, bnr
);
235 //-----------------------------------------------------------------
237 //-----------------------------------------------------------------
241 GEOSisValid(const Geometry
*g1
)
243 return GEOSisValid_r( handle
, g1
);
247 GEOSisValidReason(const Geometry
*g1
)
249 return GEOSisValidReason_r( handle
, g1
);
253 GEOSisValidDetail(const Geometry
*g
, int flags
,
254 char** reason
, Geometry
** location
)
256 return GEOSisValidDetail_r( handle
, g
, flags
, reason
, location
);
259 //-----------------------------------------------------------------
261 //-----------------------------------------------------------------
264 GEOSEquals(const Geometry
*g1
, const Geometry
*g2
)
266 return GEOSEquals_r( handle
, g1
, g2
);
270 GEOSEqualsExact(const Geometry
*g1
, const Geometry
*g2
, double tolerance
)
272 return GEOSEqualsExact_r( handle
, g1
, g2
, tolerance
);
276 GEOSDistance(const Geometry
*g1
, const Geometry
*g2
, double *dist
)
278 return GEOSDistance_r( handle
, g1
, g2
, dist
);
282 GEOSHausdorffDistance(const Geometry
*g1
, const Geometry
*g2
, double *dist
)
284 return GEOSHausdorffDistance_r( handle
, g1
, g2
, dist
);
288 GEOSHausdorffDistanceDensify(const Geometry
*g1
, const Geometry
*g2
, double densifyFrac
, double *dist
)
290 return GEOSHausdorffDistanceDensify_r( handle
, g1
, g2
, densifyFrac
, dist
);
294 GEOSArea(const Geometry
*g
, double *area
)
296 return GEOSArea_r( handle
, g
, area
);
300 GEOSLength(const Geometry
*g
, double *length
)
302 return GEOSLength_r( handle
, g
, length
);
306 GEOSGeomFromWKT(const char *wkt
)
308 return GEOSGeomFromWKT_r( handle
, wkt
);
312 GEOSGeomToWKT(const Geometry
*g1
)
314 return GEOSGeomToWKT_r( handle
, g1
);
317 // Remember to free the result!
319 GEOSGeomToWKB_buf(const Geometry
*g
, size_t *size
)
321 return GEOSGeomToWKB_buf_r( handle
, g
, size
);
325 GEOSGeomFromWKB_buf(const unsigned char *wkb
, size_t size
)
327 return GEOSGeomFromWKB_buf_r( handle
, wkb
, size
);
330 /* Read/write wkb hex values. Returned geometries are
331 owned by the caller.*/
333 GEOSGeomToHEX_buf(const Geometry
*g
, size_t *size
)
335 return GEOSGeomToHEX_buf_r( handle
, g
, size
);
339 GEOSGeomFromHEX_buf(const unsigned char *hex
, size_t size
)
341 return GEOSGeomFromHEX_buf_r( handle
, hex
, size
);
345 GEOSisEmpty(const Geometry
*g1
)
347 return GEOSisEmpty_r( handle
, g1
);
351 GEOSisSimple(const Geometry
*g1
)
353 return GEOSisSimple_r( handle
, g1
);
357 GEOSisRing(const Geometry
*g
)
359 return GEOSisRing_r( handle
, g
);
364 //free the result of this
366 GEOSGeomType(const Geometry
*g1
)
368 return GEOSGeomType_r( handle
, g1
);
371 // Return postgis geometry type index
373 GEOSGeomTypeId(const Geometry
*g1
)
375 return GEOSGeomTypeId_r( handle
, g1
);
381 //-------------------------------------------------------------------
382 // GEOS functions that return geometries
383 //-------------------------------------------------------------------
386 GEOSEnvelope(const Geometry
*g1
)
388 return GEOSEnvelope_r( handle
, g1
);
392 GEOSIntersection(const Geometry
*g1
, const Geometry
*g2
)
394 return GEOSIntersection_r( handle
, g1
, g2
);
398 GEOSBuffer(const Geometry
*g1
, double width
, int quadrantsegments
)
400 return GEOSBuffer_r( handle
, g1
, width
, quadrantsegments
);
404 GEOSBufferWithStyle(const Geometry
*g1
, double width
, int quadsegs
,
405 int endCapStyle
, int joinStyle
, double mitreLimit
)
407 return GEOSBufferWithStyle_r( handle
, g1
, width
, quadsegs
, endCapStyle
,
408 joinStyle
, mitreLimit
);
412 GEOSSingleSidedBuffer(const Geometry
*g1
, double width
, int quadsegs
,
413 int joinStyle
, double mitreLimit
, int leftSide
)
415 return GEOSSingleSidedBuffer_r( handle
, g1
, width
, quadsegs
,
416 joinStyle
, mitreLimit
, leftSide
);
420 GEOSOffsetCurve(const Geometry
*g1
, double width
, int quadsegs
,
421 int joinStyle
, double mitreLimit
)
423 return GEOSOffsetCurve_r( handle
, g1
, width
, quadsegs
,
424 joinStyle
, mitreLimit
);
428 GEOSConvexHull(const Geometry
*g1
)
430 return GEOSConvexHull_r( handle
, g1
);
434 GEOSDifference(const Geometry
*g1
, const Geometry
*g2
)
436 return GEOSDifference_r( handle
, g1
, g2
);
440 GEOSBoundary(const Geometry
*g1
)
442 return GEOSBoundary_r( handle
, g1
);
446 GEOSSymDifference(const Geometry
*g1
, const Geometry
*g2
)
448 return GEOSSymDifference_r( handle
, g1
, g2
);
452 GEOSUnion(const Geometry
*g1
, const Geometry
*g2
)
454 return GEOSUnion_r( handle
, g1
, g2
);
458 GEOSUnaryUnion(const Geometry
*g1
)
460 return GEOSUnaryUnion_r( handle
, g1
);
464 GEOSNode(const Geometry
*g
)
466 return GEOSNode_r( handle
, g
);
470 GEOSUnionCascaded(const Geometry
*g1
)
472 return GEOSUnionCascaded_r( handle
, g1
);
476 GEOSPointOnSurface(const Geometry
*g1
)
478 return GEOSPointOnSurface_r( handle
, g1
);
485 //-------------------------------------------------------------------
486 // memory management functions
487 //------------------------------------------------------------------
491 GEOSGeom_destroy(Geometry
*a
)
493 return GEOSGeom_destroy_r( handle
, a
);
498 GEOSGetNumCoordinates(const Geometry
*g1
)
500 return GEOSGetNumCoordinates_r( handle
, g1
);
504 * Return -1 on exception, 0 otherwise.
505 * Converts Geometry to normal form (or canonical form).
508 GEOSNormalize(Geometry
*g1
)
510 return GEOSNormalize_r( handle
, g1
);
514 GEOSGetNumInteriorRings(const Geometry
*g1
)
516 return GEOSGetNumInteriorRings_r( handle
, g1
);
520 // returns -1 on error and 1 for non-multi geometries
522 GEOSGetNumGeometries(const Geometry
*g1
)
524 return GEOSGetNumGeometries_r( handle
, g1
);
529 * Call only on GEOMETRYCOLLECTION or MULTI*.
530 * Return a pointer to the internal Geometry.
533 GEOSGetGeometryN(const Geometry
*g1
, int n
)
535 return GEOSGetGeometryN_r( handle
, g1
, n
);
539 * Call only on LINESTRING
540 * Returns NULL on exception
543 GEOSGeomGetPointN(const Geometry
*g1
, int n
)
545 return GEOSGeomGetPointN_r(handle
, g1
, n
);
549 * Call only on LINESTRING
552 GEOSGeomGetStartPoint(const Geometry
*g1
)
554 return GEOSGeomGetStartPoint_r(handle
, g1
);
558 * Call only on LINESTRING
561 GEOSGeomGetEndPoint(const Geometry
*g1
)
563 return GEOSGeomGetEndPoint_r(handle
, g1
);
567 * Call only on LINESTRING
568 * return 2 on exception, 1 on true, 0 on false
571 GEOSisClosed(const Geometry
*g1
)
573 return GEOSisClosed_r(handle
, g1
);
577 * Call only on LINESTRING
578 * returns 0 on exception, otherwise 1
581 GEOSGeomGetLength(const Geometry
*g1
, double *length
)
583 return GEOSGeomGetLength_r(handle
, g1
, length
);
587 * Call only on LINESTRING
588 * returns -1 on exception
591 GEOSGeomGetNumPoints(const Geometry
*g1
)
593 return GEOSGeomGetNumPoints_r(handle
, g1
);
598 * returns 0 on exception, otherwise 1
601 GEOSGeomGetX(const Geometry
*g1
, double *x
)
603 return GEOSGeomGetX_r(handle
, g1
, x
);
608 * returns 0 on exception, otherwise 1
611 GEOSGeomGetY(const Geometry
*g1
, double *y
)
613 return GEOSGeomGetY_r(handle
, g1
, y
);
617 * Call only on polygon
618 * Return a copy of the internal Geometry.
621 GEOSGetExteriorRing(const Geometry
*g1
)
623 return GEOSGetExteriorRing_r( handle
, g1
);
627 * Call only on polygon
628 * Return a pointer to internal storage, do not destroy it.
631 GEOSGetInteriorRingN(const Geometry
*g1
, int n
)
633 return GEOSGetInteriorRingN_r( handle
, g1
, n
);
637 GEOSGetCentroid(const Geometry
*g
)
639 return GEOSGetCentroid_r( handle
, g
);
643 GEOSGeom_createCollection(int type
, Geometry
**geoms
, unsigned int ngeoms
)
645 return GEOSGeom_createCollection_r( handle
, type
, geoms
, ngeoms
);
649 GEOSPolygonize(const Geometry
* const * g
, unsigned int ngeoms
)
651 return GEOSPolygonize_r( handle
, g
, ngeoms
);
655 GEOSPolygonizer_getCutEdges(const Geometry
* const * g
, unsigned int ngeoms
)
657 return GEOSPolygonizer_getCutEdges_r( handle
, g
, ngeoms
);
661 GEOSPolygonize_full(const GEOSGeometry
* input
,
662 GEOSGeometry
** cuts
, GEOSGeometry
** dangles
, GEOSGeometry
** invalid
)
664 return GEOSPolygonize_full_r(handle
, input
, cuts
, dangles
, invalid
);
668 GEOSLineMerge(const Geometry
*g
)
670 return GEOSLineMerge_r( handle
, g
);
674 GEOSGetSRID(const Geometry
*g
)
676 return GEOSGetSRID_r( handle
, g
);
680 GEOSSetSRID(Geometry
*g
, int srid
)
682 return GEOSSetSRID_r( handle
, g
, srid
);
686 GEOSHasZ(const Geometry
*g
)
688 return GEOSHasZ_r( handle
, g
);
692 GEOS_getWKBOutputDims()
694 return GEOS_getWKBOutputDims_r( handle
);
698 GEOS_setWKBOutputDims(int newdims
)
700 return GEOS_setWKBOutputDims_r( handle
, newdims
);
704 GEOS_getWKBByteOrder()
706 return GEOS_getWKBByteOrder_r( handle
);
710 GEOS_setWKBByteOrder(int byteOrder
)
712 return GEOS_setWKBByteOrder_r( handle
, byteOrder
);
717 GEOSCoordSeq_create(unsigned int size
, unsigned int dims
)
719 return GEOSCoordSeq_create_r( handle
, size
, dims
);
723 GEOSCoordSeq_setOrdinate(CoordinateSequence
*s
, unsigned int idx
, unsigned int dim
, double val
)
725 return GEOSCoordSeq_setOrdinate_r( handle
, s
, idx
, dim
, val
);
729 GEOSCoordSeq_setX(CoordinateSequence
*s
, unsigned int idx
, double val
)
731 return GEOSCoordSeq_setOrdinate(s
, idx
, 0, val
);
735 GEOSCoordSeq_setY(CoordinateSequence
*s
, unsigned int idx
, double val
)
737 return GEOSCoordSeq_setOrdinate(s
, idx
, 1, val
);
741 GEOSCoordSeq_setZ(CoordinateSequence
*s
, unsigned int idx
, double val
)
743 return GEOSCoordSeq_setOrdinate(s
, idx
, 2, val
);
747 GEOSCoordSeq_clone(const CoordinateSequence
*s
)
749 return GEOSCoordSeq_clone_r( handle
, s
);
753 GEOSCoordSeq_getOrdinate(const CoordinateSequence
*s
, unsigned int idx
, unsigned int dim
, double *val
)
755 return GEOSCoordSeq_getOrdinate_r( handle
, s
, idx
, dim
, val
);
759 GEOSCoordSeq_getX(const CoordinateSequence
*s
, unsigned int idx
, double *val
)
761 return GEOSCoordSeq_getOrdinate(s
, idx
, 0, val
);
765 GEOSCoordSeq_getY(const CoordinateSequence
*s
, unsigned int idx
, double *val
)
767 return GEOSCoordSeq_getOrdinate(s
, idx
, 1, val
);
771 GEOSCoordSeq_getZ(const CoordinateSequence
*s
, unsigned int idx
, double *val
)
773 return GEOSCoordSeq_getOrdinate(s
, idx
, 2, val
);
777 GEOSCoordSeq_getSize(const CoordinateSequence
*s
, unsigned int *size
)
779 return GEOSCoordSeq_getSize_r( handle
, s
, size
);
783 GEOSCoordSeq_getDimensions(const CoordinateSequence
*s
, unsigned int *dims
)
785 return GEOSCoordSeq_getDimensions_r( handle
, s
, dims
);
789 GEOSCoordSeq_destroy(CoordinateSequence
*s
)
791 return GEOSCoordSeq_destroy_r( handle
, s
);
794 const CoordinateSequence
*
795 GEOSGeom_getCoordSeq(const Geometry
*g
)
797 return GEOSGeom_getCoordSeq_r( handle
, g
);
801 GEOSGeom_createPoint(CoordinateSequence
*cs
)
803 return GEOSGeom_createPoint_r( handle
, cs
);
807 GEOSGeom_createLinearRing(CoordinateSequence
*cs
)
809 return GEOSGeom_createLinearRing_r( handle
, cs
);
813 GEOSGeom_createLineString(CoordinateSequence
*cs
)
815 return GEOSGeom_createLineString_r( handle
, cs
);
819 GEOSGeom_createPolygon(Geometry
*shell
, Geometry
**holes
, unsigned int nholes
)
821 return GEOSGeom_createPolygon_r( handle
, shell
, holes
, nholes
);
825 GEOSGeom_clone(const Geometry
*g
)
827 return GEOSGeom_clone_r( handle
, g
);
831 GEOSGeom_getDimensions(const Geometry
*g
)
833 return GEOSGeom_getDimensions_r( handle
, g
);
837 GEOSGeom_getCoordinateDimension(const Geometry
*g
)
839 return GEOSGeom_getCoordinateDimension_r( handle
, g
);
843 GEOSSimplify(const Geometry
*g1
, double tolerance
)
845 return GEOSSimplify_r( handle
, g1
, tolerance
);
849 GEOSTopologyPreserveSimplify(const Geometry
*g1
, double tolerance
)
851 return GEOSTopologyPreserveSimplify_r( handle
, g1
, tolerance
);
857 GEOSWKTReader_create()
859 return GEOSWKTReader_create_r( handle
);
863 GEOSWKTReader_destroy(WKTReader
*reader
)
865 GEOSWKTReader_destroy_r( handle
, reader
);
870 GEOSWKTReader_read(WKTReader
*reader
, const char *wkt
)
872 return GEOSWKTReader_read_r( handle
, reader
, wkt
);
877 GEOSWKTWriter_create()
879 return GEOSWKTWriter_create_r( handle
);
883 GEOSWKTWriter_destroy(WKTWriter
*Writer
)
885 GEOSWKTWriter_destroy_r( handle
, Writer
);
889 GEOSWKTWriter_write(WKTWriter
*writer
, const Geometry
*geom
)
891 return GEOSWKTWriter_write_r( handle
, writer
, geom
);
895 GEOSWKTWriter_setTrim(WKTWriter
*writer
, char trim
)
897 GEOSWKTWriter_setTrim_r(handle
, writer
, trim
);
901 GEOSWKTWriter_setRoundingPrecision(WKTWriter
*writer
, int precision
)
903 return GEOSWKTWriter_setRoundingPrecision_r(handle
, writer
, precision
);
907 GEOSWKTWriter_setOutputDimension(WKTWriter
*writer
, int dim
)
909 GEOSWKTWriter_setOutputDimension_r(handle
, writer
, dim
);
913 GEOSWKTWriter_getOutputDimension(WKTWriter
*writer
)
915 return GEOSWKTWriter_getOutputDimension_r(handle
, writer
);
919 GEOSWKTWriter_setOld3D(WKTWriter
*writer
, int useOld3D
)
921 GEOSWKTWriter_setOld3D_r(handle
, writer
, useOld3D
);
926 GEOSWKBReader_create()
928 return GEOSWKBReader_create_r( handle
);
932 GEOSWKBReader_destroy(WKBReader
*reader
)
934 GEOSWKBReader_destroy_r( handle
, reader
);
939 GEOSWKBReader_read(WKBReader
*reader
, const unsigned char *wkb
, size_t size
)
941 return GEOSWKBReader_read_r( handle
, reader
, wkb
, size
);
945 GEOSWKBReader_readHEX(WKBReader
*reader
, const unsigned char *hex
, size_t size
)
947 return GEOSWKBReader_readHEX_r( handle
, reader
, hex
, size
);
952 GEOSWKBWriter_create()
954 return GEOSWKBWriter_create_r( handle
);
958 GEOSWKBWriter_destroy(WKBWriter
*Writer
)
960 GEOSWKBWriter_destroy_r( handle
, Writer
);
964 /* The caller owns the result */
966 GEOSWKBWriter_write(WKBWriter
*writer
, const Geometry
*geom
, size_t *size
)
968 return GEOSWKBWriter_write_r( handle
, writer
, geom
, size
);
971 /* The caller owns the result */
973 GEOSWKBWriter_writeHEX(WKBWriter
*writer
, const Geometry
*geom
, size_t *size
)
975 return GEOSWKBWriter_writeHEX_r( handle
, writer
, geom
, size
);
979 GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter
* writer
)
981 return GEOSWKBWriter_getOutputDimension_r( handle
, writer
);
985 GEOSWKBWriter_setOutputDimension(GEOSWKBWriter
* writer
, int newDimension
)
987 GEOSWKBWriter_setOutputDimension_r( handle
, writer
, newDimension
);
991 GEOSWKBWriter_getByteOrder(const GEOSWKBWriter
* writer
)
993 return GEOSWKBWriter_getByteOrder_r( handle
, writer
);
997 GEOSWKBWriter_setByteOrder(GEOSWKBWriter
* writer
, int newByteOrder
)
999 GEOSWKBWriter_setByteOrder_r( handle
, writer
, newByteOrder
);
1003 GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter
* writer
)
1005 return GEOSWKBWriter_getIncludeSRID_r( handle
, writer
);
1009 GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter
* writer
, const char newIncludeSRID
)
1011 GEOSWKBWriter_setIncludeSRID_r( handle
, writer
, newIncludeSRID
);
1015 //-----------------------------------------------------------------
1016 // Prepared Geometry
1017 //-----------------------------------------------------------------
1019 const geos::geom::prep::PreparedGeometry
*
1020 GEOSPrepare(const Geometry
*g
)
1022 return GEOSPrepare_r( handle
, g
);
1026 GEOSPreparedGeom_destroy(const geos::geom::prep::PreparedGeometry
*a
)
1028 GEOSPreparedGeom_destroy_r( handle
, a
);
1032 GEOSPreparedContains(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1034 return GEOSPreparedContains_r( handle
, pg1
, g2
);
1038 GEOSPreparedContainsProperly(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1040 return GEOSPreparedContainsProperly_r( handle
, pg1
, g2
);
1044 GEOSPreparedCoveredBy(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1046 return GEOSPreparedCoveredBy_r( handle
, pg1
, g2
);
1050 GEOSPreparedCovers(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1052 return GEOSPreparedCovers_r( handle
, pg1
, g2
);
1056 GEOSPreparedCrosses(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1058 return GEOSPreparedCrosses_r( handle
, pg1
, g2
);
1062 GEOSPreparedDisjoint(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1064 return GEOSPreparedDisjoint_r( handle
, pg1
, g2
);
1068 GEOSPreparedIntersects(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1070 return GEOSPreparedIntersects_r( handle
, pg1
, g2
);
1074 GEOSPreparedOverlaps(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1076 return GEOSPreparedOverlaps_r( handle
, pg1
, g2
);
1080 GEOSPreparedTouches(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1082 return GEOSPreparedTouches_r( handle
, pg1
, g2
);
1086 GEOSPreparedWithin(const geos::geom::prep::PreparedGeometry
*pg1
, const Geometry
*g2
)
1088 return GEOSPreparedWithin_r( handle
, pg1
, g2
);
1092 GEOSSTRtree_create (size_t nodeCapacity
)
1094 return GEOSSTRtree_create_r( handle
, nodeCapacity
);
1098 GEOSSTRtree_insert (geos::index::strtree::STRtree
*tree
,
1099 const geos::geom::Geometry
*g
,
1102 GEOSSTRtree_insert_r( handle
, tree
, g
, item
);
1106 GEOSSTRtree_query (geos::index::strtree::STRtree
*tree
,
1107 const geos::geom::Geometry
*g
,
1108 GEOSQueryCallback cb
,
1111 GEOSSTRtree_query_r( handle
, tree
, g
, cb
, userdata
);
1115 GEOSSTRtree_iterate(geos::index::strtree::STRtree
*tree
,
1116 GEOSQueryCallback callback
,
1119 GEOSSTRtree_iterate_r( handle
, tree
, callback
, userdata
);
1123 GEOSSTRtree_remove (geos::index::strtree::STRtree
*tree
,
1124 const geos::geom::Geometry
*g
,
1127 return GEOSSTRtree_remove_r( handle
, tree
, g
, item
);
1131 GEOSSTRtree_destroy (geos::index::strtree::STRtree
*tree
)
1133 GEOSSTRtree_destroy_r( handle
, tree
);
1137 GEOSProject (const geos::geom::Geometry
*g
,
1138 const geos::geom::Geometry
*p
)
1140 return GEOSProject_r (handle
, g
, p
);
1143 geos::geom::Geometry
*
1144 GEOSInterpolate (const geos::geom::Geometry
*g
,
1147 return GEOSInterpolate_r(handle
, g
, d
);
1151 GEOSProjectNormalized (const geos::geom::Geometry
*g
,
1152 const geos::geom::Geometry
*p
)
1154 return GEOSProjectNormalized_r (handle
, g
, p
);
1157 geos::geom::Geometry
*
1158 GEOSInterpolateNormalized (const geos::geom::Geometry
*g
,
1161 return GEOSInterpolateNormalized_r(handle
, g
, d
);
1164 geos::geom::Geometry
*
1165 GEOSGeom_extractUniquePoints (const geos::geom::Geometry
*g
)
1167 return GEOSGeom_extractUniquePoints_r(handle
, g
);
1170 geos::geom::Geometry
*
1171 GEOSGeom_createEmptyCollection(int type
)
1173 return GEOSGeom_createEmptyCollection_r(handle
, type
);
1176 geos::geom::Geometry
*
1177 GEOSGeom_createEmptyPoint()
1179 return GEOSGeom_createEmptyPoint_r(handle
);
1182 geos::geom::Geometry
*
1183 GEOSGeom_createEmptyLineString()
1185 return GEOSGeom_createEmptyLineString_r(handle
);
1188 geos::geom::Geometry
*
1189 GEOSGeom_createEmptyPolygon()
1191 return GEOSGeom_createEmptyPolygon_r(handle
);
1195 GEOSOrientationIndex(double Ax
, double Ay
, double Bx
, double By
,
1196 double Px
, double Py
)
1198 return GEOSOrientationIndex_r(handle
, Ax
, Ay
, Bx
, By
, Px
, Py
);
1202 GEOSSharedPaths(const GEOSGeometry
* g1
, const GEOSGeometry
* g2
)
1204 return GEOSSharedPaths_r(handle
, g1
, g2
);
1208 GEOSSnap(const GEOSGeometry
* g1
, const GEOSGeometry
* g2
, double tolerance
)
1210 return GEOSSnap_r(handle
, g1
, g2
, tolerance
);
1214 GEOSBufferParams_create()
1216 return GEOSBufferParams_create_r(handle
);
1220 GEOSBufferParams_destroy(GEOSBufferParams
* p
)
1222 return GEOSBufferParams_destroy_r(handle
, p
);
1226 GEOSBufferParams_setEndCapStyle(GEOSBufferParams
* p
, int style
)
1228 return GEOSBufferParams_setEndCapStyle_r(handle
, p
, style
);
1232 GEOSBufferParams_setJoinStyle(GEOSBufferParams
* p
, int joinStyle
)
1234 return GEOSBufferParams_setJoinStyle_r(handle
, p
, joinStyle
);
1238 GEOSBufferParams_setMitreLimit(GEOSBufferParams
* p
, double l
)
1240 return GEOSBufferParams_setMitreLimit_r(handle
, p
, l
);
1244 GEOSBufferParams_setQuadrantSegments(GEOSBufferParams
* p
, int joinStyle
)
1246 return GEOSBufferParams_setQuadrantSegments_r(handle
, p
, joinStyle
);
1250 GEOSBufferParams_setSingleSided(GEOSBufferParams
* p
, int singleSided
)
1252 return GEOSBufferParams_setSingleSided_r(handle
, p
, singleSided
);
1256 GEOSBufferWithParams(const Geometry
* g
, const GEOSBufferParams
* p
, double w
)
1258 return GEOSBufferWithParams_r(handle
, g
, p
, w
);
1262 GEOSDelaunayTriangulation(const Geometry
*g
, double tolerance
, int onlyEdges
)
1264 return GEOSDelaunayTriangulation_r(handle
, g
, tolerance
, onlyEdges
);