Coverage Report

Created: 2026-06-13 06:12

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