From 207dc30f13ac103a653d8b69ea61f563d34d037d Mon Sep 17 00:00:00 2001 From: Sandro Santilli <strk@keybit.net> Date: Wed, 13 Oct 2004 18:39:39 +0000 Subject: [PATCH] Added a third argument to the buffer() function. git-svn-id: http://svn.osgeo.org/postgis/trunk@993 b70326c6-7e19-0410-871a-916f4a2858ee --- lwgeom/lwgeom_geos.c | 8 +++++--- lwgeom/lwgeom_geos_wrapper.cpp | 7 ++++--- lwgeom/lwpostgis.sql.in | 5 +++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lwgeom/lwgeom_geos.c b/lwgeom/lwgeom_geos.c index 9eb7de1b6..80c1df111 100644 --- a/lwgeom/lwgeom_geos.c +++ b/lwgeom/lwgeom_geos.c @@ -70,7 +70,7 @@ extern char *GEOSversion(); extern char *GEOSjtsport(); extern char GEOSisvalid(Geometry *g1); extern Geometry *GEOSIntersection(Geometry *g1, Geometry *g2); -extern Geometry *GEOSBuffer(Geometry *g1,double width); +extern Geometry *GEOSBuffer(Geometry *g1,double width, int quadsegs); extern Geometry *GEOSConvexHull(Geometry *g1); extern Geometry *GEOSDifference(Geometry *g1,Geometry *g2); extern Geometry *GEOSBoundary(Geometry *g1); @@ -552,6 +552,7 @@ Datum buffer(PG_FUNCTION_ARGS) double size; Geometry *g1,*g3; PG_LWGEOM *result; + int quadsegs = 8; // the default #ifdef PROFILE profstart(PROF_QRUN); @@ -559,13 +560,14 @@ Datum buffer(PG_FUNCTION_ARGS) geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); size = PG_GETARG_FLOAT8(1); + if ( PG_NARGS() > 2 ) quadsegs = PG_GETARG_INT32(3); initGEOS(MAXIMUM_ALIGNOF); #ifdef PROFILE profstart(PROF_P2G1); #endif - g1 = POSTGIS2GEOS(geom1 ); + g1 = POSTGIS2GEOS(geom1); #ifdef PROFILE profstop(PROF_P2G1); #endif @@ -573,7 +575,7 @@ Datum buffer(PG_FUNCTION_ARGS) #ifdef PROFILE profstart(PROF_GRUN); #endif - g3 = GEOSBuffer(g1,size); + g3 = GEOSBuffer(g1,size,quadsegs); #ifdef PROFILE profstop(PROF_GRUN); #endif diff --git a/lwgeom/lwgeom_geos_wrapper.cpp b/lwgeom/lwgeom_geos_wrapper.cpp index 8be873902..950e6efea 100644 --- a/lwgeom/lwgeom_geos_wrapper.cpp +++ b/lwgeom/lwgeom_geos_wrapper.cpp @@ -123,7 +123,7 @@ extern "C" int GEOSGeometryTypeId(Geometry *g1); extern "C" char *throw_exception(Geometry *g); extern "C" Geometry *GEOSIntersection(Geometry *g1,Geometry *g1); -extern "C" Geometry *GEOSBuffer(Geometry *g1,double width); +extern "C" Geometry *GEOSBuffer(Geometry *g1,double width,int quadsegs); extern "C" Geometry *GEOSConvexHull(Geometry *g1); extern "C" Geometry *GEOSDifference(Geometry *g1,Geometry *g2); extern "C" Geometry *GEOSBoundary(Geometry *g1); @@ -1113,11 +1113,12 @@ Geometry *GEOSIntersection(Geometry *g1,Geometry *g2) } } -Geometry *GEOSBuffer(Geometry *g1,double width) +Geometry * +GEOSBuffer(Geometry *g1, double width, int quadrantsegments) { try { - Geometry *g3 = g1->buffer(width); + Geometry *g3 = g1->buffer(width, quadrantsegments); return g3; } catch (GEOSException *ge) diff --git a/lwgeom/lwpostgis.sql.in b/lwgeom/lwpostgis.sql.in index 4d9abfd20..2f0b3586a 100644 --- a/lwgeom/lwpostgis.sql.in +++ b/lwgeom/lwpostgis.sql.in @@ -2857,6 +2857,11 @@ CREATEFUNCTION buffer(geometry,float8) RETURNS geometry AS '@MODULE_FILENAME@','buffer' LANGUAGE 'C' WITH (isstrict); + +CREATEFUNCTION buffer(geometry,float8,integer) + RETURNS geometry + AS '@MODULE_FILENAME@','buffer' + LANGUAGE 'C' WITH (isstrict); CREATEFUNCTION convexhull(geometry) RETURNS geometry -- 2.40.0