[geos-devel] GEOS C API for Polygonal Coverage operations?
Nyall Dawson
nyall.dawson at gmail.com
Tue Sep 6 15:51:07 PDT 2022
On Wed, 7 Sept 2022 at 07:37, Martin Davis <mtnclimb at gmail.com> wrote:
>
> I've started to build out operations on Polygonal Coverages in JTS ([1], [2]). These will be ported to GEOS (started here with CoverageValidator etc in C++ [3]). Hopefully these will be exposed in PostGIS as well (and of course other downstream projects).
>
> Here's some examples of coverage operations and their geometric signatures:
>
> - Validation: List of Polygons -> List of linear geometries for invalid locations
> - Cleaning: List of Polygons -> Coverage
> - Union: Coverage -> Polygonal geometry
> - Simplification: Coverage -> Coverage
This is exciting, I'm very happy to see this on the horizon. Thank you!
>
> A key question is how to expose these operations in the GEOS C API. I see two options:
> 1) Model a Polygonal Coverage as an array of simple Polygons (and possibly MultiPolygons)
> 2) Provide a Polygonal Coverage datatype (which might contain internal topology)
>
> Any thoughts or comments on this?
>From one downstream client perspective (QGIS) we could work with
either with a similar level of work, and would be happy to adapt to
whatever upstream decides is the best approach!
> If Model #1 is used, what would the C API look like? Accept a Geometry array with a size parameter, and return a Geometry array? It will likely be good to have some support functions to free Geometry arrays too.
This sounds fine to me! A must-have would be that the geometries are
always guaranteed to be returned in the same order as the input
geometries, so that we can easily link input->output geometries and
re-attach non spatial attributes.
One consideration for the "Simplification: Coverage -> Coverage" use
case would be whether only a fixed set of simplification algorithms
are permitted (eg Visvalingam/Douglas-peucker only), or whether custom
simplification/modification operations would also be permitted (via
some callback function or similar). I'd love to see support for custom
operations, so eg I could write a coverage -> coverage operation which
applies both simplification and smoothing to the boundaries.
Nyall
More information about the geos-devel
mailing list