Coverage Report

Created: 2025-10-10 06:41

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
10.1k
    {
414
10.1k
        return GEOSGeomFromWKT_r(handle, wkt);
415
10.1k
    }
416
417
    char*
418
    GEOSGeomToWKT(const Geometry* g)
419
9.13k
    {
420
9.13k
        return GEOSGeomToWKT_r(handle, g);
421
9.13k
    }
422
423
// Remember to free the result!
424
    unsigned char*
425
    GEOSGeomToWKB_buf(const Geometry* g, std::size_t* size)
426
8.41k
    {
427
8.41k
        return GEOSGeomToWKB_buf_r(handle, g, size);
428
8.41k
    }
429
430
    Geometry*
431
    GEOSGeomFromWKB_buf(const unsigned char* wkb, std::size_t size)
432
9.13k
    {
433
9.13k
        return GEOSGeomFromWKB_buf_r(handle, wkb, size);
434
9.13k
    }
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
8.41k
    {
506
8.41k
        return GEOSIntersection_r(handle, g1, g2);
507
8.41k
    }
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
8.41k
    {
642
8.41k
        return GEOSDifference_r(handle, g1, g2);
643
8.41k
    }
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
8.41k
    {
672
8.41k
        return GEOSUnion_r(handle, g1, g2);
673
8.41k
    }
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
    int
731
    GEOSGridIntersectionFractions(const Geometry* g, double xmin, double ymin, double xmax, double ymax,
732
                                  unsigned nx, unsigned ny, float* buf)
733
0
    {
734
0
        return GEOSGridIntersectionFractions_r(handle, g, xmin, ymin, xmax, ymax, nx, ny, buf);
735
0
    }
736
737
    Geometry*
738
0
    GEOSGeom_transformXY(const GEOSGeometry* g, GEOSTransformXYCallback callback, void* userdata) {
739
0
        return GEOSGeom_transformXY_r(handle, g, callback, userdata);
740
0
    }
741
742
743
    Geometry*
744
0
    GEOSGeom_transformXYZ(const GEOSGeometry* g, GEOSTransformXYZCallback callback, void* userdata) {
745
0
        return GEOSGeom_transformXYZ_r(handle, g, callback, userdata);
746
0
    }
747
748
749
//-------------------------------------------------------------------
750
// memory management functions
751
//------------------------------------------------------------------
752
753
754
    void
755
    GEOSGeom_destroy(Geometry* a)
756
42.8k
    {
757
42.8k
        return GEOSGeom_destroy_r(handle, a);
758
42.8k
    }
759
760
761
    int
762
    GEOSGetNumCoordinates(const Geometry* g)
763
0
    {
764
0
        return GEOSGetNumCoordinates_r(handle, g);
765
0
    }
766
767
    /*
768
     * Return -1 on exception, 0 otherwise.
769
     * Converts Geometry to normal form (or canonical form).
770
     */
771
    int
772
    GEOSNormalize(Geometry* g)
773
0
    {
774
0
        return GEOSNormalize_r(handle, g);
775
0
    }
776
777
    int
778
    GEOSOrientPolygons(Geometry* g, int exteriorCW)
779
0
    {
780
0
        return GEOSOrientPolygons_r(handle, g, exteriorCW);
781
0
    }
782
783
    int
784
    GEOSGetNumInteriorRings(const Geometry* g)
785
0
    {
786
0
        return GEOSGetNumInteriorRings_r(handle, g);
787
0
    }
788
789
790
// returns -1 on error and 1 for non-multi geometries
791
    int
792
    GEOSGetNumGeometries(const Geometry* g)
793
0
    {
794
0
        return GEOSGetNumGeometries_r(handle, g);
795
0
    }
796
797
798
    /*
799
     * Call only on GEOMETRYCOLLECTION or MULTI*.
800
     * Return a pointer to the internal Geometry.
801
     */
802
    const Geometry*
803
    GEOSGetGeometryN(const Geometry* g, int n)
804
0
    {
805
0
        return GEOSGetGeometryN_r(handle, g, n);
806
0
    }
807
808
    /*
809
     * Call only on LINESTRING
810
     * Returns NULL on exception
811
     */
812
    Geometry*
813
    GEOSGeomGetPointN(const Geometry* g, int n)
814
0
    {
815
0
        return GEOSGeomGetPointN_r(handle, g, n);
816
0
    }
817
818
    /*
819
     * Call only on LINESTRING
820
     */
821
    Geometry*
822
    GEOSGeomGetStartPoint(const Geometry* g)
823
0
    {
824
0
        return GEOSGeomGetStartPoint_r(handle, g);
825
0
    }
826
827
    /*
828
     * Call only on LINESTRING
829
     */
830
    Geometry*
831
    GEOSGeomGetEndPoint(const Geometry* g)
832
0
    {
833
0
        return GEOSGeomGetEndPoint_r(handle, g);
834
0
    }
835
836
    /*
837
     * Call only on LINESTRING
838
     * return 2 on exception, 1 on true, 0 on false
839
     */
840
    char
841
    GEOSisClosed(const Geometry* g)
842
0
    {
843
0
        return GEOSisClosed_r(handle, g);
844
0
    }
845
846
    /*
847
     * Call only on LINESTRING
848
     * returns 0 on exception, otherwise 1
849
     */
850
    int
851
    GEOSGeomGetLength(const Geometry* g, double* length)
852
0
    {
853
0
        return GEOSGeomGetLength_r(handle, g, length);
854
0
    }
855
856
    /*
857
     * Call only on LINESTRING
858
     * returns -1 on exception
859
     */
860
    int
861
    GEOSGeomGetNumPoints(const Geometry* g)
862
0
    {
863
0
        return GEOSGeomGetNumPoints_r(handle, g);
864
0
    }
865
866
    /*
867
     * For POINT
868
     * returns 0 on exception, otherwise 1
869
     */
870
    int
871
    GEOSGeomGetX(const Geometry* g, double* x)
872
0
    {
873
0
        return GEOSGeomGetX_r(handle, g, x);
874
0
    }
875
876
    /*
877
     * For POINT
878
     * returns 0 on exception, otherwise 1
879
     */
880
    int
881
    GEOSGeomGetY(const Geometry* g, double* y)
882
0
    {
883
0
        return GEOSGeomGetY_r(handle, g, y);
884
0
    }
885
886
    /*
887
     * For POINT
888
     * returns 0 on exception, otherwise 1
889
     */
890
    int
891
    GEOSGeomGetZ(const Geometry* g1, double* z)
892
0
    {
893
0
        return GEOSGeomGetZ_r(handle, g1, z);
894
0
    }
895
896
    /*
897
     * For POINT
898
     * returns 0 on exception, otherwise 1
899
     */
900
    int
901
    GEOSGeomGetM(const Geometry* g1, double* m)
902
0
    {
903
0
        return GEOSGeomGetM_r(handle, g1, m);
904
0
    }
905
906
    /*
907
     * Call only on polygon
908
     * Return a copy of the internal Geometry.
909
     */
910
    const Geometry*
911
    GEOSGetExteriorRing(const Geometry* g)
912
0
    {
913
0
        return GEOSGetExteriorRing_r(handle, g);
914
0
    }
915
916
    /*
917
     * Call only on polygon
918
     * Return a pointer to internal storage, do not destroy it.
919
     */
920
    const Geometry*
921
    GEOSGetInteriorRingN(const Geometry* g, int n)
922
0
    {
923
0
        return GEOSGetInteriorRingN_r(handle, g, n);
924
0
    }
925
926
    Geometry*
927
    GEOSGetCentroid(const Geometry* g)
928
0
    {
929
0
        return GEOSGetCentroid_r(handle, g);
930
0
    }
931
932
    int
933
    GEOSHilbertCode(const GEOSGeometry *geom, const GEOSGeometry* extent,
934
                unsigned int level, unsigned int *code)
935
0
    {
936
0
        return GEOSHilbertCode_r(handle, geom, extent, level, code);
937
0
    }
938
939
    Geometry*
940
    GEOSMinimumBoundingCircle(const Geometry* g, double* radius, Geometry** center)
941
0
    {
942
0
        return GEOSMinimumBoundingCircle_r(handle, g, radius, center);
943
0
    }
944
945
    Geometry*
946
    GEOSGeom_createCollection(int type, Geometry** geoms, unsigned int ngeoms)
947
0
    {
948
0
        return GEOSGeom_createCollection_r(handle, type, geoms, ngeoms);
949
0
    }
950
951
    Geometry**
952
    GEOSGeom_releaseCollection(Geometry* collection, unsigned int * ngeoms)
953
0
    {
954
0
        return GEOSGeom_releaseCollection_r(handle, collection, ngeoms);
955
0
    }
956
957
    Geometry*
958
    GEOSPolygonize(const Geometry* const* g, unsigned int ngeoms)
959
0
    {
960
0
        return GEOSPolygonize_r(handle, g, ngeoms);
961
0
    }
962
963
    Geometry*
964
    GEOSPolygonize_valid(const Geometry* const* g, unsigned int ngeoms)
965
0
    {
966
0
        return GEOSPolygonize_valid_r(handle, g, ngeoms);
967
0
    }
968
969
    Geometry*
970
    GEOSPolygonizer_getCutEdges(const Geometry* const* g, unsigned int ngeoms)
971
0
    {
972
0
        return GEOSPolygonizer_getCutEdges_r(handle, g, ngeoms);
973
0
    }
974
975
    GEOSGeometry*
976
    GEOSPolygonize_full(const GEOSGeometry* input,
977
                        GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalid)
978
0
    {
979
0
        return GEOSPolygonize_full_r(handle, input, cuts, dangles, invalid);
980
0
    }
981
982
    Geometry*
983
    GEOSBuildArea(const Geometry* g)
984
0
    {
985
0
        return GEOSBuildArea_r(handle, g);
986
0
    }
987
988
    Geometry*
989
    GEOSMakeValid(const Geometry* g)
990
0
    {
991
0
        return GEOSMakeValid_r(handle, g);
992
0
    }
993
994
    GEOSMakeValidParams*
995
    GEOSMakeValidParams_create()
996
0
    {
997
0
        return GEOSMakeValidParams_create_r(handle);
998
0
    }
999
1000
    void
1001
    GEOSMakeValidParams_destroy(GEOSMakeValidParams* parms)
1002
0
    {
1003
0
        return GEOSMakeValidParams_destroy_r(handle, parms);
1004
0
    }
1005
1006
    int
1007
    GEOSMakeValidParams_setMethod(
1008
        GEOSMakeValidParams* p,
1009
        GEOSMakeValidMethods method)
1010
0
    {
1011
0
        return GEOSMakeValidParams_setMethod_r(handle, p, method);
1012
0
    }
1013
1014
    int
1015
    GEOSMakeValidParams_setKeepCollapsed(
1016
        GEOSMakeValidParams* p,
1017
        int keepCollapsed)
1018
0
    {
1019
0
        return GEOSMakeValidParams_setKeepCollapsed_r(handle, p, keepCollapsed);
1020
0
    }
1021
1022
    Geometry*
1023
    GEOSMakeValidWithParams(
1024
        const Geometry* g,
1025
        const GEOSMakeValidParams* params)
1026
0
    {
1027
0
        return GEOSMakeValidWithParams_r(handle, g, params);
1028
0
    }
1029
1030
    GEOSCoverageCleanParams*
1031
    GEOSCoverageCleanParams_create()
1032
0
    {
1033
0
        return GEOSCoverageCleanParams_create_r(handle);
1034
0
    }
1035
1036
    void
1037
    GEOSCoverageCleanParams_destroy(
1038
        GEOSCoverageCleanParams* params)
1039
0
    {
1040
0
        return GEOSCoverageCleanParams_destroy_r(handle, params);
1041
0
    }
1042
1043
    int
1044
    GEOSCoverageCleanParams_setSnappingDistance(
1045
        GEOSCoverageCleanParams* params, double snappingDistance)
1046
0
    {
1047
0
        return GEOSCoverageCleanParams_setSnappingDistance_r(
1048
0
            handle, params, snappingDistance);
1049
0
    }
1050
1051
    int
1052
    GEOSCoverageCleanParams_setGapMaximumWidth(
1053
        GEOSCoverageCleanParams* params, double gapMaximumWidth)
1054
0
    {
1055
0
        return GEOSCoverageCleanParams_setGapMaximumWidth_r(
1056
0
            handle, params, gapMaximumWidth);
1057
0
    }
1058
1059
    int
1060
    GEOSCoverageCleanParams_setOverlapMergeStrategy(
1061
        GEOSCoverageCleanParams* params, int overlapMergeStrategy)
1062
0
    {
1063
0
        return GEOSCoverageCleanParams_setOverlapMergeStrategy_r(
1064
0
            handle, params, overlapMergeStrategy);
1065
0
    }
1066
1067
    GEOSGeometry *
1068
    GEOSCoverageCleanWithParams(
1069
        const GEOSGeometry* input,
1070
        const GEOSCoverageCleanParams* params)
1071
0
    {
1072
0
        return GEOSCoverageCleanWithParams_r(
1073
0
            handle, input, params);
1074
0
    }
1075
1076
    GEOSGeometry *
1077
    GEOSCoverageClean(
1078
        const GEOSGeometry * input)
1079
0
    {
1080
0
        return GEOSCoverageClean_r(
1081
0
            handle, input);
1082
0
    }
1083
1084
    Geometry*
1085
    GEOSRemoveRepeatedPoints(
1086
        const Geometry* g,
1087
        double tolerance)
1088
0
    {
1089
0
        return GEOSRemoveRepeatedPoints_r(handle, g, tolerance);
1090
0
    }
1091
1092
    Geometry*
1093
    GEOSLineMerge(const Geometry* g)
1094
0
    {
1095
0
        return GEOSLineMerge_r(handle, g);
1096
0
    }
1097
1098
    Geometry*
1099
    GEOSLineMergeDirected(const Geometry* g)
1100
0
    {
1101
0
        return GEOSLineMergeDirected_r(handle, g);
1102
0
    }
1103
1104
    Geometry*
1105
    GEOSLineSubstring(const Geometry* g, double start_fraction, double end_fraction)
1106
0
    {
1107
0
        return GEOSLineSubstring_r(handle, g, start_fraction, end_fraction);
1108
0
    }
1109
1110
    Geometry*
1111
    GEOSReverse(const Geometry* g)
1112
0
    {
1113
0
        return GEOSReverse_r(handle, g);
1114
0
    }
1115
1116
    int
1117
    GEOSGetSRID(const Geometry* g)
1118
0
    {
1119
0
        return GEOSGetSRID_r(handle, g);
1120
0
    }
1121
1122
    void
1123
    GEOSSetSRID(Geometry* g, int srid)
1124
0
    {
1125
0
        return GEOSSetSRID_r(handle, g, srid);
1126
0
    }
1127
1128
    void*
1129
    GEOSGeom_getUserData(const Geometry* g)
1130
0
    {
1131
0
        return GEOSGeom_getUserData_r(handle, g);
1132
0
    }
1133
1134
    void
1135
    GEOSGeom_setUserData(Geometry* g, void* userData)
1136
0
    {
1137
0
        return GEOSGeom_setUserData_r(handle, g, userData);
1138
0
    }
1139
1140
    char
1141
    GEOSHasZ(const Geometry* g)
1142
0
    {
1143
0
        return GEOSHasZ_r(handle, g);
1144
0
    }
1145
1146
    char
1147
    GEOSHasM(const Geometry* g)
1148
0
    {
1149
0
        return GEOSHasM_r(handle, g);
1150
0
    }
1151
1152
    int
1153
    GEOS_getWKBOutputDims()
1154
0
    {
1155
0
        return GEOS_getWKBOutputDims_r(handle);
1156
0
    }
1157
1158
    int
1159
    GEOS_setWKBOutputDims(int newdims)
1160
0
    {
1161
0
        return GEOS_setWKBOutputDims_r(handle, newdims);
1162
0
    }
1163
1164
    int
1165
    GEOS_getWKBByteOrder()
1166
0
    {
1167
0
        return GEOS_getWKBByteOrder_r(handle);
1168
0
    }
1169
1170
    int
1171
    GEOS_setWKBByteOrder(int byteOrder)
1172
0
    {
1173
0
        return GEOS_setWKBByteOrder_r(handle, byteOrder);
1174
0
    }
1175
1176
    CoordinateSequence*
1177
    GEOSCoordSeq_create(unsigned int size, unsigned int dims)
1178
0
    {
1179
0
        return GEOSCoordSeq_create_r(handle, size, dims);
1180
0
    }
1181
1182
    CoordinateSequence*
1183
    GEOSCoordSeq_createWithDimensions(unsigned int size, int hasZ, int hasM)
1184
0
    {
1185
0
        return GEOSCoordSeq_createWithDimensions_r(handle, size, hasZ, hasM);
1186
0
    }
1187
1188
    CoordinateSequence*
1189
    GEOSCoordSeq_copyFromBuffer(const double* buf, unsigned int size, int hasZ, int hasM)
1190
0
    {
1191
0
        return GEOSCoordSeq_copyFromBuffer_r(handle, buf, size, hasZ, hasM);
1192
0
    }
1193
1194
    int
1195
    GEOSCoordSeq_copyToBuffer(const CoordinateSequence* s, double* buf, int hasZ, int hasM)
1196
0
    {
1197
0
        return GEOSCoordSeq_copyToBuffer_r(handle, s, buf, hasZ, hasM);
1198
0
    }
1199
1200
    CoordinateSequence*
1201
    GEOSCoordSeq_copyFromArrays(const double* x, const double* y, const double* z, const double* m, unsigned int size)
1202
0
    {
1203
0
        return GEOSCoordSeq_copyFromArrays_r(handle, x, y, z, m, size);
1204
0
    }
1205
1206
    int
1207
    GEOSCoordSeq_copyToArrays(const CoordinateSequence* s, double* x, double* y, double* z, double* m)
1208
0
    {
1209
0
        return GEOSCoordSeq_copyToArrays_r(handle, s, x, y, z, m);
1210
0
    }
1211
1212
    char
1213
    GEOSCoordSeq_hasZ(CoordinateSequence* s)
1214
0
    {
1215
0
        return GEOSCoordSeq_hasZ_r(handle, s);
1216
0
    }
1217
1218
    char
1219
    GEOSCoordSeq_hasM(CoordinateSequence* s)
1220
0
    {
1221
0
        return GEOSCoordSeq_hasM_r(handle, s);
1222
0
    }
1223
1224
    int
1225
    GEOSCoordSeq_setOrdinate(CoordinateSequence* s, unsigned int idx, unsigned int dim, double val)
1226
0
    {
1227
0
        return GEOSCoordSeq_setOrdinate_r(handle, s, idx, dim, val);
1228
0
    }
1229
1230
    int
1231
    GEOSCoordSeq_setX(CoordinateSequence* s, unsigned int idx, double val)
1232
0
    {
1233
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::X, val);
1234
0
    }
1235
1236
    int
1237
    GEOSCoordSeq_setY(CoordinateSequence* s, unsigned int idx, double val)
1238
0
    {
1239
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::Y, val);
1240
0
    }
1241
1242
    int
1243
    GEOSCoordSeq_setZ(CoordinateSequence* s, unsigned int idx, double val)
1244
0
    {
1245
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::Z, val);
1246
0
    }
1247
1248
    int
1249
    GEOSCoordSeq_setM(CoordinateSequence* s, unsigned int idx, double val)
1250
0
    {
1251
0
        return GEOSCoordSeq_setOrdinate(s, idx, CoordinateSequence::M, val);
1252
0
    }
1253
1254
    int
1255
    GEOSCoordSeq_setXY(CoordinateSequence* s, unsigned int idx, double x, double y)
1256
0
    {
1257
0
        return GEOSCoordSeq_setXY_r(handle, s, idx, x, y);
1258
0
    }
1259
1260
    int
1261
    GEOSCoordSeq_setXYZ(CoordinateSequence* s, unsigned int idx, double x, double y, double z)
1262
0
    {
1263
0
        return GEOSCoordSeq_setXYZ_r(handle, s, idx, x, y, z);
1264
0
    }
1265
1266
    CoordinateSequence*
1267
    GEOSCoordSeq_clone(const CoordinateSequence* s)
1268
0
    {
1269
0
        return GEOSCoordSeq_clone_r(handle, s);
1270
0
    }
1271
1272
    int
1273
    GEOSCoordSeq_getOrdinate(const CoordinateSequence* s, unsigned int idx, unsigned int dim, double* val)
1274
0
    {
1275
0
        return GEOSCoordSeq_getOrdinate_r(handle, s, idx, dim, val);
1276
0
    }
1277
1278
    int
1279
    GEOSCoordSeq_getX(const CoordinateSequence* s, unsigned int idx, double* val)
1280
0
    {
1281
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::X, val);
1282
0
    }
1283
1284
    int
1285
    GEOSCoordSeq_getY(const CoordinateSequence* s, unsigned int idx, double* val)
1286
0
    {
1287
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::Y, val);
1288
0
    }
1289
1290
    int
1291
    GEOSCoordSeq_getZ(const CoordinateSequence* s, unsigned int idx, double* val)
1292
0
    {
1293
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::Z, val);
1294
0
    }
1295
1296
    int
1297
    GEOSCoordSeq_getM(const CoordinateSequence* s, unsigned int idx, double* val)
1298
0
    {
1299
0
        return GEOSCoordSeq_getOrdinate(s, idx, CoordinateSequence::M, val);
1300
0
    }
1301
1302
    int
1303
    GEOSCoordSeq_getXY(const CoordinateSequence* s, unsigned int idx, double* x, double* y)
1304
0
    {
1305
0
        return GEOSCoordSeq_getXY_r(handle, s, idx, x, y);
1306
0
    }
1307
1308
    int
1309
    GEOSCoordSeq_getXYZ(const CoordinateSequence* s, unsigned int idx, double* x, double* y, double* z)
1310
0
    {
1311
0
        return GEOSCoordSeq_getXYZ_r(handle, s, idx, x, y, z);
1312
0
    }
1313
1314
    int
1315
    GEOSCoordSeq_getSize(const CoordinateSequence* s, unsigned int* size)
1316
0
    {
1317
0
        return GEOSCoordSeq_getSize_r(handle, s, size);
1318
0
    }
1319
1320
    int
1321
    GEOSCoordSeq_getDimensions(const CoordinateSequence* s, unsigned int* dims)
1322
0
    {
1323
0
        return GEOSCoordSeq_getDimensions_r(handle, s, dims);
1324
0
    }
1325
1326
    int
1327
    GEOSCoordSeq_isCCW(const CoordinateSequence* s, char* is_ccw)
1328
0
    {
1329
0
        return GEOSCoordSeq_isCCW_r(handle, s, is_ccw);
1330
0
    }
1331
1332
    void
1333
    GEOSCoordSeq_destroy(CoordinateSequence* s)
1334
0
    {
1335
0
        return GEOSCoordSeq_destroy_r(handle, s);
1336
0
    }
1337
1338
    const CoordinateSequence*
1339
    GEOSGeom_getCoordSeq(const Geometry* g)
1340
0
    {
1341
0
        return GEOSGeom_getCoordSeq_r(handle, g);
1342
0
    }
1343
1344
    Geometry*
1345
    GEOSGeom_createPoint(CoordinateSequence* cs)
1346
0
    {
1347
0
        return GEOSGeom_createPoint_r(handle, cs);
1348
0
    }
1349
1350
    Geometry*
1351
    GEOSGeom_createPointFromXY(double x, double y)
1352
0
    {
1353
0
        return GEOSGeom_createPointFromXY_r(handle, x, y);
1354
0
    }
1355
1356
    Geometry*
1357
    GEOSGeom_createLinearRing(CoordinateSequence* cs)
1358
0
    {
1359
0
        return GEOSGeom_createLinearRing_r(handle, cs);
1360
0
    }
1361
1362
    Geometry*
1363
    GEOSGeom_createLineString(CoordinateSequence* cs)
1364
0
    {
1365
0
        return GEOSGeom_createLineString_r(handle, cs);
1366
0
    }
1367
1368
    Geometry*
1369
    GEOSGeom_createPolygon(Geometry* shell, Geometry** holes, unsigned int nholes)
1370
0
    {
1371
0
        return GEOSGeom_createPolygon_r(handle, shell, holes, nholes);
1372
0
    }
1373
1374
    Geometry*
1375
    GEOSGeom_createCircularString(CoordinateSequence* cs)
1376
0
    {
1377
0
        return GEOSGeom_createCircularString_r(handle, cs);
1378
0
    }
1379
1380
    Geometry*
1381
    GEOSGeom_createCompoundCurve(Geometry** curves, unsigned int ngeoms)
1382
0
    {
1383
0
        return GEOSGeom_createCompoundCurve_r(handle, curves, ngeoms);
1384
0
    }
1385
1386
    Geometry*
1387
    GEOSGeom_createCurvePolygon(Geometry* shell, Geometry** holes, unsigned int nholes)
1388
0
    {
1389
0
        return GEOSGeom_createCurvePolygon_r(handle, shell, holes, nholes);
1390
0
    }
1391
1392
    Geometry*
1393
    GEOSGeom_clone(const Geometry* g)
1394
0
    {
1395
0
        return GEOSGeom_clone_r(handle, g);
1396
0
    }
1397
1398
    GEOSGeometry*
1399
    GEOSGeom_setPrecision(const GEOSGeometry* g, double gridSize, int flags)
1400
0
    {
1401
0
        return GEOSGeom_setPrecision_r(handle, g, gridSize, flags);
1402
0
    }
1403
1404
    double
1405
    GEOSGeom_getPrecision(const GEOSGeometry* g)
1406
0
    {
1407
0
        return GEOSGeom_getPrecision_r(handle, g);
1408
0
    }
1409
1410
    int
1411
    GEOSGeom_getDimensions(const Geometry* g)
1412
0
    {
1413
0
        return GEOSGeom_getDimensions_r(handle, g);
1414
0
    }
1415
1416
    int
1417
    GEOSGeom_getCoordinateDimension(const Geometry* g)
1418
0
    {
1419
0
        return GEOSGeom_getCoordinateDimension_r(handle, g);
1420
0
    }
1421
1422
    int GEOS_DLL GEOSGeom_getXMin(const GEOSGeometry* g, double* value)
1423
0
    {
1424
0
        return GEOSGeom_getXMin_r(handle, g, value);
1425
0
    }
1426
1427
    int GEOS_DLL GEOSGeom_getYMin(const GEOSGeometry* g, double* value)
1428
0
    {
1429
0
        return GEOSGeom_getYMin_r(handle, g, value);
1430
0
    }
1431
1432
    int GEOS_DLL GEOSGeom_getXMax(const GEOSGeometry* g, double* value)
1433
0
    {
1434
0
        return GEOSGeom_getXMax_r(handle, g, value);
1435
0
    }
1436
1437
    int GEOS_DLL GEOSGeom_getYMax(const GEOSGeometry* g, double* value)
1438
0
    {
1439
0
        return GEOSGeom_getYMax_r(handle, g, value);
1440
0
    }
1441
1442
    int GEOS_DLL GEOSGeom_getExtent(const GEOSGeometry* g, double* xmin, double* ymin, double* xmax, double* ymax)
1443
0
    {
1444
0
        return GEOSGeom_getExtent_r(handle, g, xmin, ymin, xmax, ymax);
1445
0
    }
1446
1447
    Geometry*
1448
    GEOSSimplify(const Geometry* g, double tolerance)
1449
0
    {
1450
0
        return GEOSSimplify_r(handle, g, tolerance);
1451
0
    }
1452
1453
    Geometry*
1454
    GEOSTopologyPreserveSimplify(const Geometry* g, double tolerance)
1455
0
    {
1456
0
        return GEOSTopologyPreserveSimplify_r(handle, g, tolerance);
1457
0
    }
1458
1459
1460
    /* WKT Reader */
1461
    WKTReader*
1462
    GEOSWKTReader_create()
1463
0
    {
1464
0
        return GEOSWKTReader_create_r(handle);
1465
0
    }
1466
1467
    void
1468
    GEOSWKTReader_destroy(WKTReader* reader)
1469
0
    {
1470
0
        GEOSWKTReader_destroy_r(handle, reader);
1471
0
    }
1472
1473
    void
1474
    GEOSWKTReader_setFixStructure(WKTReader* reader, char doFix)
1475
0
    {
1476
0
        GEOSWKTReader_setFixStructure_r(handle, reader, doFix);
1477
0
    }
1478
1479
    Geometry*
1480
    GEOSWKTReader_read(WKTReader* reader, const char* wkt)
1481
0
    {
1482
0
        return GEOSWKTReader_read_r(handle, reader, wkt);
1483
0
    }
1484
1485
    /* WKT Writer */
1486
    WKTWriter*
1487
    GEOSWKTWriter_create()
1488
0
    {
1489
0
        return GEOSWKTWriter_create_r(handle);
1490
0
    }
1491
1492
    void
1493
    GEOSWKTWriter_destroy(WKTWriter* Writer)
1494
0
    {
1495
0
        GEOSWKTWriter_destroy_r(handle, Writer);
1496
0
    }
1497
1498
    char*
1499
    GEOSWKTWriter_write(WKTWriter* writer, const Geometry* geom)
1500
0
    {
1501
0
        return GEOSWKTWriter_write_r(handle, writer, geom);
1502
0
    }
1503
1504
    void
1505
    GEOSWKTWriter_setTrim(WKTWriter* writer, char trim)
1506
0
    {
1507
0
        GEOSWKTWriter_setTrim_r(handle, writer, trim);
1508
0
    }
1509
1510
    void
1511
    GEOSWKTWriter_setRoundingPrecision(WKTWriter* writer, int precision)
1512
0
    {
1513
0
        return GEOSWKTWriter_setRoundingPrecision_r(handle, writer, precision);
1514
0
    }
1515
1516
    void
1517
    GEOSWKTWriter_setOutputDimension(WKTWriter* writer, int dim)
1518
0
    {
1519
0
        GEOSWKTWriter_setOutputDimension_r(handle, writer, dim);
1520
0
    }
1521
1522
    int
1523
    GEOSWKTWriter_getOutputDimension(WKTWriter* writer)
1524
0
    {
1525
0
        return GEOSWKTWriter_getOutputDimension_r(handle, writer);
1526
0
    }
1527
1528
    void
1529
    GEOSWKTWriter_setOld3D(WKTWriter* writer, int useOld3D)
1530
0
    {
1531
0
        GEOSWKTWriter_setOld3D_r(handle, writer, useOld3D);
1532
0
    }
1533
1534
    /* WKB Reader */
1535
    WKBReader*
1536
    GEOSWKBReader_create()
1537
0
    {
1538
0
        return GEOSWKBReader_create_r(handle);
1539
0
    }
1540
1541
    void
1542
    GEOSWKBReader_destroy(WKBReader* reader)
1543
0
    {
1544
0
        GEOSWKBReader_destroy_r(handle, reader);
1545
0
    }
1546
1547
    void
1548
    GEOSWKBReader_setFixStructure(WKBReader* reader, char doFix)
1549
0
    {
1550
0
        GEOSWKBReader_setFixStructure_r(handle, reader, doFix);
1551
0
    }
1552
1553
    Geometry*
1554
    GEOSWKBReader_read(WKBReader* reader, const unsigned char* wkb, std::size_t size)
1555
0
    {
1556
0
        return GEOSWKBReader_read_r(handle, reader, wkb, size);
1557
0
    }
1558
1559
    Geometry*
1560
    GEOSWKBReader_readHEX(WKBReader* reader, const unsigned char* hex, std::size_t size)
1561
0
    {
1562
0
        return GEOSWKBReader_readHEX_r(handle, reader, hex, size);
1563
0
    }
1564
1565
    /* WKB Writer */
1566
    WKBWriter*
1567
    GEOSWKBWriter_create()
1568
0
    {
1569
0
        return GEOSWKBWriter_create_r(handle);
1570
0
    }
1571
1572
    void
1573
    GEOSWKBWriter_destroy(WKBWriter* Writer)
1574
0
    {
1575
0
        GEOSWKBWriter_destroy_r(handle, Writer);
1576
0
    }
1577
1578
1579
    /* The caller owns the result */
1580
    unsigned char*
1581
    GEOSWKBWriter_write(WKBWriter* writer, const Geometry* geom, std::size_t* size)
1582
0
    {
1583
0
        return GEOSWKBWriter_write_r(handle, writer, geom, size);
1584
0
    }
1585
1586
    /* The caller owns the result */
1587
    unsigned char*
1588
    GEOSWKBWriter_writeHEX(WKBWriter* writer, const Geometry* geom, std::size_t* size)
1589
0
    {
1590
0
        return GEOSWKBWriter_writeHEX_r(handle, writer, geom, size);
1591
0
    }
1592
1593
    int
1594
    GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter* writer)
1595
0
    {
1596
0
        return GEOSWKBWriter_getOutputDimension_r(handle, writer);
1597
0
    }
1598
1599
    void
1600
    GEOSWKBWriter_setOutputDimension(GEOSWKBWriter* writer, int newDimension)
1601
0
    {
1602
0
        GEOSWKBWriter_setOutputDimension_r(handle, writer, newDimension);
1603
0
    }
1604
1605
    int
1606
    GEOSWKBWriter_getByteOrder(const GEOSWKBWriter* writer)
1607
0
    {
1608
0
        return GEOSWKBWriter_getByteOrder_r(handle, writer);
1609
0
    }
1610
1611
    void
1612
    GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer, int newByteOrder)
1613
0
    {
1614
0
        GEOSWKBWriter_setByteOrder_r(handle, writer, newByteOrder);
1615
0
    }
1616
1617
    int
1618
    GEOSWKBWriter_getFlavor(const GEOSWKBWriter* writer)
1619
0
    {
1620
0
        return GEOSWKBWriter_getFlavor_r(handle, writer);
1621
0
    }
1622
1623
    void
1624
    GEOSWKBWriter_setFlavor(GEOSWKBWriter* writer, int newFlavor)
1625
0
    {
1626
0
        GEOSWKBWriter_setFlavor_r(handle, writer, newFlavor);
1627
0
    }
1628
1629
    char
1630
    GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter* writer)
1631
0
    {
1632
0
        return GEOSWKBWriter_getIncludeSRID_r(handle, writer);
1633
0
    }
1634
1635
    void
1636
    GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer, const char newIncludeSRID)
1637
0
    {
1638
0
        GEOSWKBWriter_setIncludeSRID_r(handle, writer, newIncludeSRID);
1639
0
    }
1640
1641
    int
1642
0
    GEOS_printDouble(double d, unsigned int precision, char *result) {
1643
0
        return WKTWriter::writeTrimmedNumber(d, precision, result);
1644
0
    }
1645
1646
    /* GeoJSON Reader */
1647
    GeoJSONReader*
1648
    GEOSGeoJSONReader_create()
1649
0
    {
1650
0
        return GEOSGeoJSONReader_create_r(handle);
1651
0
    }
1652
1653
    void
1654
    GEOSGeoJSONReader_destroy(GeoJSONReader* reader)
1655
0
    {
1656
0
        GEOSGeoJSONReader_destroy_r(handle, reader);
1657
0
    }
1658
1659
    Geometry*
1660
    GEOSGeoJSONReader_readGeometry(GeoJSONReader* reader, const char* geojson)
1661
0
    {
1662
0
        return GEOSGeoJSONReader_readGeometry_r(handle, reader, geojson);
1663
0
    }
1664
1665
    /* GeoJSON Writer */
1666
    GeoJSONWriter*
1667
    GEOSGeoJSONWriter_create()
1668
0
    {
1669
0
        return GEOSGeoJSONWriter_create_r(handle);
1670
0
    }
1671
1672
    void
1673
    GEOSGeoJSONWriter_destroy(GEOSGeoJSONWriter* writer)
1674
0
    {
1675
0
        GEOSGeoJSONWriter_destroy_r(handle, writer);
1676
0
    }
1677
1678
    char*
1679
    GEOSGeoJSONWriter_writeGeometry(GEOSGeoJSONWriter* writer, const GEOSGeometry* g, int indent)
1680
0
    {
1681
0
        return GEOSGeoJSONWriter_writeGeometry_r(handle, writer, g, indent);
1682
0
    }
1683
1684
    void
1685
    GEOSGeoJSONWriter_setOutputDimension(GeoJSONWriter* writer, int dim)
1686
0
    {
1687
0
        GEOSGeoJSONWriter_setOutputDimension_r(handle, writer, dim);
1688
0
    }
1689
1690
    int
1691
    GEOSGeoJSONWriter_getOutputDimension(GeoJSONWriter* writer)
1692
0
    {
1693
0
        return GEOSGeoJSONWriter_getOutputDimension_r(handle, writer);
1694
0
    }
1695
1696
1697
//-----------------------------------------------------------------
1698
// Prepared Geometry
1699
//-----------------------------------------------------------------
1700
1701
    const geos::geom::prep::PreparedGeometry*
1702
    GEOSPrepare(const Geometry* g)
1703
0
    {
1704
0
        return GEOSPrepare_r(handle, g);
1705
0
    }
1706
1707
    void
1708
    GEOSPreparedGeom_destroy(const geos::geom::prep::PreparedGeometry* a)
1709
0
    {
1710
0
        GEOSPreparedGeom_destroy_r(handle, a);
1711
0
    }
1712
1713
    char
1714
    GEOSPreparedContains(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1715
0
    {
1716
0
        return GEOSPreparedContains_r(handle, pg1, g2);
1717
0
    }
1718
1719
    char
1720
    GEOSPreparedContainsXY(const geos::geom::prep::PreparedGeometry* pg1, double x, double y)
1721
0
    {
1722
0
        return GEOSPreparedContainsXY_r(handle, pg1, x, y);
1723
0
    }
1724
1725
    char
1726
    GEOSPreparedContainsProperly(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1727
0
    {
1728
0
        return GEOSPreparedContainsProperly_r(handle, pg1, g2);
1729
0
    }
1730
1731
    char
1732
    GEOSPreparedCoveredBy(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1733
0
    {
1734
0
        return GEOSPreparedCoveredBy_r(handle, pg1, g2);
1735
0
    }
1736
1737
    char
1738
    GEOSPreparedCovers(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1739
0
    {
1740
0
        return GEOSPreparedCovers_r(handle, pg1, g2);
1741
0
    }
1742
1743
    char
1744
    GEOSPreparedCrosses(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1745
0
    {
1746
0
        return GEOSPreparedCrosses_r(handle, pg1, g2);
1747
0
    }
1748
1749
    char
1750
    GEOSPreparedDisjoint(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1751
0
    {
1752
0
        return GEOSPreparedDisjoint_r(handle, pg1, g2);
1753
0
    }
1754
1755
    char
1756
    GEOSPreparedIntersects(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1757
0
    {
1758
0
        return GEOSPreparedIntersects_r(handle, pg1, g2);
1759
0
    }
1760
1761
    char
1762
    GEOSPreparedIntersectsXY(const geos::geom::prep::PreparedGeometry* pg1, double x, double y)
1763
0
    {
1764
0
        return GEOSPreparedIntersectsXY_r(handle, pg1, x, y);
1765
0
    }
1766
1767
    char
1768
    GEOSPreparedOverlaps(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1769
0
    {
1770
0
        return GEOSPreparedOverlaps_r(handle, pg1, g2);
1771
0
    }
1772
1773
    char
1774
    GEOSPreparedTouches(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1775
0
    {
1776
0
        return GEOSPreparedTouches_r(handle, pg1, g2);
1777
0
    }
1778
1779
    char
1780
    GEOSPreparedWithin(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1781
0
    {
1782
0
        return GEOSPreparedWithin_r(handle, pg1, g2);
1783
0
    }
1784
1785
    char *
1786
    GEOSPreparedRelate(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2)
1787
0
    {
1788
0
        return GEOSPreparedRelate_r(handle, pg1, g2);
1789
0
    }
1790
1791
    char
1792
    GEOSPreparedRelatePattern(const geos::geom::prep::PreparedGeometry* pg1, const Geometry* g2, const char* imPattern)
1793
0
    {
1794
0
        return GEOSPreparedRelatePattern_r(handle, pg1, g2, imPattern);
1795
0
    }
1796
1797
    CoordinateSequence*
1798
    GEOSPreparedNearestPoints(const geos::geom::prep::PreparedGeometry* g1, const Geometry* g2)
1799
0
    {
1800
0
        return GEOSPreparedNearestPoints_r(handle, g1, g2);
1801
0
    }
1802
1803
    int
1804
    GEOSPreparedDistance(const geos::geom::prep::PreparedGeometry* g1, const Geometry* g2, double *dist)
1805
0
    {
1806
0
        return GEOSPreparedDistance_r(handle, g1, g2, dist);
1807
0
    }
1808
1809
    char
1810
    GEOSPreparedDistanceWithin(const geos::geom::prep::PreparedGeometry* g1, const Geometry* g2, double dist)
1811
0
    {
1812
0
        return GEOSPreparedDistanceWithin_r(handle, g1, g2, dist);
1813
0
    }
1814
1815
    GEOSSTRtree*
1816
    GEOSSTRtree_create(std::size_t nodeCapacity)
1817
0
    {
1818
0
        return GEOSSTRtree_create_r(handle, nodeCapacity);
1819
0
    }
1820
1821
    int
1822
    GEOSSTRtree_build(GEOSSTRtree* tree)
1823
0
    {
1824
0
        return GEOSSTRtree_build_r(handle, tree);
1825
0
    }
1826
1827
    void
1828
    GEOSSTRtree_insert(GEOSSTRtree* tree,
1829
                       const geos::geom::Geometry* g,
1830
                       void* item)
1831
0
    {
1832
0
        GEOSSTRtree_insert_r(handle, tree, g, item);
1833
0
    }
1834
1835
    void
1836
    GEOSSTRtree_query(GEOSSTRtree* tree,
1837
                      const geos::geom::Geometry* g,
1838
                      GEOSQueryCallback cb,
1839
                      void* userdata)
1840
0
    {
1841
0
        GEOSSTRtree_query_r(handle, tree, g, cb, userdata);
1842
0
    }
1843
1844
    const GEOSGeometry*
1845
    GEOSSTRtree_nearest(GEOSSTRtree* tree,
1846
                        const geos::geom::Geometry* g)
1847
0
    {
1848
0
        return GEOSSTRtree_nearest_r(handle, tree, g);
1849
0
    }
1850
1851
    const void* GEOSSTRtree_nearest_generic(GEOSSTRtree* tree,
1852
                                            const void* item,
1853
                                            const GEOSGeometry* itemEnvelope,
1854
                                            GEOSDistanceCallback distancefn,
1855
                                            void* userdata)
1856
0
    {
1857
0
        return GEOSSTRtree_nearest_generic_r(handle, tree, item, itemEnvelope, distancefn, userdata);
1858
0
    }
1859
1860
    void
1861
    GEOSSTRtree_iterate(GEOSSTRtree* tree,
1862
                        GEOSQueryCallback callback,
1863
                        void* userdata)
1864
0
    {
1865
0
        GEOSSTRtree_iterate_r(handle, tree, callback, userdata);
1866
0
    }
1867
1868
    char
1869
    GEOSSTRtree_remove(GEOSSTRtree* tree,
1870
                       const geos::geom::Geometry* g,
1871
                       void* item)
1872
0
    {
1873
0
        return GEOSSTRtree_remove_r(handle, tree, g, item);
1874
0
    }
1875
1876
    void
1877
    GEOSSTRtree_destroy(GEOSSTRtree* tree)
1878
0
    {
1879
0
        GEOSSTRtree_destroy_r(handle, tree);
1880
0
    }
1881
1882
    double
1883
    GEOSProject(const geos::geom::Geometry* g,
1884
                const geos::geom::Geometry* p)
1885
0
    {
1886
0
        return GEOSProject_r(handle, g, p);
1887
0
    }
1888
1889
    geos::geom::Geometry*
1890
    GEOSInterpolate(const geos::geom::Geometry* g,
1891
                    double d)
1892
0
    {
1893
0
        return GEOSInterpolate_r(handle, g, d);
1894
0
    }
1895
1896
    double
1897
    GEOSProjectNormalized(const geos::geom::Geometry* g,
1898
                          const geos::geom::Geometry* p)
1899
0
    {
1900
0
        return GEOSProjectNormalized_r(handle, g, p);
1901
0
    }
1902
1903
    geos::geom::Geometry*
1904
    GEOSInterpolateNormalized(const geos::geom::Geometry* g,
1905
                              double d)
1906
0
    {
1907
0
        return GEOSInterpolateNormalized_r(handle, g, d);
1908
0
    }
1909
1910
    geos::geom::Geometry*
1911
    GEOSGeom_extractUniquePoints(const geos::geom::Geometry* g)
1912
0
    {
1913
0
        return GEOSGeom_extractUniquePoints_r(handle, g);
1914
0
    }
1915
1916
    geos::geom::Geometry*
1917
    GEOSGeom_createEmptyCollection(int type)
1918
0
    {
1919
0
        return GEOSGeom_createEmptyCollection_r(handle, type);
1920
0
    }
1921
1922
    geos::geom::Geometry*
1923
    GEOSGeom_createEmptyPoint()
1924
0
    {
1925
0
        return GEOSGeom_createEmptyPoint_r(handle);
1926
0
    }
1927
1928
    geos::geom::Geometry*
1929
    GEOSGeom_createEmptyLineString()
1930
0
    {
1931
0
        return GEOSGeom_createEmptyLineString_r(handle);
1932
0
    }
1933
1934
    geos::geom::Geometry*
1935
    GEOSGeom_createEmptyPolygon()
1936
0
    {
1937
0
        return GEOSGeom_createEmptyPolygon_r(handle);
1938
0
    }
1939
1940
    geos::geom::Geometry*
1941
    GEOSGeom_createEmptyCircularString()
1942
0
    {
1943
0
        return GEOSGeom_createEmptyCircularString_r(handle);
1944
0
    }
1945
1946
    geos::geom::Geometry*
1947
    GEOSGeom_createEmptyCompoundCurve()
1948
0
    {
1949
0
        return GEOSGeom_createEmptyCompoundCurve_r(handle);
1950
0
    }
1951
1952
    geos::geom::Geometry*
1953
    GEOSGeom_createEmptyCurvePolygon()
1954
0
    {
1955
0
        return GEOSGeom_createEmptyCurvePolygon_r(handle);
1956
0
    }
1957
1958
    geos::geom::Geometry*
1959
    GEOSGeom_createRectangle(double xmin, double ymin, double xmax,
1960
                            double ymax)
1961
0
    {
1962
0
        return GEOSGeom_createRectangle_r(handle, xmin, ymin, xmax, ymax);
1963
0
    }
1964
1965
    int
1966
    GEOSOrientationIndex(double Ax, double Ay, double Bx, double By,
1967
                         double Px, double Py)
1968
0
    {
1969
0
        return GEOSOrientationIndex_r(handle, Ax, Ay, Bx, By, Px, Py);
1970
0
    }
1971
1972
    GEOSGeometry*
1973
    GEOSSharedPaths(const GEOSGeometry* g1, const GEOSGeometry* g2)
1974
0
    {
1975
0
        return GEOSSharedPaths_r(handle, g1, g2);
1976
0
    }
1977
1978
    GEOSGeometry*
1979
    GEOSSnap(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance)
1980
0
    {
1981
0
        return GEOSSnap_r(handle, g1, g2, tolerance);
1982
0
    }
1983
1984
    GEOSBufferParams*
1985
    GEOSBufferParams_create()
1986
0
    {
1987
0
        return GEOSBufferParams_create_r(handle);
1988
0
    }
1989
1990
    void
1991
    GEOSBufferParams_destroy(GEOSBufferParams* p)
1992
0
    {
1993
0
        return GEOSBufferParams_destroy_r(handle, p);
1994
0
    }
1995
1996
    int
1997
    GEOSBufferParams_setEndCapStyle(GEOSBufferParams* p, int style)
1998
0
    {
1999
0
        return GEOSBufferParams_setEndCapStyle_r(handle, p, style);
2000
0
    }
2001
2002
    int
2003
    GEOSBufferParams_setJoinStyle(GEOSBufferParams* p, int joinStyle)
2004
0
    {
2005
0
        return GEOSBufferParams_setJoinStyle_r(handle, p, joinStyle);
2006
0
    }
2007
2008
    int
2009
    GEOSBufferParams_setMitreLimit(GEOSBufferParams* p, double l)
2010
0
    {
2011
0
        return GEOSBufferParams_setMitreLimit_r(handle, p, l);
2012
0
    }
2013
2014
    int
2015
    GEOSBufferParams_setQuadrantSegments(GEOSBufferParams* p, int joinStyle)
2016
0
    {
2017
0
        return GEOSBufferParams_setQuadrantSegments_r(handle, p, joinStyle);
2018
0
    }
2019
2020
    int
2021
    GEOSBufferParams_setSingleSided(GEOSBufferParams* p, int singleSided)
2022
0
    {
2023
0
        return GEOSBufferParams_setSingleSided_r(handle, p, singleSided);
2024
0
    }
2025
2026
    Geometry*
2027
    GEOSBufferWithParams(const Geometry* g, const GEOSBufferParams* p, double w)
2028
0
    {
2029
0
        return GEOSBufferWithParams_r(handle, g, p, w);
2030
0
    }
2031
2032
    Geometry*
2033
    GEOSDelaunayTriangulation(const Geometry* g, double tolerance, int onlyEdges)
2034
0
    {
2035
0
        return GEOSDelaunayTriangulation_r(handle, g, tolerance, onlyEdges);
2036
0
    }
2037
2038
    Geometry*
2039
    GEOSConstrainedDelaunayTriangulation(const Geometry* g)
2040
0
    {
2041
0
        return GEOSConstrainedDelaunayTriangulation_r(handle, g);
2042
0
    }
2043
2044
    Geometry*
2045
    GEOSVoronoiDiagram(const Geometry* g, const Geometry* env, double tolerance, int flags)
2046
0
    {
2047
0
        return GEOSVoronoiDiagram_r(handle, g, env, tolerance, flags);
2048
0
    }
2049
2050
    int
2051
    GEOSSegmentIntersection(double ax0, double ay0, double ax1, double ay1,
2052
                            double bx0, double by0, double bx1, double by1,
2053
                            double* cx, double* cy)
2054
0
    {
2055
0
        return GEOSSegmentIntersection_r(handle,
2056
0
                                         ax0, ay0, ax1, ay1,
2057
0
                                         bx0, by0, bx1, by1,
2058
0
                                         cx, cy);
2059
0
    }
2060
2061
    int
2062
    GEOSCoverageIsValid(
2063
        const Geometry* input,
2064
        double gapWidth,
2065
        Geometry** invalidEdges)
2066
0
    {
2067
0
        return GEOSCoverageIsValid_r(handle, input, gapWidth, invalidEdges);
2068
0
    }
2069
2070
    Geometry*
2071
    GEOSCoverageSimplifyVW(const Geometry* input, double tolerance, int preserveBoundary)
2072
0
    {
2073
0
        return GEOSCoverageSimplifyVW_r(handle, input, tolerance, preserveBoundary);
2074
0
    }
2075
2076
2077
} /* extern "C" */