Coverage Report

Created: 2025-12-14 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/geos/capi/geos_c.cpp
Line
Count
Source
1
/************************************************************************
2
 *
3
 *
4
 * C-Wrapper for GEOS library
5
 *
6
 * Copyright (C) 2010 2011 Sandro Santilli <strk@kbt.io>
7
 * Copyright (C) 2005-2006 Refractions Research Inc.
8
 *
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.
13
 *
14
 * Author: Sandro Santilli <strk@kbt.io>
15
 *
16
 ***********************************************************************/
17
18
#include <geos/geom/prep/PreparedGeometryFactory.h>
19
#include <geos/index/strtree/TemplateSTRtree.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/GeoJSONReader.h>
25
#include <geos/io/GeoJSONWriter.h>
26
#include <geos/operation/buffer/BufferParameters.h>
27
#include <geos/operation/cluster/Clusters.h>
28
#include <geos/util/Interrupt.h>
29
30
#include <stdexcept>
31
#include <new>
32
33
#ifdef _MSC_VER
34
#pragma warning(disable : 4099)
35
#endif
36
37
// Some extra magic to make type declarations in geos_c.h work -
38
// for cross-checking of types in header.
39
// NOTE: the below defines or struct definition must be kept in exact
40
// sync between geos_c.cpp and geos_ts_c.cpp to avoid C++ One Definition Rule
41
// violations.
42
#define GEOSGeometry geos::geom::Geometry
43
#define GEOSPreparedGeometry geos::geom::prep::PreparedGeometry
44
#define GEOSClusterInfo geos::operation::cluster::Clusters
45
#define GEOSCoordSequence geos::geom::CoordinateSequence
46
#define GEOSBufferParams geos::operation::buffer::BufferParameters
47
#define GEOSSTRtree geos::index::strtree::TemplateSTRtree<void*>
48
#define GEOSWKTReader geos::io::WKTReader
49
#define GEOSWKTWriter geos::io::WKTWriter
50
#define GEOSWKBReader geos::io::WKBReader
51
#define GEOSWKBWriter geos::io::WKBWriter
52
#define GEOSGeoJSONReader geos::io::GeoJSONReader
53
#define GEOSGeoJSONWriter geos::io::GeoJSONWriter
54
55
// Implementation struct for the GEOSCoverageCleanParams object
56
typedef struct {
57
    double snappingDistance;
58
    int    overlapMergeStrategy;
59
    double gapMaximumWidth;
60
} GEOSCoverageCleanParams;
61
62
// Implementation struct for the GEOSMakeValidParams object
63
typedef struct {
64
    int method;
65
    int keepCollapsed;
66
} GEOSMakeValidParams;
67
68
69
#include "geos_c.h"
70
71
/// Define this if you want operations triggering Exceptions to
72
/// be printed (will use the NOTIFY channel - only implemented for GEOSUnion so far)
73
///
74
#undef VERBOSE_EXCEPTIONS
75
76
#include <geos/export.h>
77
78
/*
79
#if defined(_MSC_VER)
80
#  define GEOS_DLL     __declspec(dllexport)
81
#else
82
#  define GEOS_DLL
83
#endif
84
*/
85
86
// import the most frequently used definitions globally
87
using geos::geom::Geometry;
88
using geos::geom::LineString;
89
using geos::geom::Polygon;
90
using geos::geom::CoordinateSequence;
91
using geos::geom::GeometryFactory;
92
93
using geos::io::WKTReader;
94
using geos::io::WKTWriter;
95
using geos::io::WKBReader;
96
using geos::io::WKBWriter;
97
using geos::io::GeoJSONReader;
98
using geos::io::GeoJSONWriter;
99
100
101
typedef std::unique_ptr<Geometry> GeomPtr;
102
103
//## GLOBALS ################################################
104
105
// NOTE: SRID will have to be changed after geometry creation
106
GEOSContextHandle_t handle = NULL;
107
108
extern "C" {
109
110
    void
111
    initGEOS(GEOSMessageHandler nf, GEOSMessageHandler ef)
112
1
    {
113
1
        if(! handle) {
114
1
            handle = initGEOS_r(nf, ef);
115
1
        }
116
0
        else {
117
0
            GEOSContext_setNoticeHandler_r(handle, nf);
118
0
            GEOSContext_setErrorHandler_r(handle, ef);
119
0
        }
120
121
1
        geos::util::Interrupt::cancel();
122
1
    }
123
124
    void
125
    finishGEOS()
126
0
    {
127
0
        if(handle != NULL) {
128
0
            finishGEOS_r(handle);
129
0
            handle = NULL;
130
0
        }
131
0
    }
132
133
    GEOSInterruptCallback*
134
    GEOS_interruptRegisterCallback(GEOSInterruptCallback* cb)
135
0
    {
136
0
        return geos::util::Interrupt::registerCallback(cb);
137
0
    }
138
139
    void
140
    GEOS_interruptRequest()
141
0
    {
142
0
        geos::util::Interrupt::request();
143
0
    }
144
145
    void
146
    GEOS_interruptCancel()
147
0
    {
148
0
        geos::util::Interrupt::cancel();
149
0
    }
150
151
    void
152
    GEOSFree(void* buffer)
153
0
    {
154
0
        GEOSFree_r(handle, buffer);
155
0
    }
156
157
    /****************************************************************
158
    ** relate()-related functions
159
    ** return 0 = false, 1 = true, 2 = error occurred
160
    **
161
    */
162
    char
163
    GEOSDisjoint(const Geometry* g1, const Geometry* g2)
164
0
    {
165
0
        return GEOSDisjoint_r(handle, g1, g2);
166
0
    }
167
168
    char
169
    GEOSTouches(const Geometry* g1, const Geometry* g2)
170
0
    {
171
0
        return GEOSTouches_r(handle, g1, g2);
172
0
    }
173
174
    char
175
    GEOSIntersects(const Geometry* g1, const Geometry* g2)
176
0
    {
177
0
        return GEOSIntersects_r(handle, g1, g2);
178
0
    }
179
180
    char
181
    GEOSCrosses(const Geometry* g1, const Geometry* g2)
182
0
    {
183
0
        return GEOSCrosses_r(handle, g1, g2);
184
0
    }
185
186
    char
187
    GEOSWithin(const Geometry* g1, const Geometry* g2)
188
0
    {
189
0
        return GEOSWithin_r(handle, g1, g2);
190
0
    }
191
192
// call g1->contains(g2)
193
// returns 0 = false
194
//         1 = true
195
//         2 = error was trapped
196
    char
197
    GEOSContains(const Geometry* g1, const Geometry* g2)
198
0
    {
199
0
        return GEOSContains_r(handle, g1, g2);
200
0
    }
201
202
    char
203
    GEOSOverlaps(const Geometry* g1, const Geometry* g2)
204
0
    {
205
0
        return GEOSOverlaps_r(handle, g1, g2);
206
0
    }
207
208
    char
209
    GEOSCovers(const Geometry* g1, const Geometry* g2)
210
0
    {
211
0
        return GEOSCovers_r(handle, g1, g2);
212
0
    }
213
214
    char
215
    GEOSCoveredBy(const Geometry* g1, const Geometry* g2)
216
0
    {
217
0
        return GEOSCoveredBy_r(handle, g1, g2);
218
0
    }
219
220
221
//-------------------------------------------------------------------
222
// low-level relate functions
223
//------------------------------------------------------------------
224
225
    char
226
    GEOSRelatePattern(const Geometry* g1, const Geometry* g2, const char* imPattern)
227
0
    {
228
0
        return GEOSRelatePattern_r(handle, g1, g2, imPattern);
229
0
    }
230
231
    char
232
    GEOSRelatePatternMatch(const char* intMatrix, const char* imPattern)
233
0
    {
234
0
        return GEOSRelatePatternMatch_r(handle, intMatrix, imPattern);
235
0
    }
236
237
    char*
238
    GEOSRelate(const Geometry* g1, const Geometry* g2)
239
0
    {
240
0
        return GEOSRelate_r(handle, g1, g2);
241
0
    }
242
243
    char*
244
    GEOSRelateBoundaryNodeRule(const Geometry* g1, const Geometry* g2, int bnr)
245
0
    {
246
0
        return GEOSRelateBoundaryNodeRule_r(handle, g1, g2, bnr);
247
0
    }
248
249
250
//-----------------------------------------------------------------
251
// isValid
252
//-----------------------------------------------------------------
253
254
255
    char
256
    GEOSisValid(const Geometry* g)
257
0
    {
258
0
        return GEOSisValid_r(handle, g);
259
0
    }
260
261
    char*
262
    GEOSisValidReason(const Geometry* g)
263
0
    {
264
0
        return GEOSisValidReason_r(handle, g);
265
0
    }
266
267
    char
268
    GEOSisValidDetail(const Geometry* g, int flags,
269
                      char** reason, Geometry** location)
270
0
    {
271
0
        return GEOSisValidDetail_r(handle, g, flags, reason, location);
272
0
    }
273
274
//-----------------------------------------------------------------
275
// general purpose
276
//-----------------------------------------------------------------
277
278
    char
279
    GEOSEquals(const Geometry* g1, const Geometry* g2)
280
0
    {
281
0
        return GEOSEquals_r(handle, g1, g2);
282
0
    }
283
284
    char
285
    GEOSEqualsExact(const Geometry* g1, const Geometry* g2, double tolerance)
286
0
    {
287
0
        return GEOSEqualsExact_r(handle, g1, g2, tolerance);
288
0
    }
289
290
    char
291
    GEOSEqualsIdentical(const Geometry* g1, const Geometry* g2)
292
0
    {
293
0
        return GEOSEqualsIdentical_r(handle, g1, g2);
294
0
    }
295
296
    int
297
    GEOSDistance(const Geometry* g1, const Geometry* g2, double* dist)
298
0
    {
299
0
        return GEOSDistance_r(handle, g1, g2, dist);
300
0
    }
301
302
    char
303
    GEOSDistanceWithin(const Geometry* g1, const Geometry* g2, double dist)
304
0
    {
305
0
        return GEOSDistanceWithin_r(handle, g1, g2, dist);
306
0
    }
307
308
    int
309
    GEOSDistanceIndexed(const Geometry* g1, const Geometry* g2, double* dist)
310
0
    {
311
0
        return GEOSDistanceIndexed_r(handle, g1, g2, dist);
312
0
    }
313
314
    int
315
    GEOSHausdorffDistance(const Geometry* g1, const Geometry* g2, double* dist)
316
0
    {
317
0
        return GEOSHausdorffDistance_r(handle, g1, g2, dist);
318
0
    }
319
320
    int
321
    GEOSHausdorffDistanceDensify(const Geometry* g1, const Geometry* g2, double densifyFrac, double* dist)
322
0
    {
323
0
        return GEOSHausdorffDistanceDensify_r(handle, g1, g2, densifyFrac, dist);
324
0
    }
325
326
    int
327
    GEOSFrechetDistance(const Geometry* g1, const Geometry* g2, double* dist)
328
0
    {
329
0
        return GEOSFrechetDistance_r(handle, g1, g2, dist);
330
0
    }
331
332
    int
333
    GEOSFrechetDistanceDensify(const Geometry* g1, const Geometry* g2, double densifyFrac, double* dist)
334
0
    {
335
0
        return GEOSFrechetDistanceDensify_r(handle, g1, g2, densifyFrac, dist);
336
0
    }
337
338
    int
339
    GEOSArea(const Geometry* g, double* area)
340
0
    {
341
0
        return GEOSArea_r(handle, g, area);
342
0
    }
343
344
    int
345
    GEOSLength(const Geometry* g, double* length)
346
0
    {
347
0
        return GEOSLength_r(handle, g, length);
348
0
    }
349
350
    CoordinateSequence*
351
    GEOSNearestPoints(const Geometry* g1, const Geometry* g2)
352
0
    {
353
0
        return GEOSNearestPoints_r(handle, g1, g2);
354
0
    }
355
356
    GEOSClusterInfo*
357
    GEOSClusterDBSCAN(const GEOSGeometry* g, double eps, unsigned minPoints)
358
0
    {
359
0
        return GEOSClusterDBSCAN_r(handle, g, eps, minPoints);
360
0
    }
361
362
    GEOSClusterInfo*
363
    GEOSClusterGeometryDistance(const GEOSGeometry* g, double d)
364
0
    {
365
0
        return GEOSClusterGeometryDistance_r(handle, g, d);
366
0
    }
367
368
    GEOSClusterInfo*
369
    GEOSClusterGeometryIntersects(const GEOSGeometry* g)
370
0
    {
371
0
        return GEOSClusterGeometryIntersects_r(handle, g);
372
0
    }
373
374
    GEOSClusterInfo*
375
    GEOSClusterEnvelopeDistance(const GEOSGeometry* g, double d)
376
0
    {
377
0
        return GEOSClusterEnvelopeDistance_r(handle, g, d);
378
0
    }
379
380
    GEOSClusterInfo*
381
    GEOSClusterEnvelopeIntersects(const GEOSGeometry* g)
382
0
    {
383
0
        return GEOSClusterEnvelopeIntersects_r(handle, g);
384
0
    }
385
386
    std::size_t GEOSClusterInfo_getNumClusters(const GEOSClusterInfo* clusters)
387
0
    {
388
0
        return GEOSClusterInfo_getNumClusters_r(handle, clusters);
389
0
    }
390
391
    std::size_t GEOSClusterInfo_getClusterSize(const GEOSClusterInfo* clusters, size_t i)
392
0
    {
393
0
        return GEOSClusterInfo_getClusterSize_r(handle, clusters, i);
394
0
    }
395
396
    const std::size_t* GEOSClusterInfo_getInputsForClusterN(const GEOSClusterInfo* clusters, size_t i)
397
0
    {
398
0
        return GEOSClusterInfo_getInputsForClusterN_r(handle, clusters, i);
399
0
    }
400
401
    std::size_t* GEOSClusterInfo_getClustersForInputs(const GEOSClusterInfo* clusters)
402
0
    {
403
0
        return GEOSClusterInfo_getClustersForInputs_r(handle, clusters);
404
0
    }
405
406
    void GEOSClusterInfo_destroy(GEOSClusterInfo* info)
407
0
    {
408
0
        GEOSClusterInfo_destroy_r(handle, info);
409
0
    }
410
411
    Geometry*
412
    GEOSGeomFromWKT(const char* wkt)
413
9.24k
    {
414
9.24k
        return GEOSGeomFromWKT_r(handle, wkt);
415
9.24k
    }
416
417
    char*
418
    GEOSGeomToWKT(const Geometry* g)
419
8.33k
    {
420
8.33k
        return GEOSGeomToWKT_r(handle, g);
421
8.33k
    }
422
423
// Remember to free the result!
424
    unsigned char*
425
    GEOSGeomToWKB_buf(const Geometry* g, std::size_t* size)
426
7.70k
    {
427
7.70k
        return GEOSGeomToWKB_buf_r(handle, g, size);
428
7.70k
    }
429
430
    Geometry*
431
    GEOSGeomFromWKB_buf(const unsigned char* wkb, std::size_t size)
432
8.33k
    {
433
8.33k
        return GEOSGeomFromWKB_buf_r(handle, wkb, size);
434
8.33k
    }
435
436
    /* Read/write wkb hex values.  Returned geometries are
437
       owned by the caller.*/
438
    unsigned char*
439
    GEOSGeomToHEX_buf(const Geometry* g, std::size_t* size)
440
0
    {
441
0
        return GEOSGeomToHEX_buf_r(handle, g, size);
442
0
    }
443
444
    Geometry*
445
    GEOSGeomFromHEX_buf(const unsigned char* hex, std::size_t size)
446
0
    {
447
0
        return GEOSGeomFromHEX_buf_r(handle, hex, size);
448
0
    }
449
450
    char
451
    GEOSisEmpty(const Geometry* g)
452
0
    {
453
0
        return GEOSisEmpty_r(handle, g);
454
0
    }
455
456
    char
457
    GEOSisSimple(const Geometry* g)
458
0
    {
459
0
        return GEOSisSimple_r(handle, g);
460
0
    }
461
462
    char
463
    GEOSisSimpleDetail(const Geometry* g, int returnAllPoints, Geometry** result)
464
0
    {
465
0
        return GEOSisSimpleDetail_r(handle, g, returnAllPoints, result);
466
0
    }
467
468
    char
469
    GEOSisRing(const Geometry* g)
470
0
    {
471
0
        return GEOSisRing_r(handle, g);
472
0
    }
473
474
475
476
//free the result of this
477
    char*
478
    GEOSGeomType(const Geometry* g)
479
0
    {
480
0
        return GEOSGeomType_r(handle, g);
481
0
    }
482
483
// Return postgis geometry type index
484
    int
485
    GEOSGeomTypeId(const Geometry* g)
486
0
    {
487
0
        return GEOSGeomTypeId_r(handle, g);
488
0
    }
489
490
491
492
493
//-------------------------------------------------------------------
494
// GEOS functions that return geometries
495
//-------------------------------------------------------------------
496
497
    Geometry*
498
    GEOSEnvelope(const Geometry* g)
499
0
    {
500
0
        return GEOSEnvelope_r(handle, g);
501
0
    }
502
503
    Geometry*
504
    GEOSIntersection(const Geometry* g1, const Geometry* g2)
505
7.70k
    {
506
7.70k
        return GEOSIntersection_r(handle, g1, g2);
507
7.70k
    }
508
509
    Geometry*
510
    GEOSIntersectionPrec(const Geometry* g1, const Geometry* g2, double gridSize)
511
0
    {
512
0
        return GEOSIntersectionPrec_r(handle, g1, g2, gridSize);
513
0
    }
514
515
    Geometry*
516
    GEOSBuffer(const Geometry* g, double width, int quadrantsegments)
517
0
    {
518
0
        return GEOSBuffer_r(handle, g, width, quadrantsegments);
519
0
    }
520
521
    Geometry*
522
    GEOSBufferWithStyle(const Geometry* g, double width, int quadsegs,
523
                        int endCapStyle, int joinStyle, double mitreLimit)
524
0
    {
525
0
        return GEOSBufferWithStyle_r(handle, g, width, quadsegs, endCapStyle,
526
0
                                     joinStyle, mitreLimit);
527
0
    }
528
529
    Geometry*
530
    GEOSDensify(const Geometry* g, double tolerance)
531
0
    {
532
0
        return GEOSDensify_r(handle, g, tolerance);
533
0
    }
534
535
536
    Geometry*
537
    GEOSSingleSidedBuffer(const Geometry* g, double width, int quadsegs,
538
                          int joinStyle, double mitreLimit, int leftSide)
539
0
    {
540
0
        return GEOSSingleSidedBuffer_r(handle, g, width, quadsegs,
541
0
                                       joinStyle, mitreLimit, leftSide);
542
0
    }
543
544
    Geometry*
545
    GEOSOffsetCurve(const Geometry* g, double width, int quadsegs,
546
                    int joinStyle, double mitreLimit)
547
0
    {
548
0
        return GEOSOffsetCurve_r(handle, g, width, quadsegs,
549
0
                                 joinStyle, mitreLimit);
550
0
    }
551
552
    Geometry*
553
    GEOSConvexHull(const Geometry* g)
554
0
    {
555
0
        return GEOSConvexHull_r(handle, g);
556
0
    }
557
558
    Geometry*
559
    GEOSConcaveHull(const Geometry* g,
560
                    double ratio,
561
                    unsigned int allowHoles)
562
563
0
    {
564
0
        return GEOSConcaveHull_r(handle, g, ratio, allowHoles);
565
0
    }
566
567
    Geometry*
568
    GEOSConcaveHullByLength(const Geometry* g,
569
                    double length,
570
                    unsigned int allowHoles)
571
572
0
    {
573
0
        return GEOSConcaveHullByLength_r(handle, g, length, allowHoles);
574
0
    }
575
576
    Geometry*
577
    GEOSPolygonHullSimplify(const Geometry* g,
578
                            unsigned int isOuter,
579
                            double vertexNumFraction)
580
0
    {
581
0
        return GEOSPolygonHullSimplify_r(handle, g, isOuter, vertexNumFraction);
582
0
    }
583
584
    Geometry*
585
    GEOSPolygonHullSimplifyMode(const Geometry* g,
586
                            unsigned int isOuter,
587
                            unsigned int parameterMode,
588
                            double parameter)
589
0
    {
590
0
        return GEOSPolygonHullSimplifyMode_r(handle, g, isOuter, parameterMode, parameter);
591
0
    }
592
593
    Geometry*
594
    GEOSConcaveHullOfPolygons(const Geometry* g,
595
        double lengthRatio,
596
        unsigned int isTight,
597
        unsigned int isHolesAllowed)
598
0
    {
599
0
        return GEOSConcaveHullOfPolygons_r(handle,
600
0
            g, lengthRatio, isTight, isHolesAllowed);
601
0
    }
602
603
    Geometry*
604
    GEOSMinimumRotatedRectangle(const Geometry* g)
605
0
    {
606
0
        return GEOSMinimumRotatedRectangle_r(handle, g);
607
0
    }
608
609
    Geometry*
610
    GEOSMaximumInscribedCircle(const Geometry* g, double tolerance)
611
0
    {
612
0
        return GEOSMaximumInscribedCircle_r(handle, g, tolerance);
613
0
    }
614
615
    Geometry*
616
    GEOSLargestEmptyCircle(const Geometry* g, const Geometry* boundary, double tolerance)
617
0
    {
618
0
        return GEOSLargestEmptyCircle_r(handle, g, boundary, tolerance);
619
0
    }
620
621
    Geometry*
622
    GEOSMinimumWidth(const Geometry* g)
623
0
    {
624
0
        return GEOSMinimumWidth_r(handle, g);
625
0
    }
626
627
    Geometry*
628
    GEOSMinimumClearanceLine(const Geometry* g)
629
0
    {
630
0
        return GEOSMinimumClearanceLine_r(handle, g);
631
0
    }
632
633
    int
634
    GEOSMinimumClearance(const Geometry* g, double* d)
635
0
    {
636
0
        return GEOSMinimumClearance_r(handle, g, d);
637
0
    }
638
639
    Geometry*
640
    GEOSDifference(const Geometry* g1, const Geometry* g2)
641
7.70k
    {
642
7.70k
        return GEOSDifference_r(handle, g1, g2);
643
7.70k
    }
644
645
    Geometry*
646
    GEOSDifferencePrec(const Geometry* g1, const Geometry* g2, double gridSize)
647
0
    {
648
0
        return GEOSDifferencePrec_r(handle, g1, g2, gridSize);
649
0
    }
650
651
    Geometry*
652
    GEOSBoundary(const Geometry* g)
653
0
    {
654
0
        return GEOSBoundary_r(handle, g);
655
0
    }
656
657
    Geometry*
658
    GEOSSymDifference(const Geometry* g1, const Geometry* g2)
659
0
    {
660
0
        return GEOSSymDifference_r(handle, g1, g2);
661
0
    }
662
663
    Geometry*
664
    GEOSSymDifferencePrec(const Geometry* g1, const Geometry* g2, double gridSize)
665
0
    {
666
0
        return GEOSSymDifferencePrec_r(handle, g1, g2, gridSize);
667
0
    }
668
669
    Geometry*
670
    GEOSUnion(const Geometry* g1, const Geometry* g2)
671
7.70k
    {
672
7.70k
        return GEOSUnion_r(handle, g1, g2);
673
7.70k
    }
674
675
    Geometry*
676
    GEOSUnionPrec(const Geometry* g1, const Geometry* g2, double gridSize)
677
0
    {
678
0
        return GEOSUnionPrec_r(handle, g1, g2, gridSize);
679
0
    }
680
681
    Geometry*
682
    GEOSUnaryUnion(const Geometry* g)
683
0
    {
684
0
        return GEOSUnaryUnion_r(handle, g);
685
0
    }
686
687
    Geometry*
688
    GEOSUnaryUnionPrec(const Geometry* g, double gridSize)
689
0
    {
690
0
        return GEOSUnaryUnionPrec_r(handle, g, gridSize);
691
0
    }
692
693
    Geometry*
694
    GEOSCoverageUnion(const Geometry* g)
695
0
    {
696
0
        return GEOSCoverageUnion_r(handle, g);
697
0
    }
698
699
    Geometry*
700
    GEOSDisjointSubsetUnion(const Geometry* g)
701
0
    {
702
0
        return GEOSDisjointSubsetUnion_r(handle, g);
703
0
    }
704
705
    Geometry*
706
    GEOSNode(const Geometry* g)
707
0
    {
708
0
        return GEOSNode_r(handle, g);
709
0
    }
710
711
    Geometry*
712
    GEOSUnionCascaded(const Geometry* g)
713
0
    {
714
0
        return GEOSUnionCascaded_r(handle, g);
715
0
    }
716
717
    Geometry*
718
    GEOSPointOnSurface(const Geometry* g)
719
0
    {
720
0
        return GEOSPointOnSurface_r(handle, g);
721
0
    }
722
723
724
    Geometry*
725
    GEOSClipByRect(const Geometry* g, double xmin, double ymin, double xmax, double ymax)
726
0
    {
727
0
        return GEOSClipByRect_r(handle, g, xmin, ymin, xmax, ymax);
728
0
    }
729
730
    Geometry*
731
    GEOSSubdivideByGrid(const Geometry* g, double xmin, double ymin, double xmax, double ymax,
732
                        unsigned nx, unsigned ny, int include_exterior)
733
0
    {
734
0
        return GEOSSubdivideByGrid_r(handle, g, xmin, ymin, xmax, ymax, nx, ny, include_exterior);
735
0
    }
736
737
    int
738
    GEOSGridIntersectionFractions(const Geometry* g, double xmin, double ymin, double xmax, double ymax,
739
                                  unsigned nx, unsigned ny, float* buf)
740
0
    {
741
0
        return GEOSGridIntersectionFractions_r(handle, g, xmin, ymin, xmax, ymax, nx, ny, buf);
742
0
    }
743
744
    Geometry*
745
0
    GEOSGeom_transformXY(const GEOSGeometry* g, GEOSTransformXYCallback callback, void* userdata) {
746
0
        return GEOSGeom_transformXY_r(handle, g, callback, userdata);
747
0
    }
748
749
750
    Geometry*
751
0
    GEOSGeom_transformXYZ(const GEOSGeometry* g, GEOSTransformXYZCallback callback, void* userdata) {
752
0
        return GEOSGeom_transformXYZ_r(handle, g, callback, userdata);
753
0
    }
754
755
756
//-------------------------------------------------------------------
757
// memory management functions
758
//------------------------------------------------------------------
759
760
761
    void
762
    GEOSGeom_destroy(Geometry* a)
763
39.1k
    {
764
39.1k
        return GEOSGeom_destroy_r(handle, a);
765
39.1k
    }
766
767
768
    int
769
    GEOSGetNumCoordinates(const Geometry* g)
770
0
    {
771
0
        return GEOSGetNumCoordinates_r(handle, g);
772
0
    }
773
774
    /*
775
     * Return -1 on exception, 0 otherwise.
776
     * Converts Geometry to normal form (or canonical form).
777
     */
778
    int
779
    GEOSNormalize(Geometry* g)
780
0
    {
781
0
        return GEOSNormalize_r(handle, g);
782
0
    }
783
784
    int
785
    GEOSOrientPolygons(Geometry* g, int exteriorCW)
786
0
    {
787
0
        return GEOSOrientPolygons_r(handle, g, exteriorCW);
788
0
    }
789
790
    int
791
    GEOSGetNumInteriorRings(const Geometry* g)
792
0
    {
793
0
        return GEOSGetNumInteriorRings_r(handle, g);
794
0
    }
795
796
797
// returns -1 on error and 1 for non-multi geometries
798
    int
799
    GEOSGetNumGeometries(const Geometry* g)
800
0
    {
801
0
        return GEOSGetNumGeometries_r(handle, g);
802
0
    }
803
804
805
    /*
806
     * Call only on GEOMETRYCOLLECTION or MULTI*.
807
     * Return a pointer to the internal Geometry.
808
     */
809
    const Geometry*
810
    GEOSGetGeometryN(const Geometry* g, int n)
811
0
    {
812
0
        return GEOSGetGeometryN_r(handle, g, n);
813
0
    }
814
815
    /*
816
     * Call only on LINESTRING
817
     * Returns NULL on exception
818
     */
819
    Geometry*
820
    GEOSGeomGetPointN(const Geometry* g, int n)
821
0
    {
822
0
        return GEOSGeomGetPointN_r(handle, g, n);
823
0
    }
824
825
    /*
826
     * Call only on LINESTRING
827
     */
828
    Geometry*
829
    GEOSGeomGetStartPoint(const Geometry* g)
830
0
    {
831
0
        return GEOSGeomGetStartPoint_r(handle, g);
832
0
    }
833
834
    /*
835
     * Call only on LINESTRING
836
     */
837
    Geometry*
838
    GEOSGeomGetEndPoint(const Geometry* g)
839
0
    {
840
0
        return GEOSGeomGetEndPoint_r(handle, g);
841
0
    }
842
843
    /*
844
     * Call only on LINESTRING
845
     * return 2 on exception, 1 on true, 0 on false
846
     */
847
    char
848
    GEOSisClosed(const Geometry* g)
849
0
    {
850
0
        return GEOSisClosed_r(handle, g);
851
0
    }
852
853
    /*
854
     * Call only on LINESTRING
855
     * returns 0 on exception, otherwise 1
856
     */
857
    int
858
    GEOSGeomGetLength(const Geometry* g, double* length)
859
0
    {
860
0
        return GEOSGeomGetLength_r(handle, g, length);
861
0
    }
862
863
    /*
864
     * Call only on LINESTRING
865
     * returns -1 on exception
866
     */
867
    int
868
    GEOSGeomGetNumPoints(const Geometry* g)
869
0
    {
870
0
        return GEOSGeomGetNumPoints_r(handle, g);
871
0
    }
872
873
    /*
874
     * For POINT
875
     * returns 0 on exception, otherwise 1
876
     */
877
    int
878
    GEOSGeomGetX(const Geometry* g, double* x)
879
0
    {
880
0
        return GEOSGeomGetX_r(handle, g, x);
881
0
    }
882
883
    /*
884
     * For POINT
885
     * returns 0 on exception, otherwise 1
886
     */
887
    int
888
    GEOSGeomGetY(const Geometry* g, double* y)
889
0
    {
890
0
        return GEOSGeomGetY_r(handle, g, y);
891
0
    }
892
893
    /*
894
     * For POINT
895
     * returns 0 on exception, otherwise 1
896
     */
897
    int
898
    GEOSGeomGetZ(const Geometry* g1, double* z)
899
0
    {
900
0
        return GEOSGeomGetZ_r(handle, g1, z);
901
0
    }
902
903
    /*
904
     * For POINT
905
     * returns 0 on exception, otherwise 1
906
     */
907
    int
908
    GEOSGeomGetM(const Geometry* g1, double* m)
909
0
    {
910
0
        return GEOSGeomGetM_r(handle, g1, m);
911
0
    }
912
913
    /*
914
     * Call only on polygon
915
     * Return a copy of the internal Geometry.
916
     */
917
    const Geometry*
918
    GEOSGetExteriorRing(const Geometry* g)
919
0
    {
920
0
        return GEOSGetExteriorRing_r(handle, g);
921
0
    }
922
923
    /*
924
     * Call only on polygon
925
     * Return a pointer to internal storage, do not destroy it.
926
     */
927
    const Geometry*
928
    GEOSGetInteriorRingN(const Geometry* g, int n)
929
0
    {
930
0
        return GEOSGetInteriorRingN_r(handle, g, n);
931
0
    }
932
933
    Geometry*
934
    GEOSGetCentroid(const Geometry* g)
935
0
    {
936
0
        return GEOSGetCentroid_r(handle, g);
937
0
    }
938
939
    int
940
    GEOSHilbertCode(const GEOSGeometry *geom, const GEOSGeometry* extent,
941
                unsigned int level, unsigned int *code)
942
0
    {
943
0
        return GEOSHilbertCode_r(handle, geom, extent, level, code);
944
0
    }
945
946
    Geometry*
947
    GEOSMinimumBoundingCircle(const Geometry* g, double* radius, Geometry** center)
948
0
    {
949
0
        return GEOSMinimumBoundingCircle_r(handle, g, radius, center);
950
0
    }
951
952
    Geometry*
953
    GEOSGeom_createCollection(int type, Geometry** geoms, unsigned int ngeoms)
954
0
    {
955
0
        return GEOSGeom_createCollection_r(handle, type, geoms, ngeoms);
956
0
    }
957
958
    Geometry**
959
    GEOSGeom_releaseCollection(Geometry* collection, unsigned int * ngeoms)
960
0
    {
961
0
        return GEOSGeom_releaseCollection_r(handle, collection, ngeoms);
962
0
    }
963
964
    Geometry*
965
    GEOSPolygonize(const Geometry* const* g, unsigned int ngeoms)
966
0
    {
967
0
        return GEOSPolygonize_r(handle, g, ngeoms);
968
0
    }
969
970
    Geometry*
971
    GEOSPolygonize_valid(const Geometry* const* g, unsigned int ngeoms)
972
0
    {
973
0
        return GEOSPolygonize_valid_r(handle, g, ngeoms);
974
0
    }
975
976
    Geometry*
977
    GEOSPolygonizer_getCutEdges(const Geometry* const* g, unsigned int ngeoms)
978
0
    {
979
0
        return GEOSPolygonizer_getCutEdges_r(handle, g, ngeoms);
980
0
    }
981
982
    GEOSGeometry*
983
    GEOSPolygonize_full(const GEOSGeometry* input,
984
                        GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalid)
985
0
    {
986
0
        return GEOSPolygonize_full_r(handle, input, cuts, dangles, invalid);
987
0
    }
988
989
    Geometry*
990
    GEOSBuildArea(const Geometry* g)
991
0
    {
992
0
        return GEOSBuildArea_r(handle, g);
993
0
    }
994
995
    Geometry*
996
    GEOSMakeValid(const Geometry* g)
997
0
    {
998
0
        return GEOSMakeValid_r(handle, g);
999
0
    }
1000
1001
    GEOSMakeValidParams*
1002
    GEOSMakeValidParams_create()
1003
0
    {
1004
0
        return GEOSMakeValidParams_create_r(handle);
1005
0
    }
1006
1007
    void
1008
    GEOSMakeValidParams_destroy(GEOSMakeValidParams* parms)
1009
0
    {
1010
0
        return GEOSMakeValidParams_destroy_r(handle, parms);
1011
0
    }
1012
1013
    int
1014
    GEOSMakeValidParams_setMethod(
1015
        GEOSMakeValidParams* p,
1016
        GEOSMakeValidMethods method)
1017
0
    {
1018
0
        return GEOSMakeValidParams_setMethod_r(handle, p, method);
1019
0
    }
1020
1021
    int
1022
    GEOSMakeValidParams_setKeepCollapsed(
1023
        GEOSMakeValidParams* p,
1024
        int keepCollapsed)
1025
0
    {
1026
0
        return GEOSMakeValidParams_setKeepCollapsed_r(handle, p, keepCollapsed);
1027
0
    }
1028
1029
    Geometry*
1030
    GEOSMakeValidWithParams(
1031
        const Geometry* g,
1032
        const GEOSMakeValidParams* params)
1033
0
    {
1034
0
        return GEOSMakeValidWithParams_r(handle, g, params);
1035
0
    }
1036
1037
    GEOSCoverageCleanParams*
1038
    GEOSCoverageCleanParams_create()
1039
0
    {
1040
0
        return GEOSCoverageCleanParams_create_r(handle);
1041
0
    }
1042
1043
    void
1044
    GEOSCoverageCleanParams_destroy(
1045
        GEOSCoverageCleanParams* params)
1046
0
    {
1047
0
        return GEOSCoverageCleanParams_destroy_r(handle, params);
1048
0
    }
1049
1050
    int
1051
    GEOSCoverageCleanParams_setSnappingDistance(
1052
        GEOSCoverageCleanParams* params, double snappingDistance)
1053
0
    {
1054
0
        return GEOSCoverageCleanParams_setSnappingDistance_r(
1055
0
            handle, params, snappingDistance);
1056
0
    }
1057
1058
    int
1059
    GEOSCoverageCleanParams_setGapMaximumWidth(
1060
        GEOSCoverageCleanParams* params, double gapMaximumWidth)
1061
0
    {
1062
0
        return GEOSCoverageCleanParams_setGapMaximumWidth_r(
1063
0
            handle, params, gapMaximumWidth);
1064
0
    }
1065
1066
    int
1067
    GEOSCoverageCleanParams_setOverlapMergeStrategy(
1068
        GEOSCoverageCleanParams* params, int overlapMergeStrategy)
1069
0
    {
1070
0
        return GEOSCoverageCleanParams_setOverlapMergeStrategy_r(
1071
0
            handle, params, overlapMergeStrategy);
1072
0
    }
1073
1074
    GEOSGeometry *
1075
    GEOSCoverageCleanWithParams(
1076
        const GEOSGeometry* input,
1077
        const GEOSCoverageCleanParams* params)
1078
0
    {
1079
0
        return GEOSCoverageCleanWithParams_r(
1080
0
            handle, input, params);
1081
0
    }
1082
1083
    GEOSGeometry *
1084
    GEOSCoverageClean(
1085
        const GEOSGeometry * input)
1086
0
    {
1087
0
        return GEOSCoverageClean_r(
1088
0
            handle, input);
1089
0
    }
1090
1091
    Geometry*
1092
    GEOSRemoveRepeatedPoints(
1093
        const Geometry* g,
1094
        double tolerance)
1095
0
    {
1096
0
        return GEOSRemoveRepeatedPoints_r(handle, g, tolerance);
1097
0
    }
1098
1099
    Geometry*
1100
    GEOSLineMerge(const Geometry* g)
1101
0
    {
1102
0
        return GEOSLineMerge_r(handle, g);
1103
0
    }
1104
1105
    Geometry*
1106
    GEOSLineMergeDirected(const Geometry* g)
1107
0
    {
1108
0
        return GEOSLineMergeDirected_r(handle, g);
1109
0
    }
1110
1111
    Geometry*
1112
    GEOSLineSubstring(const Geometry* g, double start_fraction, double end_fraction)
1113
0
    {
1114
0
        return GEOSLineSubstring_r(handle, g, start_fraction, end_fraction);
1115
0
    }
1116
1117
    Geometry*
1118
    GEOSReverse(const Geometry* g)
1119
0
    {
1120
0
        return GEOSReverse_r(handle, g);
1121
0
    }
1122
1123
    int
1124
    GEOSGetSRID(const Geometry* g)
1125
0
    {
1126
0
        return GEOSGetSRID_r(handle, g);
1127
0
    }
1128
1129
    void
1130
    GEOSSetSRID(Geometry* g, int srid)
1131
0
    {
1132
0
        return GEOSSetSRID_r(handle, g, srid);
1133
0
    }
1134
1135
    void*
1136
    GEOSGeom_getUserData(const Geometry* g)
1137
0
    {
1138
0
        return GEOSGeom_getUserData_r(handle, g);
1139
0
    }
1140
1141
    void
1142
    GEOSGeom_setUserData(Geometry* g, void* userData)
1143
0
    {
1144
0
        return GEOSGeom_setUserData_r(handle, g, userData);
1145
0
    }
1146
1147
    char
1148
    GEOSHasZ(const Geometry* g)
1149
0
    {
1150
0
        return GEOSHasZ_r(handle, g);
1151
0
    }
1152
1153
    char
1154
    GEOSHasM(const Geometry* g)
1155
0
    {
1156
0
        return GEOSHasM_r(handle, g);
1157
0
    }
1158
1159
    int
1160
    GEOS_getWKBOutputDims()
1161
0
    {
1162
0
        return GEOS_getWKBOutputDims_r(handle);
1163
0
    }
1164
1165
    int
1166
    GEOS_setWKBOutputDims(int newdims)
1167
0
    {
1168
0
        return GEOS_setWKBOutputDims_r(handle, newdims);
1169
0
    }
1170
1171
    int
1172
    GEOS_getWKBByteOrder()
1173
0
    {
1174
0
        return GEOS_getWKBByteOrder_r(handle);
1175
0
    }
1176
1177
    int
1178
    GEOS_setWKBByteOrder(int byteOrder)
1179
0
    {
1180
0
        return GEOS_setWKBByteOrder_r(handle, byteOrder);
1181
0
    }
1182
1183
    CoordinateSequence*
1184
    GEOSCoordSeq_create(unsigned int size, unsigned int dims)
1185
0
    {
1186
0
        return GEOSCoordSeq_create_r(handle, size, dims);
1187
0
    }
1188
1189
    CoordinateSequence*
1190
    GEOSCoordSeq_createWithDimensions(unsigned int size, int hasZ, int hasM)
1191
0
    {
1192
0
        return GEOSCoordSeq_createWithDimensions_r(handle, size, hasZ, hasM);
1193
0
    }
1194
1195
    CoordinateSequence*
1196
    GEOSCoordSeq_copyFromBuffer(const double* buf, unsigned int size, int hasZ, int hasM)
1197
0
    {
1198
0
        return GEOSCoordSeq_copyFromBuffer_r(handle, buf, size, hasZ, hasM);
1199
0
    }
1200
1201
    int
1202
    GEOSCoordSeq_copyToBuffer(const CoordinateSequence* s, double* buf, int hasZ, int hasM)
1203
0
    {
1204
0
        return GEOSCoordSeq_copyToBuffer_r(handle, s, buf, hasZ, hasM);
1205
0
    }
1206
1207
    CoordinateSequence*
1208
    GEOSCoordSeq_copyFromArrays(const double* x, const double* y, const double* z, const double* m, unsigned int size)
1209
0
    {
1210
0
        return GEOSCoordSeq_copyFromArrays_r(handle, x, y, z, m, size);
1211
0
    }
1212
1213
    int
1214
    GEOSCoordSeq_copyToArrays(const CoordinateSequence* s, double* x, double* y, double* z, double* m)
1215
0
    {
1216
0
        return GEOSCoordSeq_copyToArrays_r(handle, s, x, y, z, m);
1217
0
    }
1218
1219
    char
1220
    GEOSCoordSeq_hasZ(CoordinateSequence* s)
1221
0
    {
1222
0
        return GEOSCoordSeq_hasZ_r(handle, s);
1223
0
    }
1224
1225
    char
1226
    GEOSCoordSeq_hasM(CoordinateSequence* s)
1227
0
    {
1228
0
        return GEOSCoordSeq_hasM_r(handle, s);
1229
0
    }
1230
1231
    int
1232
    GEOSCoordSeq_setOrdinate(CoordinateSequence* s, unsigned int idx, unsigned int dim, double val)
1233
0
    {
1234
0
        return GEOSCoordSeq_setOrdinate_r(handle, s, idx, dim, val);
1235
0
    }
1236
1237
    int
1238
    GEOSCoordSeq_setX(CoordinateSequence* s, unsigned int idx, double val)
1239
0
    {
1240
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::X, val);
1241
0
    }
1242
1243
    int
1244
    GEOSCoordSeq_setY(CoordinateSequence* s, unsigned int idx, double val)
1245
0
    {
1246
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::Y, val);
1247
0
    }
1248
1249
    int
1250
    GEOSCoordSeq_setZ(CoordinateSequence* s, unsigned int idx, double val)
1251
0
    {
1252
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::Z, val);
1253
0
    }
1254
1255
    int
1256
    GEOSCoordSeq_setM(CoordinateSequence* s, unsigned int idx, double val)
1257
0
    {
1258
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::M, val);
1259
0
    }
1260
1261
    int
1262
    GEOSCoordSeq_setXY(CoordinateSequence* s, unsigned int idx, double x, double y)
1263
0
    {
1264
0
        return GEOSCoordSeq_setXY_r(handle, s, idx, x, y);
1265
0
    }
1266
1267
    int
1268
    GEOSCoordSeq_setXYZ(CoordinateSequence* s, unsigned int idx, double x, double y, double z)
1269
0
    {
1270
0
        return GEOSCoordSeq_setXYZ_r(handle, s, idx, x, y, z);
1271
0
    }
1272
1273
    CoordinateSequence*
1274
    GEOSCoordSeq_clone(const CoordinateSequence* s)
1275
0
    {
1276
0
        return GEOSCoordSeq_clone_r(handle, s);
1277
0
    }
1278
1279
    int
1280
    GEOSCoordSeq_getOrdinate(const CoordinateSequence* s, unsigned int idx, unsigned int dim, double* val)
1281
0
    {
1282
0
        return GEOSCoordSeq_getOrdinate_r(handle, s, idx, dim, val);
1283
0
    }
1284
1285
    int
1286
    GEOSCoordSeq_getX(const CoordinateSequence* s, unsigned int idx, double* val)
1287
0
    {
1288
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::X, val);
1289
0
    }
1290
1291
    int
1292
    GEOSCoordSeq_getY(const CoordinateSequence* s, unsigned int idx, double* val)
1293
0
    {
1294
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::Y, val);
1295
0
    }
1296
1297
    int
1298
    GEOSCoordSeq_getZ(const CoordinateSequence* s, unsigned int idx, double* val)
1299
0
    {
1300
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::Z, val);
1301
0
    }
1302
1303
    int
1304
    GEOSCoordSeq_getM(const CoordinateSequence* s, unsigned int idx, double* val)
1305
0
    {
1306
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::M, val);
1307
0
    }
1308
1309
    int
1310
    GEOSCoordSeq_getXY(const CoordinateSequence* s, unsigned int idx, double* x, double* y)
1311
0
    {
1312
0
        return GEOSCoordSeq_getXY_r(handle, s, idx, x, y);
1313
0
    }
1314
1315
    int
1316
    GEOSCoordSeq_getXYZ(const CoordinateSequence* s, unsigned int idx, double* x, double* y, double* z)
1317
0
    {
1318
0
        return GEOSCoordSeq_getXYZ_r(handle, s, idx, x, y, z);
1319
0
    }
1320
1321
    int
1322
    GEOSCoordSeq_getSize(const CoordinateSequence* s, unsigned int* size)
1323
0
    {
1324
0
        return GEOSCoordSeq_getSize_r(handle, s, size);
1325
0
    }
1326
1327
    int
1328
    GEOSCoordSeq_getDimensions(const CoordinateSequence* s, unsigned int* dims)
1329
0
    {
1330
0
        return GEOSCoordSeq_getDimensions_r(handle, s, dims);
1331
0
    }
1332
1333
    int
1334
    GEOSCoordSeq_isCCW(const CoordinateSequence* s, char* is_ccw)
1335
0
    {
1336
0
        return GEOSCoordSeq_isCCW_r(handle, s, is_ccw);
1337
0
    }
1338
1339
    void
1340
    GEOSCoordSeq_destroy(CoordinateSequence* s)
1341
0
    {
1342
0
        return GEOSCoordSeq_destroy_r(handle, s);
1343
0
    }
1344
1345
    const CoordinateSequence*
1346
    GEOSGeom_getCoordSeq(const Geometry* g)
1347
0
    {
1348
0
        return GEOSGeom_getCoordSeq_r(handle, g);
1349
0
    }
1350
1351
    Geometry*
1352
    GEOSGeom_createPoint(CoordinateSequence* cs)
1353
0
    {
1354
0
        return GEOSGeom_createPoint_r(handle, cs);
1355
0
    }
1356
1357
    Geometry*
1358
    GEOSGeom_createPointFromXY(double x, double y)
1359
0
    {
1360
0
        return GEOSGeom_createPointFromXY_r(handle, x, y);
1361
0
    }
1362
1363
    Geometry*
1364
    GEOSGeom_createLinearRing(CoordinateSequence* cs)
1365
0
    {
1366
0
        return GEOSGeom_createLinearRing_r(handle, cs);
1367
0
    }
1368
1369
    Geometry*
1370
    GEOSGeom_createLineString(CoordinateSequence* cs)
1371
0
    {
1372
0
        return GEOSGeom_createLineString_r(handle, cs);
1373
0
    }
1374
1375
    Geometry*
1376
    GEOSGeom_createPolygon(Geometry* shell, Geometry** holes, unsigned int nholes)
1377
0
    {
1378
0
        return GEOSGeom_createPolygon_r(handle, shell, holes, nholes);
1379
0
    }
1380
1381
    Geometry*
1382
    GEOSGeom_createCircularString(CoordinateSequence* cs)
1383
0
    {
1384
0
        return GEOSGeom_createCircularString_r(handle, cs);
1385
0
    }
1386
1387
    Geometry*
1388
    GEOSGeom_createCompoundCurve(Geometry** curves, unsigned int ngeoms)
1389
0
    {
1390
0
        return GEOSGeom_createCompoundCurve_r(handle, curves, ngeoms);
1391
0
    }
1392
1393
    Geometry*
1394
    GEOSGeom_createCurvePolygon(Geometry* shell, Geometry** holes, unsigned int nholes)
1395
0
    {
1396
0
        return GEOSGeom_createCurvePolygon_r(handle, shell, holes, nholes);
1397
0
    }
1398
1399
    Geometry*
1400
    GEOSGeom_clone(const Geometry* g)
1401
0
    {
1402
0
        return GEOSGeom_clone_r(handle, g);
1403
0
    }
1404
1405
    GEOSGeometry*
1406
    GEOSGeom_setPrecision(const GEOSGeometry* g, double gridSize, int flags)
1407
0
    {
1408
0
        return GEOSGeom_setPrecision_r(handle, g, gridSize, flags);
1409
0
    }
1410
1411
    double
1412
    GEOSGeom_getPrecision(const GEOSGeometry* g)
1413
0
    {
1414
0
        return GEOSGeom_getPrecision_r(handle, g);
1415
0
    }
1416
1417
    int
1418
    GEOSGeom_getDimensions(const Geometry* g)
1419
0
    {
1420
0
        return GEOSGeom_getDimensions_r(handle, g);
1421
0
    }
1422
1423
    int
1424
    GEOSGeom_getCoordinateDimension(const Geometry* g)
1425
0
    {
1426
0
        return GEOSGeom_getCoordinateDimension_r(handle, g);
1427
0
    }
1428
1429
    int GEOS_DLL GEOSGeom_getXMin(const GEOSGeometry* g, double* value)
1430
0
    {
1431
0
        return GEOSGeom_getXMin_r(handle, g, value);
1432
0
    }
1433
1434
    int GEOS_DLL GEOSGeom_getYMin(const GEOSGeometry* g, double* value)
1435
0
    {
1436
0
        return GEOSGeom_getYMin_r(handle, g, value);
1437
0
    }
1438
1439
    int GEOS_DLL GEOSGeom_getXMax(const GEOSGeometry* g, double* value)
1440
0
    {
1441
0
        return GEOSGeom_getXMax_r(handle, g, value);
1442
0
    }
1443
1444
    int GEOS_DLL GEOSGeom_getYMax(const GEOSGeometry* g, double* value)
1445
0
    {
1446
0
        return GEOSGeom_getYMax_r(handle, g, value);
1447
0
    }
1448
1449
    int GEOS_DLL GEOSGeom_getExtent(const GEOSGeometry* g, double* xmin, double* ymin, double* xmax, double* ymax)
1450
0
    {
1451
0
        return GEOSGeom_getExtent_r(handle, g, xmin, ymin, xmax, ymax);
1452
0
    }
1453
1454
    Geometry*
1455
    GEOSSimplify(const Geometry* g, double tolerance)
1456
0
    {
1457
0
        return GEOSSimplify_r(handle, g, tolerance);
1458
0
    }
1459
1460
    Geometry*
1461
    GEOSTopologyPreserveSimplify(const Geometry* g, double tolerance)
1462
0
    {
1463
0
        return GEOSTopologyPreserveSimplify_r(handle, g, tolerance);
1464
0
    }
1465
1466
1467
    /* WKT Reader */
1468
    WKTReader*
1469
    GEOSWKTReader_create()
1470
0
    {
1471
0
        return GEOSWKTReader_create_r(handle);
1472
0
    }
1473
1474
    void
1475
    GEOSWKTReader_destroy(WKTReader* reader)
1476
0
    {
1477
0
        GEOSWKTReader_destroy_r(handle, reader);
1478
0
    }
1479
1480
    void
1481
    GEOSWKTReader_setFixStructure(WKTReader* reader, char doFix)
1482
0
    {
1483
0
        GEOSWKTReader_setFixStructure_r(handle, reader, doFix);
1484
0
    }
1485
1486
    Geometry*
1487
    GEOSWKTReader_read(WKTReader* reader, const char* wkt)
1488
0
    {
1489
0
        return GEOSWKTReader_read_r(handle, reader, wkt);
1490
0
    }
1491
1492
    /* WKT Writer */
1493
    WKTWriter*
1494
    GEOSWKTWriter_create()
1495
0
    {
1496
0
        return GEOSWKTWriter_create_r(handle);
1497
0
    }
1498
1499
    void
1500
    GEOSWKTWriter_destroy(WKTWriter* Writer)
1501
0
    {
1502
0
        GEOSWKTWriter_destroy_r(handle, Writer);
1503
0
    }
1504
1505
    char*
1506
    GEOSWKTWriter_write(WKTWriter* writer, const Geometry* geom)
1507
0
    {
1508
0
        return GEOSWKTWriter_write_r(handle, writer, geom);
1509
0
    }
1510
1511
    void
1512
    GEOSWKTWriter_setTrim(WKTWriter* writer, char trim)
1513
0
    {
1514
0
        GEOSWKTWriter_setTrim_r(handle, writer, trim);
1515
0
    }
1516
1517
    void
1518
    GEOSWKTWriter_setRoundingPrecision(WKTWriter* writer, int precision)
1519
0
    {
1520
0
        return GEOSWKTWriter_setRoundingPrecision_r(handle, writer, precision);
1521
0
    }
1522
1523
    void
1524
    GEOSWKTWriter_setOutputDimension(WKTWriter* writer, int dim)
1525
0
    {
1526
0
        GEOSWKTWriter_setOutputDimension_r(handle, writer, dim);
1527
0
    }
1528
1529
    int
1530
    GEOSWKTWriter_getOutputDimension(WKTWriter* writer)
1531
0
    {
1532
0
        return GEOSWKTWriter_getOutputDimension_r(handle, writer);
1533
0
    }
1534
1535
    void
1536
    GEOSWKTWriter_setOld3D(WKTWriter* writer, int useOld3D)
1537
0
    {
1538
0
        GEOSWKTWriter_setOld3D_r(handle, writer, useOld3D);
1539
0
    }
1540
1541
    /* WKB Reader */
1542
    WKBReader*
1543
    GEOSWKBReader_create()
1544
0
    {
1545
0
        return GEOSWKBReader_create_r(handle);
1546
0
    }
1547
1548
    void
1549
    GEOSWKBReader_destroy(WKBReader* reader)
1550
0
    {
1551
0
        GEOSWKBReader_destroy_r(handle, reader);
1552
0
    }
1553
1554
    void
1555
    GEOSWKBReader_setFixStructure(WKBReader* reader, char doFix)
1556
0
    {
1557
0
        GEOSWKBReader_setFixStructure_r(handle, reader, doFix);
1558
0
    }
1559
1560
    Geometry*
1561
    GEOSWKBReader_read(WKBReader* reader, const unsigned char* wkb, std::size_t size)
1562
0
    {
1563
0
        return GEOSWKBReader_read_r(handle, reader, wkb, size);
1564
0
    }
1565
1566
    Geometry*
1567
    GEOSWKBReader_readHEX(WKBReader* reader, const unsigned char* hex, std::size_t size)
1568
0
    {
1569
0
        return GEOSWKBReader_readHEX_r(handle, reader, hex, size);
1570
0
    }
1571
1572
    /* WKB Writer */
1573
    WKBWriter*
1574
    GEOSWKBWriter_create()
1575
0
    {
1576
0
        return GEOSWKBWriter_create_r(handle);
1577
0
    }
1578
1579
    void
1580
    GEOSWKBWriter_destroy(WKBWriter* Writer)
1581
0
    {
1582
0
        GEOSWKBWriter_destroy_r(handle, Writer);
1583
0
    }
1584
1585
1586
    /* The caller owns the result */
1587
    unsigned char*
1588
    GEOSWKBWriter_write(WKBWriter* writer, const Geometry* geom, std::size_t* size)
1589
0
    {
1590
0
        return GEOSWKBWriter_write_r(handle, writer, geom, size);
1591
0
    }
1592
1593
    /* The caller owns the result */
1594
    unsigned char*
1595
    GEOSWKBWriter_writeHEX(WKBWriter* writer, const Geometry* geom, std::size_t* size)
1596
0
    {
1597
0
        return GEOSWKBWriter_writeHEX_r(handle, writer, geom, size);
1598
0
    }
1599
1600
    int
1601
    GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter* writer)
1602
0
    {
1603
0
        return GEOSWKBWriter_getOutputDimension_r(handle, writer);
1604
0
    }
1605
1606
    void
1607
    GEOSWKBWriter_setOutputDimension(GEOSWKBWriter* writer, int newDimension)
1608
0
    {
1609
0
        GEOSWKBWriter_setOutputDimension_r(handle, writer, newDimension);
1610
0
    }
1611
1612
    int
1613
    GEOSWKBWriter_getByteOrder(const GEOSWKBWriter* writer)
1614
0
    {
1615
0
        return GEOSWKBWriter_getByteOrder_r(handle, writer);
1616
0
    }
1617
1618
    void
1619
    GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer, int newByteOrder)
1620
0
    {
1621
0
        GEOSWKBWriter_setByteOrder_r(handle, writer, newByteOrder);
1622
0
    }
1623
1624
    int
1625
    GEOSWKBWriter_getFlavor(const GEOSWKBWriter* writer)
1626
0
    {
1627
0
        return GEOSWKBWriter_getFlavor_r(handle, writer);
1628
0
    }
1629
1630
    void
1631
    GEOSWKBWriter_setFlavor(GEOSWKBWriter* writer, int newFlavor)
1632
0
    {
1633
0
        GEOSWKBWriter_setFlavor_r(handle, writer, newFlavor);
1634
0
    }
1635
1636
    char
1637
    GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter* writer)
1638
0
    {
1639
0
        return GEOSWKBWriter_getIncludeSRID_r(handle, writer);
1640
0
    }
1641
1642
    void
1643
    GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer, const char newIncludeSRID)
1644
0
    {
1645
0
        GEOSWKBWriter_setIncludeSRID_r(handle, writer, newIncludeSRID);
1646
0
    }
1647
1648
    int
1649
0
    GEOS_printDouble(double d, unsigned int precision, char *result) {
1650
0
        return WKTWriter::writeTrimmedNumber(d, precision, result);
1651
0
    }
1652
1653
    /* GeoJSON Reader */
1654
    GeoJSONReader*
1655
    GEOSGeoJSONReader_create()
1656
0
    {
1657
0
        return GEOSGeoJSONReader_create_r(handle);
1658
0
    }
1659
1660
    void
1661
    GEOSGeoJSONReader_destroy(GeoJSONReader* reader)
1662
0
    {
1663
0
        GEOSGeoJSONReader_destroy_r(handle, reader);
1664
0
    }
1665
1666
    Geometry*
1667
    GEOSGeoJSONReader_readGeometry(GeoJSONReader* reader, const char* geojson)
1668
0
    {
1669
0
        return GEOSGeoJSONReader_readGeometry_r(handle, reader, geojson);
1670
0
    }
1671
1672
    /* GeoJSON Writer */
1673
    GeoJSONWriter*
1674
    GEOSGeoJSONWriter_create()
1675
0
    {
1676
0
        return GEOSGeoJSONWriter_create_r(handle);
1677
0
    }
1678
1679
    void
1680
    GEOSGeoJSONWriter_destroy(GEOSGeoJSONWriter* writer)
1681
0
    {
1682
0
        GEOSGeoJSONWriter_destroy_r(handle, writer);
1683
0
    }
1684
1685
    char*
1686
    GEOSGeoJSONWriter_writeGeometry(GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int indent)
1687
0
    {
1688
0
        return GEOSGeoJSONWriter_writeGeometry_r(handle, writer, g, indent);
1689
0
    }
1690
1691
    void
1692
    GEOSGeoJSONWriter_setOutputDimension(GeoJSONWriter* writer, int dim)
1693
0
    {
1694
0
        GEOSGeoJSONWriter_setOutputDimension_r(handle, writer, dim);
1695
0
    }
1696
1697
    int
1698
    GEOSGeoJSONWriter_getOutputDimension(GeoJSONWriter* writer)
1699
0
    {
1700
0
        return GEOSGeoJSONWriter_getOutputDimension_r(handle, writer);
1701
0
    }
1702
1703
1704
//-----------------------------------------------------------------
1705
// Prepared Geometry
1706
//-----------------------------------------------------------------
1707
1708
    const geos::geom::prep::PreparedGeometry*
1709
    GEOSPrepare(const Geometry* g)
1710
0
    {
1711
0
        return GEOSPrepare_r(handle, g);
1712
0
    }
1713
1714
    void
1715
    GEOSPreparedGeom_destroy(const geos::geom::prep::PreparedGeometry* a)
1716
0
    {
1717
0
        GEOSPreparedGeom_destroy_r(handle, a);
1718
0
    }
1719
1720
    char
1721
    GEOSPreparedContains(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1722
0
    {
1723
0
        return GEOSPreparedContains_r(handle, pg1, g2);
1724
0
    }
1725
1726
    char
1727
    GEOSPreparedContainsXY(const geos::geom::prep::PreparedGeometry* pg1, double x, double y)
1728
0
    {
1729
0
        return GEOSPreparedContainsXY_r(handle, pg1, x, y);
1730
0
    }
1731
1732
    char
1733
    GEOSPreparedContainsProperly(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1734
0
    {
1735
0
        return GEOSPreparedContainsProperly_r(handle, pg1, g2);
1736
0
    }
1737
1738
    char
1739
    GEOSPreparedCoveredBy(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1740
0
    {
1741
0
        return GEOSPreparedCoveredBy_r(handle, pg1, g2);
1742
0
    }
1743
1744
    char
1745
    GEOSPreparedCovers(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1746
0
    {
1747
0
        return GEOSPreparedCovers_r(handle, pg1, g2);
1748
0
    }
1749
1750
    char
1751
    GEOSPreparedCrosses(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1752
0
    {
1753
0
        return GEOSPreparedCrosses_r(handle, pg1, g2);
1754
0
    }
1755
1756
    char
1757
    GEOSPreparedDisjoint(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1758
0
    {
1759
0
        return GEOSPreparedDisjoint_r(handle, pg1, g2);
1760
0
    }
1761
1762
    char
1763
    GEOSPreparedIntersects(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1764
0
    {
1765
0
        return GEOSPreparedIntersects_r(handle, pg1, g2);
1766
0
    }
1767
1768
    char
1769
    GEOSPreparedIntersectsXY(const geos::geom::prep::PreparedGeometry* pg1, double x, double y)
1770
0
    {
1771
0
        return GEOSPreparedIntersectsXY_r(handle, pg1, x, y);
1772
0
    }
1773
1774
    char
1775
    GEOSPreparedOverlaps(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1776
0
    {
1777
0
        return GEOSPreparedOverlaps_r(handle, pg1, g2);
1778
0
    }
1779
1780
    char
1781
    GEOSPreparedTouches(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1782
0
    {
1783
0
        return GEOSPreparedTouches_r(handle, pg1, g2);
1784
0
    }
1785
1786
    char
1787
    GEOSPreparedWithin(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1788
0
    {
1789
0
        return GEOSPreparedWithin_r(handle, pg1, g2);
1790
0
    }
1791
1792
    char *
1793
    GEOSPreparedRelate(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1794
0
    {
1795
0
        return GEOSPreparedRelate_r(handle, pg1, g2);
1796
0
    }
1797
1798
    char
1799
    GEOSPreparedRelatePattern(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2, const char* imPattern)
1800
0
    {
1801
0
        return GEOSPreparedRelatePattern_r(handle, pg1, g2, imPattern);
1802
0
    }
1803
1804
    CoordinateSequence*
1805
    GEOSPreparedNearestPoints(const geos::geom::prep::PreparedGeometry* g1, const Geometry* g2)
1806
0
    {
1807
0
        return GEOSPreparedNearestPoints_r(handle, g1, g2);
1808
0
    }
1809
1810
    int
1811
    GEOSPreparedDistance(const geos::geom::prep::PreparedGeometry* g1, const Geometry* g2, double *dist)
1812
0
    {
1813
0
        return GEOSPreparedDistance_r(handle, g1, g2, dist);
1814
0
    }
1815
1816
    char
1817
    GEOSPreparedDistanceWithin(const geos::geom::prep::PreparedGeometry* g1, const Geometry* g2, double dist)
1818
0
    {
1819
0
        return GEOSPreparedDistanceWithin_r(handle, g1, g2, dist);
1820
0
    }
1821
1822
    GEOSSTRtree*
1823
    GEOSSTRtree_create(std::size_t nodeCapacity)
1824
0
    {
1825
0
        return GEOSSTRtree_create_r(handle, nodeCapacity);
1826
0
    }
1827
1828
    int
1829
    GEOSSTRtree_build(GEOSSTRtree* tree)
1830
0
    {
1831
0
        return GEOSSTRtree_build_r(handle, tree);
1832
0
    }
1833
1834
    void
1835
    GEOSSTRtree_insert(GEOSSTRtree* tree,
1836
                       const geos::geom::Geometry* g,
1837
                       void* item)
1838
0
    {
1839
0
        GEOSSTRtree_insert_r(handle, tree, g, item);
1840
0
    }
1841
1842
    void
1843
    GEOSSTRtree_query(GEOSSTRtree* tree,
1844
                      const geos::geom::Geometry* g,
1845
                      GEOSQueryCallback cb,
1846
                      void* userdata)
1847
0
    {
1848
0
        GEOSSTRtree_query_r(handle, tree, g, cb, userdata);
1849
0
    }
1850
1851
    const GEOSGeometry*
1852
    GEOSSTRtree_nearest(GEOSSTRtree* tree,
1853
                        const geos::geom::Geometry* g)
1854
0
    {
1855
0
        return GEOSSTRtree_nearest_r(handle, tree, g);
1856
0
    }
1857
1858
    const void* GEOSSTRtree_nearest_generic(GEOSSTRtree* tree,
1859
                                            const void* item,
1860
                                            const GEOSGeometry* itemEnvelope,
1861
                                            GEOSDistanceCallback distancefn,
1862
                                            void* userdata)
1863
0
    {
1864
0
        return GEOSSTRtree_nearest_generic_r(handle, tree, item, itemEnvelope, distancefn, userdata);
1865
0
    }
1866
1867
    void
1868
    GEOSSTRtree_iterate(GEOSSTRtree* tree,
1869
                        GEOSQueryCallback callback,
1870
                        void* userdata)
1871
0
    {
1872
0
        GEOSSTRtree_iterate_r(handle, tree, callback, userdata);
1873
0
    }
1874
1875
    char
1876
    GEOSSTRtree_remove(GEOSSTRtree* tree,
1877
                       const geos::geom::Geometry* g,
1878
                       void* item)
1879
0
    {
1880
0
        return GEOSSTRtree_remove_r(handle, tree, g, item);
1881
0
    }
1882
1883
    void
1884
    GEOSSTRtree_destroy(GEOSSTRtree* tree)
1885
0
    {
1886
0
        GEOSSTRtree_destroy_r(handle, tree);
1887
0
    }
1888
1889
    double
1890
    GEOSProject(const geos::geom::Geometry* g,
1891
                const geos::geom::Geometry* p)
1892
0
    {
1893
0
        return GEOSProject_r(handle, g, p);
1894
0
    }
1895
1896
    geos::geom::Geometry*
1897
    GEOSInterpolate(const geos::geom::Geometry* g,
1898
                    double d)
1899
0
    {
1900
0
        return GEOSInterpolate_r(handle, g, d);
1901
0
    }
1902
1903
    double
1904
    GEOSProjectNormalized(const geos::geom::Geometry* g,
1905
                          const geos::geom::Geometry* p)
1906
0
    {
1907
0
        return GEOSProjectNormalized_r(handle, g, p);
1908
0
    }
1909
1910
    geos::geom::Geometry*
1911
    GEOSInterpolateNormalized(const geos::geom::Geometry* g,
1912
                              double d)
1913
0
    {
1914
0
        return GEOSInterpolateNormalized_r(handle, g, d);
1915
0
    }
1916
1917
    geos::geom::Geometry*
1918
    GEOSGeom_extractUniquePoints(const geos::geom::Geometry* g)
1919
0
    {
1920
0
        return GEOSGeom_extractUniquePoints_r(handle, g);
1921
0
    }
1922
1923
    geos::geom::Geometry*
1924
    GEOSGeom_createEmptyCollection(int type)
1925
0
    {
1926
0
        return GEOSGeom_createEmptyCollection_r(handle, type);
1927
0
    }
1928
1929
    geos::geom::Geometry*
1930
    GEOSGeom_createEmptyPoint()
1931
0
    {
1932
0
        return GEOSGeom_createEmptyPoint_r(handle);
1933
0
    }
1934
1935
    geos::geom::Geometry*
1936
    GEOSGeom_createEmptyLineString()
1937
0
    {
1938
0
        return GEOSGeom_createEmptyLineString_r(handle);
1939
0
    }
1940
1941
    geos::geom::Geometry*
1942
    GEOSGeom_createEmptyPolygon()
1943
0
    {
1944
0
        return GEOSGeom_createEmptyPolygon_r(handle);
1945
0
    }
1946
1947
    geos::geom::Geometry*
1948
    GEOSGeom_createEmptyCircularString()
1949
0
    {
1950
0
        return GEOSGeom_createEmptyCircularString_r(handle);
1951
0
    }
1952
1953
    geos::geom::Geometry*
1954
    GEOSGeom_createEmptyCompoundCurve()
1955
0
    {
1956
0
        return GEOSGeom_createEmptyCompoundCurve_r(handle);
1957
0
    }
1958
1959
    geos::geom::Geometry*
1960
    GEOSGeom_createEmptyCurvePolygon()
1961
0
    {
1962
0
        return GEOSGeom_createEmptyCurvePolygon_r(handle);
1963
0
    }
1964
1965
    geos::geom::Geometry*
1966
    GEOSGeom_createRectangle(double xmin, double ymin, double xmax,
1967
                            double ymax)
1968
0
    {
1969
0
        return GEOSGeom_createRectangle_r(handle, xmin, ymin, xmax, ymax);
1970
0
    }
1971
1972
    int
1973
    GEOSOrientationIndex(double Ax, double Ay, double Bx, double By,
1974
                         double Px, double Py)
1975
0
    {
1976
0
        return GEOSOrientationIndex_r(handle, Ax, Ay, Bx, By, Px, Py);
1977
0
    }
1978
1979
    GEOSGeometry*
1980
    GEOSSharedPaths(const GEOSGeometry* g1, const GEOSGeometry* g2)
1981
0
    {
1982
0
        return GEOSSharedPaths_r(handle, g1, g2);
1983
0
    }
1984
1985
    GEOSGeometry*
1986
    GEOSSnap(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance)
1987
0
    {
1988
0
        return GEOSSnap_r(handle, g1, g2, tolerance);
1989
0
    }
1990
1991
    GEOSBufferParams*
1992
    GEOSBufferParams_create()
1993
0
    {
1994
0
        return GEOSBufferParams_create_r(handle);
1995
0
    }
1996
1997
    void
1998
    GEOSBufferParams_destroy(GEOSBufferParams* p)
1999
0
    {
2000
0
        return GEOSBufferParams_destroy_r(handle, p);
2001
0
    }
2002
2003
    int
2004
    GEOSBufferParams_setEndCapStyle(GEOSBufferParams* p, int style)
2005
0
    {
2006
0
        return GEOSBufferParams_setEndCapStyle_r(handle, p, style);
2007
0
    }
2008
2009
    int
2010
    GEOSBufferParams_setJoinStyle(GEOSBufferParams* p, int joinStyle)
2011
0
    {
2012
0
        return GEOSBufferParams_setJoinStyle_r(handle, p, joinStyle);
2013
0
    }
2014
2015
    int
2016
    GEOSBufferParams_setMitreLimit(GEOSBufferParams* p, double l)
2017
0
    {
2018
0
        return GEOSBufferParams_setMitreLimit_r(handle, p, l);
2019
0
    }
2020
2021
    int
2022
    GEOSBufferParams_setQuadrantSegments(GEOSBufferParams* p, int joinStyle)
2023
0
    {
2024
0
        return GEOSBufferParams_setQuadrantSegments_r(handle, p, joinStyle);
2025
0
    }
2026
2027
    int
2028
    GEOSBufferParams_setSingleSided(GEOSBufferParams* p, int singleSided)
2029
0
    {
2030
0
        return GEOSBufferParams_setSingleSided_r(handle, p, singleSided);
2031
0
    }
2032
2033
    Geometry*
2034
    GEOSBufferWithParams(const Geometry* g, const GEOSBufferParams* p, double w)
2035
0
    {
2036
0
        return GEOSBufferWithParams_r(handle, g, p, w);
2037
0
    }
2038
2039
    Geometry*
2040
    GEOSDelaunayTriangulation(const Geometry* g, double tolerance, int onlyEdges)
2041
0
    {
2042
0
        return GEOSDelaunayTriangulation_r(handle, g, tolerance, onlyEdges);
2043
0
    }
2044
2045
    Geometry*
2046
    GEOSConstrainedDelaunayTriangulation(const Geometry* g)
2047
0
    {
2048
0
        return GEOSConstrainedDelaunayTriangulation_r(handle, g);
2049
0
    }
2050
2051
    Geometry*
2052
    GEOSVoronoiDiagram(const Geometry* g, const Geometry* env, double tolerance, int flags)
2053
0
    {
2054
0
        return GEOSVoronoiDiagram_r(handle, g, env, tolerance, flags);
2055
0
    }
2056
2057
    int
2058
    GEOSSegmentIntersection(double ax0, double ay0, double ax1, double ay1,
2059
                            double bx0, double by0, double bx1, double by1,
2060
                            double* cx, double* cy)
2061
0
    {
2062
0
        return GEOSSegmentIntersection_r(handle,
2063
0
                                         ax0, ay0, ax1, ay1,
2064
0
                                         bx0, by0, bx1, by1,
2065
0
                                         cx, cy);
2066
0
    }
2067
2068
    int
2069
    GEOSCoverageIsValid(
2070
        const Geometry* input,
2071
        double gapWidth,
2072
        Geometry** invalidEdges)
2073
0
    {
2074
0
        return GEOSCoverageIsValid_r(handle, input, gapWidth, invalidEdges);
2075
0
    }
2076
2077
    Geometry*
2078
    GEOSCoverageSimplifyVW(const Geometry* input, double tolerance, int preserveBoundary)
2079
0
    {
2080
0
        return GEOSCoverageSimplifyVW_r(handle, input, tolerance, preserveBoundary);
2081
0
    }
2082
2083
2084
} /* extern "C" */