@@ -168,6 +168,13 @@ typedef struct GEOSSTRtree_t GEOSSTRtree;
168168*/
169169typedef struct GEOSBufParams_t GEOSBufferParams ;
170170
171+ /**
172+ * Parameter object for coverage cleaning options.
173+ * \see GEOSCoverageCleanParams_create()
174+ * \see GEOSCoverageCleanParams_destroy()
175+ */
176+ typedef struct GEOSCoverageCleanParams_t GEOSCoverageCleanParams ;
177+
171178/**
172179* Parameter object for validity enforcement.
173180* \see GEOSMakeValidParams_create()
@@ -879,6 +886,51 @@ GEOSCoverageSimplifyVW_r(
879886 double tolerance ,
880887 int preserveBoundary );
881888
889+ /** \see GEOSCoverageCleanParams_create */
890+ extern GEOSCoverageCleanParams GEOS_DLL *
891+ GEOSCoverageCleanParams_create_r (
892+ GEOSContextHandle_t extHandle );
893+
894+ /** \see GEOSCoverageCleanParams_destroy */
895+ extern void GEOS_DLL
896+ GEOSCoverageCleanParams_destroy_r (
897+ GEOSContextHandle_t extHandle ,
898+ GEOSCoverageCleanParams * params );
899+
900+ /** \see GEOSCoverageCleanParams_setSnappingDistance */
901+ extern int GEOS_DLL
902+ GEOSCoverageCleanParams_setSnappingDistance_r (
903+ GEOSContextHandle_t extHandle ,
904+ GEOSCoverageCleanParams * params ,
905+ double snappingDistance );
906+
907+ /** \see GEOSCoverageCleanParams_setGapMaximumWidth */
908+ extern int GEOS_DLL
909+ GEOSCoverageCleanParams_setGapMaximumWidth_r (
910+ GEOSContextHandle_t extHandle ,
911+ GEOSCoverageCleanParams * params ,
912+ double gapMaximumWidth );
913+
914+ /** \see GEOSCoverageCleanParams_setOverlapMergeStrategy */
915+ extern int GEOS_DLL
916+ GEOSCoverageCleanParams_setOverlapMergeStrategy_r (
917+ GEOSContextHandle_t extHandle ,
918+ GEOSCoverageCleanParams * params ,
919+ int overlapMergeStrategy );
920+
921+ /** \see GEOSCoverageCleanWithParams */
922+ extern GEOSGeometry GEOS_DLL *
923+ GEOSCoverageCleanWithParams_r (
924+ GEOSContextHandle_t extHandle ,
925+ const GEOSGeometry * input ,
926+ const GEOSCoverageCleanParams * params );
927+
928+ /** \see GEOSCoverageClean */
929+ extern GEOSGeometry GEOS_DLL *
930+ GEOSCoverageClean_r (
931+ GEOSContextHandle_t extHandle ,
932+ const GEOSGeometry * input );
933+
882934/* ========= Topology Operations ========= */
883935
884936/** \see GEOSEnvelope */
@@ -4269,8 +4321,154 @@ extern GEOSGeometry GEOS_DLL * GEOSCoverageSimplifyVW(
42694321 double tolerance ,
42704322 int preserveBoundary );
42714323
4324+ /**
4325+ * Create a default GEOSCoverageCleanParams object for controlling
4326+ * the way invalid polygon interactions are repaird by \ref GEOSCoverageCleanWithParams.
4327+ * \return A newly allocated GEOSCoverageCleanParams. NULL on exception.
4328+ * Caller is responsible for freeing with GEOSCoverageCleanParams_destroy().
4329+ *
4330+ * \since 3.14
4331+ */
4332+ extern GEOSCoverageCleanParams GEOS_DLL *
4333+ GEOSCoverageCleanParams_create ();
4334+
4335+ /**
4336+ * Destroy a GEOSCoverageCleanParams and free all associated memory.
4337+ * \param params The object to destroy.
4338+ *
4339+ * \since 3.14
4340+ */
4341+ extern void GEOS_DLL
4342+ GEOSCoverageCleanParams_destroy (
4343+ GEOSCoverageCleanParams * params );
4344+
4345+ /**
4346+ * Snapping to nearby vertices and line segment snapping
4347+ * is used to improve noding robustness
4348+ * and eliminate small errors in an efficient way,
4349+ * By default this uses a very small snapping distance
4350+ * based on the extent of the input data.
4351+ * The snapping distance may be specified explicitly.
4352+ * This can reduce the number of overlaps and gaps that need to be merged,
4353+ * and reduce the risk of spikes formed by merging gaps.
4354+ * However, a large snapping distance may introduce undesirable
4355+ * data alteration.
4356+ *
4357+ * A distance of zero prevents snapping from being used.
4358+ * \see geos::coverage::CoverageCleaner::setSnappingDistance
4359+ * \param params The GEOSCoverageCleanParams to operate on
4360+ * \param snappingDistance Set to 0.0 for no snapping.
4361+ * \return 0 on exception, 1 on success.
4362+ *
4363+ * \since 3.14
4364+ */
4365+ extern int GEOS_DLL
4366+ GEOSCoverageCleanParams_setSnappingDistance (
4367+ GEOSCoverageCleanParams * params ,
4368+ double snappingDistance );
4369+
4370+ /**
4371+ * Gaps which are wider than a given distance are merged with an adjacent polygon.
4372+ * Polygon width is determined as twice the radius of the MaximumInscribedCircle
4373+ * of the gap polygon.
4374+ * Gaps are merged with the adjacent polygon with longest shared border.
4375+ * Empty holes in input polygons are treated as gaps, and may be filled in.
4376+ * Gaps which are not fully enclosed ("inlets") are not removed.
4377+ *
4378+ * The width of a gap is twice the radius of the Maximum Inscribed Circle in the gap polygon,
4379+ * A width of zero prevents gaps from being merged.
4380+ *
4381+ * \see geos::coverage::CoverageCleaner::setGapMaximumWidth
4382+ * \param params The GEOSCoverageCleanParams to operate on
4383+ * \param gapMaximumWidth Set to 0.0 for no snapping.
4384+ * \return 0 on exception, 1 on success.
4385+ *
4386+ * \since 3.14
4387+ */
4388+ extern int GEOS_DLL
4389+ GEOSCoverageCleanParams_setGapMaximumWidth (
4390+ GEOSCoverageCleanParams * params ,
4391+ double gapMaximumWidth );
4392+
4393+ /**
4394+ * Overlap repair strategies.
4395+ * \see GEOSCoverageCleanParams_setOverlapMergeStrategy
4396+ */
4397+ enum GEOSOverlapMerge {
4398+ /** Merge strategy that chooses polygon with longest common border */
4399+ GEOS_MERGE_LONGEST_BORDER = 0 ,
4400+ /** Merge strategy that chooses polygon with maximum area */
4401+ GEOS_MERGE_MAX_AREA = 1 ,
4402+ /** Merge strategy that chooses polygon with minimum area */
4403+ GEOS_MERGE_MIN_AREA = 2 ,
4404+ /** Merge strategy that chooses polygon with smallest input index */
4405+ GEOS_MERGE_MIN_INDEX = 3
4406+ };
4407+
4408+ /*
4409+ * Sets the overlap merge strategy to use, using one from \ref GEOSOverlapMerge.
4410+ * Overlaps are merged with an adjacent polygon chosen according to a specified merge strategy.
4411+ * The supported strategies are:
4412+ *
4413+ * * **Longest Border**: (default) merge with the polygon with longest shared border (GEOS_MERGE_LONGEST_BORDER.)
4414+ * * **Maximum/Minimum Area**: merge with the polygon with largest or smallest area (GEOS_MERGE_MAX_AREA, GEOS_MERGE_MIN_AREA.)
4415+ * * **Minimum Index**: merge with the polygon with the lowest index in the input array (GEOS_MERGE_MIN_INDEX.)
4416+ *
4417+ * This allows sorting the input according to some criteria to provide a priority
4418+ * for merging gaps.
4419+ *
4420+ * The default is GEOS_MERGE_LONGEST_BORDER.
4421+ *
4422+ * \see geos::coverage::CoverageCleaner::setGapMaximumWidth
4423+ * \param params The GEOSCoverageCleanParams to operate on
4424+ * \param overlapMergeStrategy One of \ref GEOSOverlapMerge strategies
4425+ * \return 0 on exception, 1 on success.
4426+ *
4427+ * \since 3.14
4428+ */
4429+ extern int GEOS_DLL
4430+ GEOSCoverageCleanParams_setOverlapMergeStrategy (
4431+ GEOSCoverageCleanParams * params ,
4432+ int overlapMergeStrategy );
4433+
4434+ /**
4435+ * Operates on a list of polygonal geometry with "exactly matching"
4436+ * edge geometry, to fix cases where the geometry does not in fact
4437+ * exactly match.
4438+ *
4439+ * The input is a collection of polygons, and the output is a collection
4440+ * with the same number of cleaned polygons, in the same order as
4441+ * the input. Polygons that have collapsed during cleaning will be returned
4442+ * as empties.
4443+ *
4444+ * \param input The dirty polygonal coverage,
4445+ * stored in a geometry collection. All members must be POLYGON
4446+ * or MULTIPOLYGON.
4447+ * \param params A GEOSCoverageCleanParams to control the options
4448+ * used in cleaning the coverage.
4449+ * \return A collection containing the cleaned geometries, or null
4450+ * on error. Where cleaning has resulted in polygon collapse,
4451+ * an EMPTY geometry will be returned as part of the collection.
4452+ *
4453+ * \since 3.14
4454+ */
4455+ extern GEOSGeometry GEOS_DLL *
4456+ GEOSCoverageCleanWithParams (
4457+ const GEOSGeometry * input ,
4458+ const GEOSCoverageCleanParams * params
4459+ );
4460+
4461+ /** \see GEOSCoverageCleanWithParams */
4462+ extern GEOSGeometry GEOS_DLL *
4463+ GEOSCoverageClean (
4464+ const GEOSGeometry * input );
4465+
4466+
4467+
4468+
42724469///@}
42734470
4471+
42744472/* ========== Construction Operations ========== */
42754473/** @name Geometric Constructions
42764474* Functions for computing geometric constructions.
0 commit comments