[geos-devel] Exposing PrecisionModel, GeometryPrecisionReducer in the C API
Sandro Mani
manisandro at gmail.com
Mon Jan 5 08:17:26 PST 2015
On 23.12.2014 14:23, Sandro Mani wrote:
> Hi,
>
> Following the initial discussion in ticket #713 [1], I'd like to
> discuss the exposing of PrecisionModel and GeometryPrecisionReducer
> methods in the C API.
>
> Personally I'm interested in having access to the
> GeometryPrecisionReducer::reduce method, as noted in the ticket there
> is also the desire [2] to expose the GeometryFactory in the C API and
> allow creating geometries with a specified GeometryFactory. Below is
> an initial proposal.
>
> -------------------------------------------------------------------------------
>
>
> /** Precision Model **/
> typedef struct GEOSPrecisionModel_t GEOSPrecisionModel;
>
> enum GEOSPrecisionModelType {
> GEOS_PRECISION_FIXED,
> GEOS_PRECISION_FLOATING,
> GEOS_PRECISION_FLOATING_SINGLE
> };
>
> extern GEOSPrecisionModel* GEOSPrecisionModel_create(int type);
> extern GEOSPrecisionModel* GEOSPrecisionModel_createFixed(double scale);
> extern void GEOSPrecisionModel_destroy(GEOSPrecisionModel* model);
>
>
> /** Geometry Factory **/
> typedef struct GEOSGeometryFactory_t GEOSGeometryFactory;
>
> /* pm copied, NULL for default. */
> extern GEOSGeometryFactory*
> GEOSGeometryFactory_create(GEOSPrecisionModel* pm, int SRID);
> extern void GEOSGeometryFactory_destroy(GEOSGeometryFactory* factory);
>
>
> /** New geometry constructors **/
> /* Factory needs to stay valid */
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createPoint(GEOSGeometryFactory* factory,
> GEOSCoordSequence* s);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createEmptyPoint(GEOSGeometryFactory* factory);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createLinearRing(GEOSGeometryFactory* factory,
> GEOSCoordSequence* s);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createLineString(GEOSGeometryFactory* factory,
> GEOSCoordSequence* s);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createEmptyLineString(GEOSGeometryFactory* factory);
>
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createEmptyPolygon(GEOSGeometryFactory* factory);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createPolygon(GEOSGeometryFactory* factory,
> GEOSGeometry* shell, GEOSGeometry** holes, unsigned int nholes);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createCollection(GEOSGeometryFactory* factory,
> int type, GEOSGeometry* *geoms, unsigned int ngeoms);
> extern GEOSGeometry GEOS_DLL
> *GEOSGeometryFactory_createEmptyCollection(GEOSGeometryFactory*
> factory, int type);
>
>
> /** Retreive factory from geometry **/
> extern GEOSGeometryFactory GEOSGeom_getGeometryFactory(GEOSGeometry*
> geom);
>
>
> /** Precision Reducer **/
> typedef struct GEOSGeometryPrecisionReducer_t
> GEOSGeometryPrecisionReducer;
>
> /* Factory needs to stay valid */
> extern GEOSGeometryPrecisionReducer*
> GEOSGeometryPrecisionReducer_create_factory(GEOSGeometryFactory*
> factory);
> extern GEOSGeometry*
> GEOSGeometryPrecisionReducer_reduce(GEOSGeometryPrecisionReducer*
> reducer, GEOSGeometry* geometry);
> extern void
> GEOSGeometryPrecisionReducer_destroy(GEOSGeometryPrecisionReducer*
> reducer);
>
> -------------------------------------------------------------------------------
>
>
> Remarks:
> - GEOSGeometryFactory_createXXX is closer to the C++ API, an
> alternative would be something like GEOSGeom_createXXX_factory which
> is closer to what is described in [2].
> - Possibly the CoordinateSequenceFactory needs to be exposed also?
>
> Comments appreciated. Thanks,
> Sandro
>
>
> [1] http://trac.osgeo.org/geos/ticket/713
> [2] http://trac.osgeo.org/geos/wiki/GSoC/CAPI_PrecisionModel
>
Any comments on this? Should I move ahead and post a complete patch?
Thanks,
Sandro
More information about the geos-devel
mailing list