[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