[postgis-commits] svn - r3055 - trunk/lwgeom
postgis-commits at postgis.refractions.net
postgis-commits at postgis.refractions.net
Thu Oct 2 11:52:10 PDT 2008
Author: pramsey
Date: 2008-10-02 11:52:10 -0700 (Thu, 02 Oct 2008)
New Revision: 3055
Modified:
trunk/lwgeom/lwgeom_geos_c.c
Log:
Flip format to 'astyle --style=ansi --indent=tab=8' to make upcoming
changes more consistent, stylewise. (Can't stand the mixed styles anymore!)
Modified: trunk/lwgeom/lwgeom_geos_c.c
===================================================================
--- trunk/lwgeom/lwgeom_geos_c.c 2008-10-02 18:35:45 UTC (rev 3054)
+++ trunk/lwgeom/lwgeom_geos_c.c 2008-10-02 18:52:10 UTC (rev 3055)
@@ -90,8 +90,6 @@
/* PROTOTYPES end */
-
-
PG_FUNCTION_INFO_V1(postgis_geos_version);
Datum postgis_geos_version(PG_FUNCTION_ARGS)
{
@@ -103,8 +101,6 @@
PG_RETURN_POINTER(result);
}
-
-
#ifndef UNITE_USING_BUFFER
/*
* This is the final function for GeomUnion
@@ -128,7 +124,7 @@
static int call=1;
#endif
-#if POSTGIS_DEBUG_LEVEL >= 2
+#if POSTGIS_DEBUG_LEVEL >= 2
call++;
POSTGIS_DEBUGF(2, "GEOS incremental union (call %d)", call);
#endif
@@ -179,11 +175,11 @@
{
errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom));
}
-
+
g1 = POSTGIS2GEOS(pgis_geom);
POSTGIS_DEBUGF(3, "unite_garray(%d): adding geom %d to union (%s)",
- call, i, lwgeom_typename(TYPE_GETTYPE(geom->type)));
+ call, i, lwgeom_typename(TYPE_GETTYPE(geom->type)));
g2 = GEOSUnion(g1,geos_result);
if ( g2 == NULL )
@@ -215,12 +211,12 @@
#else /* def UNITE_USING_BUFFER */
/*
- * This is the final function for GeomUnion
- * aggregate. Will have as input an array of Geometries.
- * Builds a GEOMETRYCOLLECTION from input and call
- * GEOSBuffer(collection, 0) on the GEOS-converted
- * versions of it. Returns PGIS-converted version back.
- */
+* This is the final function for GeomUnion
+* aggregate. Will have as input an array of Geometries.
+* Builds a GEOMETRYCOLLECTION from input and call
+* GEOSBuffer(collection, 0) on the GEOS-converted
+* versions of it. Returns PGIS-converted version back.
+*/
PG_FUNCTION_INFO_V1(unite_garray);
Datum unite_garray(PG_FUNCTION_ARGS)
{
@@ -237,7 +233,7 @@
static int call=1;
#endif
-#if POSTGIS_DEBUG_LEVEL >= 2
+#if POSTGIS_DEBUG_LEVEL >= 2
call++;
POSTGIS_DEBUGF(2, "GEOS buffer union (call %d)", call);
#endif
@@ -263,12 +259,14 @@
/* We need geos here */
initGEOS(lwnotice, lwnotice);
- offset = 0; i=0;
- ngeoms = 0; npoints=0;
+ offset = 0;
+ i=0;
+ ngeoms = 0;
+ npoints=0;
- POSTGIS_DEBUGF(3, "Nelems %d, MAXGEOMSPOINST %d", nelems, MAXGEOMSPOINTS);
+ POSTGIS_DEBUGF(3, "Nelems %d, MAXGEOMSPOINST %d", nelems, MAXGEOMSPOINTS);
- while (!result)
+ while (!result)
{
PG_LWGEOM *geom = (PG_LWGEOM *)(ARR_DATA_PTR(array)+offset);
offset += INTALIGN(VARSIZE(geom));
@@ -290,16 +288,16 @@
POSTGIS_DEBUGF(4, "Loop %d, npoints: %d", i, npoints);
/*
- * Maximum count of geometry points reached
- * or end of them, collect and buffer(0).
- */
+ * Maximum count of geometry points reached
+ * or end of them, collect and buffer(0).
+ */
if ( (npoints>=MAXGEOMSPOINTS && ngeoms>1) || i==nelems)
{
POSTGIS_DEBUGF(4, " CHUNK (ngeoms:%d, npoints:%d, left:%d)",
- ngeoms, npoints, nelems-i);
+ ngeoms, npoints, nelems-i);
collection = GEOSMakeCollection(GEOS_GEOMETRYCOLLECTION,
- geoms, ngeoms);
+ geoms, ngeoms);
geos_result = GEOSBuffer(collection, 0, 0);
if ( geos_result == NULL )
@@ -312,14 +310,14 @@
POSTGIS_DEBUG(4, " Buffer() executed");
/*
- * If there are no other geoms in input
- * we've finished, otherwise we push
- * the result back on the input stack.
- */
+ * If there are no other geoms in input
+ * we've finished, otherwise we push
+ * the result back on the input stack.
+ */
if ( i == nelems )
{
POSTGIS_DEBUGF(4, " Final result points: %d",
- GEOSGetNumCoordinate(geos_result));
+ GEOSGetNumCoordinate(geos_result));
GEOSSetSRID(geos_result, SRID);
result = GEOS2POSTGIS(geos_result, is3d);
@@ -376,7 +374,7 @@
geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
is3d = ( TYPE_HASZ(geom1->type) ) ||
- ( TYPE_HASZ(geom2->type) );
+ ( TYPE_HASZ(geom2->type) );
SRID = pglwgeom_getSRID(geom1);
errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2));
@@ -476,7 +474,7 @@
geom2 = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
is3d = ( TYPE_HASZ(geom1->type) ) ||
- ( TYPE_HASZ(geom2->type) );
+ ( TYPE_HASZ(geom2->type) );
SRID = pglwgeom_getSRID(geom1);
errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2));
@@ -726,7 +724,7 @@
}
-#if POSTGIS_GEOS_VERSION >= 30
+#if POSTGIS_GEOS_VERSION >= 30
PG_FUNCTION_INFO_V1(topologypreservesimplify);
Datum topologypreservesimplify(PG_FUNCTION_ARGS)
@@ -899,7 +897,7 @@
geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
is3d = ( TYPE_HASZ(geom1->type) ) ||
- ( TYPE_HASZ(geom2->type) );
+ ( TYPE_HASZ(geom2->type) );
SRID = pglwgeom_getSRID(geom1);
errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2));
@@ -1015,7 +1013,7 @@
geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
is3d = ( TYPE_HASZ(geom1->type) ) ||
- ( TYPE_HASZ(geom2->type) );
+ ( TYPE_HASZ(geom2->type) );
SRID = pglwgeom_getSRID(geom1);
errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2));
@@ -1053,7 +1051,7 @@
PG_RETURN_NULL(); /* never get here */
}
- POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ;
+ POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ;
GEOSSetSRID(g3, SRID);
@@ -1197,7 +1195,7 @@
{
GEOSGeom_destroy(geosgeom);
elog(ERROR,"GEOS getCentroid() threw an error!");
- PG_RETURN_NULL();
+ PG_RETURN_NULL();
}
GEOSSetSRID(geosresult, pglwgeom_getSRID(geom));
@@ -1214,7 +1212,7 @@
GEOSGeom_destroy(geosgeom);
GEOSGeom_destroy(geosresult);
elog(ERROR,"Error in GEOS-PGIS conversion");
- PG_RETURN_NULL();
+ PG_RETURN_NULL();
}
GEOSGeom_destroy(geosgeom);
GEOSGeom_destroy(geosresult);
@@ -1336,7 +1334,7 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmax < box1.xmin ) PG_RETURN_BOOL(FALSE);
if ( box2.xmin > box1.xmax ) PG_RETURN_BOOL(FALSE);
@@ -1396,11 +1394,11 @@
PG_LWGEOM *geom2;
GEOSGeom g1,g2;
BOX2DFLOAT4 box1, box2;
- int type1, type2;
- LWGEOM *lwgeom;
- LWPOINT *point;
- RTREE_POLY_CACHE *poly_cache;
- MemoryContext old_context;
+ int type1, type2;
+ LWGEOM *lwgeom;
+ LWPOINT *point;
+ RTREE_POLY_CACHE *poly_cache;
+ MemoryContext old_context;
bool result;
#ifdef PROFILE
@@ -1413,82 +1411,82 @@
errorIfGeometryCollection(geom1,geom2);
errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2));
- POSTGIS_DEBUG(3, "contains called.");
+ POSTGIS_DEBUG(3, "contains called.");
- /*
- ** short-circuit 1: if geom2 bounding box is not completely inside
- ** geom1 bounding box we can prematurely return FALSE.
+ /*
+ ** short-circuit 1: if geom2 bounding box is not completely inside
+ ** geom1 bounding box we can prematurely return FALSE.
** Do the test IFF BOUNDING BOX AVAILABLE.
- */
- if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ */
+ if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( ( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) ||
- ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ) )
+ ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ) )
{
- PG_RETURN_BOOL(FALSE);
+ PG_RETURN_BOOL(FALSE);
}
}
- /*
- ** short-circuit 2: if geom2 is a point and geom1 is a polygon
- ** call the point-in-polygon function.
- */
- type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
- type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
- if((type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE) && type2 == POINTTYPE)
- {
- POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
- lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
- point = lwpoint_deserialize(SERIALIZED_FORM(geom2));
+ /*
+ ** short-circuit 2: if geom2 is a point and geom1 is a polygon
+ ** call the point-in-polygon function.
+ */
+ type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
+ type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
+ if ((type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE) && type2 == POINTTYPE)
+ {
+ POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
+ lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
+ point = lwpoint_deserialize(SERIALIZED_FORM(geom2));
- POSTGIS_DEBUGF(3, "Precall point_in_multipolygon_rtree %p, %p", lwgeom, point);
+ POSTGIS_DEBUGF(3, "Precall point_in_multipolygon_rtree %p, %p", lwgeom, point);
- /*
- * Switch the context to the function-scope context,
- * retrieve the appropriate cache object, cache it for
- * future use, then switch back to the local context.
- */
- old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
- poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom1), fcinfo->flinfo->fn_extra);
- fcinfo->flinfo->fn_extra = poly_cache;
- MemoryContextSwitchTo(old_context);
+ /*
+ * Switch the context to the function-scope context,
+ * retrieve the appropriate cache object, cache it for
+ * future use, then switch back to the local context.
+ */
+ old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
+ poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom1), fcinfo->flinfo->fn_extra);
+ fcinfo->flinfo->fn_extra = poly_cache;
+ MemoryContextSwitchTo(old_context);
- if( poly_cache->ringIndices )
+ if ( poly_cache->ringIndices )
{
result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
}
- else if ( type1 == POLYGONTYPE )
+ else if ( type1 == POLYGONTYPE )
{
result = point_in_polygon((LWPOLY*)lwgeom, point);
}
- else if ( type1 == MULTIPOLYGONTYPE )
+ else if ( type1 == MULTIPOLYGONTYPE )
{
result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
}
- else {
+ else
+ {
/* Gulp! Should not be here... */
elog(ERROR,"Type isn't poly or multipoly!");
- PG_RETURN_NULL();
+ PG_RETURN_NULL();
}
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- lwgeom_release((LWGEOM *)lwgeom);
- lwgeom_release((LWGEOM *)point);
- if( result == 1 ) /* completely inside */
+ PG_FREE_IF_COPY(geom1, 0);
+ PG_FREE_IF_COPY(geom2, 1);
+ lwgeom_release((LWGEOM *)lwgeom);
+ lwgeom_release((LWGEOM *)point);
+ if ( result == 1 ) /* completely inside */
{
PG_RETURN_BOOL(TRUE);
- }
- else
+ } else
{
PG_RETURN_BOOL(FALSE);
}
- }
- else
- {
- POSTGIS_DEBUGF(3, "Contains: type1: %d, type2: %d", type1, type2);
- }
-
+ }
+ else
+ {
+ POSTGIS_DEBUGF(3, "Contains: type1: %d, type2: %d", type1, type2);
+ }
+
initGEOS(lwnotice, lwnotice);
#ifdef PROFILE
@@ -1536,7 +1534,7 @@
/*
- * Described at
+ * Described at
* http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html
*/
PG_FUNCTION_INFO_V1(covers);
@@ -1547,13 +1545,13 @@
GEOSGeom g1,g2;
bool result;
BOX2DFLOAT4 box1, box2;
- int type1, type2;
- LWGEOM *lwgeom;
- /* LWMPOLY *mpoly; */
- LWPOINT *point;
- RTREE_POLY_CACHE *poly_cache;
- MemoryContext old_context;
- char *patt = "******FF*";
+ int type1, type2;
+ LWGEOM *lwgeom;
+ /* LWMPOLY *mpoly; */
+ LWPOINT *point;
+ RTREE_POLY_CACHE *poly_cache;
+ MemoryContext old_context;
+ char *patt = "******FF*";
#ifdef PROFILE
profstart(PROF_QRUN);
@@ -1571,73 +1569,73 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmin < box1.xmin ) PG_RETURN_BOOL(FALSE);
if ( box2.xmax > box1.xmax ) PG_RETURN_BOOL(FALSE);
if ( box2.ymin < box1.ymin ) PG_RETURN_BOOL(FALSE);
if ( box2.ymax > box1.ymax ) PG_RETURN_BOOL(FALSE);
}
- /*
- * short-circuit 2: if geom2 is a point and geom1 is a polygon
- * call the point-in-polygon function.
- */
- type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
- type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
- if((type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE) && type2 == POINTTYPE)
- {
- POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
+ /*
+ * short-circuit 2: if geom2 is a point and geom1 is a polygon
+ * call the point-in-polygon function.
+ */
+ type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
+ type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
+ if ((type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE) && type2 == POINTTYPE)
+ {
+ POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
- lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
- point = lwpoint_deserialize(SERIALIZED_FORM(geom2));
+ lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
+ point = lwpoint_deserialize(SERIALIZED_FORM(geom2));
- POSTGIS_DEBUGF(3, "Precall point_in_multipolygon_rtree %p, %p", lwgeom, point);
+ POSTGIS_DEBUGF(3, "Precall point_in_multipolygon_rtree %p, %p", lwgeom, point);
- /*
- * Switch the context to the function-scope context,
- * retrieve the appropriate cache object, cache it for
- * future use, then switch back to the local context.
- */
- old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
- poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom1), fcinfo->flinfo->fn_extra);
- fcinfo->flinfo->fn_extra = poly_cache;
- MemoryContextSwitchTo(old_context);
+ /*
+ * Switch the context to the function-scope context,
+ * retrieve the appropriate cache object, cache it for
+ * future use, then switch back to the local context.
+ */
+ old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
+ poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom1), fcinfo->flinfo->fn_extra);
+ fcinfo->flinfo->fn_extra = poly_cache;
+ MemoryContextSwitchTo(old_context);
- if( poly_cache->ringIndices )
- {
- result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
- }
- else if ( type1 == POLYGONTYPE )
- {
- result = point_in_polygon((LWPOLY*)lwgeom, point);
- }
- else if ( type1 == MULTIPOLYGONTYPE )
- {
- result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
- }
- else {
- /* Gulp! Should not be here... */
- elog(ERROR,"Type isn't poly or multipoly!");
- PG_RETURN_NULL();
- }
+ if ( poly_cache->ringIndices )
+ {
+ result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
+ }
+ else if ( type1 == POLYGONTYPE )
+ {
+ result = point_in_polygon((LWPOLY*)lwgeom, point);
+ }
+ else if ( type1 == MULTIPOLYGONTYPE )
+ {
+ result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
+ }
+ else
+ {
+ /* Gulp! Should not be here... */
+ elog(ERROR,"Type isn't poly or multipoly!");
+ PG_RETURN_NULL();
+ }
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- lwgeom_release((LWGEOM *)lwgeom);
- lwgeom_release((LWGEOM *)point);
- if( result != -1 ) /* not outside */
- {
- PG_RETURN_BOOL(TRUE);
- }
- else
- {
- PG_RETURN_BOOL(FALSE);
- }
- }
- else
- {
- POSTGIS_DEBUGF(3, "Covers: type1: %d, type2: %d", type1, type2);
- }
+ PG_FREE_IF_COPY(geom1, 0);
+ PG_FREE_IF_COPY(geom2, 1);
+ lwgeom_release((LWGEOM *)lwgeom);
+ lwgeom_release((LWGEOM *)point);
+ if ( result != -1 ) /* not outside */
+ {
+ PG_RETURN_BOOL(TRUE);
+ } else
+ {
+ PG_RETURN_BOOL(FALSE);
+ }
+ }
+ else
+ {
+ POSTGIS_DEBUGF(3, "Covers: type1: %d, type2: %d", type1, type2);
+ }
initGEOS(lwnotice, lwnotice);
@@ -1692,11 +1690,11 @@
GEOSGeom g1,g2;
bool result;
BOX2DFLOAT4 box1, box2;
- LWGEOM *lwgeom;
- LWPOINT *point;
- int type1, type2;
- MemoryContext old_context;
- RTREE_POLY_CACHE *poly_cache;
+ LWGEOM *lwgeom;
+ LWPOINT *point;
+ int type1, type2;
+ MemoryContext old_context;
+ RTREE_POLY_CACHE *poly_cache;
#ifdef PROFILE
profstart(PROF_QRUN);
@@ -1714,67 +1712,67 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box1.xmin < box2.xmin ) PG_RETURN_BOOL(FALSE);
if ( box1.xmax > box2.xmax ) PG_RETURN_BOOL(FALSE);
if ( box1.ymin < box2.ymin ) PG_RETURN_BOOL(FALSE);
if ( box1.ymax > box2.ymax ) PG_RETURN_BOOL(FALSE);
}
- /*
- * short-circuit 2: if geom1 is a point and geom2 is a polygon
- * call the point-in-polygon function.
- */
- type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
- type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
- if((type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE) && type1 == POINTTYPE)
- {
- POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
+ /*
+ * short-circuit 2: if geom1 is a point and geom2 is a polygon
+ * call the point-in-polygon function.
+ */
+ type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
+ type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
+ if ((type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE) && type1 == POINTTYPE)
+ {
+ POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
- point = lwpoint_deserialize(SERIALIZED_FORM(geom1));
- lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom2));
+ point = lwpoint_deserialize(SERIALIZED_FORM(geom1));
+ lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom2));
- /*
- * Switch the context to the function-scope context,
- * retrieve the appropriate cache object, cache it for
- * future use, then switch back to the local context.
- */
- old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
- poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom2), fcinfo->flinfo->fn_extra);
- fcinfo->flinfo->fn_extra = poly_cache;
- MemoryContextSwitchTo(old_context);
+ /*
+ * Switch the context to the function-scope context,
+ * retrieve the appropriate cache object, cache it for
+ * future use, then switch back to the local context.
+ */
+ old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
+ poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom2), fcinfo->flinfo->fn_extra);
+ fcinfo->flinfo->fn_extra = poly_cache;
+ MemoryContextSwitchTo(old_context);
- if( poly_cache->ringIndices )
- {
- result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
- }
- else if ( type2 == POLYGONTYPE )
- {
- result = point_in_polygon((LWPOLY*)lwgeom, point);
- }
- else if ( type2 == MULTIPOLYGONTYPE )
- {
- result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
- }
- else {
- /* Gulp! Should not be here... */
- elog(ERROR,"Type isn't poly or multipoly!");
- PG_RETURN_NULL();
- }
+ if ( poly_cache->ringIndices )
+ {
+ result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
+ }
+ else if ( type2 == POLYGONTYPE )
+ {
+ result = point_in_polygon((LWPOLY*)lwgeom, point);
+ }
+ else if ( type2 == MULTIPOLYGONTYPE )
+ {
+ result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
+ }
+ else
+ {
+ /* Gulp! Should not be here... */
+ elog(ERROR,"Type isn't poly or multipoly!");
+ PG_RETURN_NULL();
+ }
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- lwgeom_release((LWGEOM *)lwgeom);
- lwgeom_release((LWGEOM *)point);
- if( result == 1 ) /* completely inside */
- {
- PG_RETURN_BOOL(TRUE);
- }
- else
- {
- PG_RETURN_BOOL(FALSE);
- }
- }
+ PG_FREE_IF_COPY(geom1, 0);
+ PG_FREE_IF_COPY(geom2, 1);
+ lwgeom_release((LWGEOM *)lwgeom);
+ lwgeom_release((LWGEOM *)point);
+ if ( result == 1 ) /* completely inside */
+ {
+ PG_RETURN_BOOL(TRUE);
+ } else
+ {
+ PG_RETURN_BOOL(FALSE);
+ }
+ }
initGEOS(lwnotice, lwnotice);
@@ -1834,12 +1832,12 @@
GEOSGeom g1,g2;
bool result;
BOX2DFLOAT4 box1, box2;
- LWGEOM *lwgeom;
- LWPOINT *point;
- int type1, type2;
- MemoryContext old_context;
- RTREE_POLY_CACHE *poly_cache;
- char *patt = "**F**F***";
+ LWGEOM *lwgeom;
+ LWPOINT *point;
+ int type1, type2;
+ MemoryContext old_context;
+ RTREE_POLY_CACHE *poly_cache;
+ char *patt = "**F**F***";
#ifdef PROFILE
profstart(PROF_QRUN);
@@ -1857,70 +1855,70 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box1.xmin < box2.xmin ) PG_RETURN_BOOL(FALSE);
if ( box1.xmax > box2.xmax ) PG_RETURN_BOOL(FALSE);
if ( box1.ymin < box2.ymin ) PG_RETURN_BOOL(FALSE);
if ( box1.ymax > box2.ymax ) PG_RETURN_BOOL(FALSE);
- POSTGIS_DEBUG(3, "bounding box short-circuit missed.");
+ POSTGIS_DEBUG(3, "bounding box short-circuit missed.");
}
- /*
- * short-circuit 2: if geom1 is a point and geom2 is a polygon
- * call the point-in-polygon function.
- */
- type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
- type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
- if((type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE) && type1 == POINTTYPE)
- {
- POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
+ /*
+ * short-circuit 2: if geom1 is a point and geom2 is a polygon
+ * call the point-in-polygon function.
+ */
+ type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
+ type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
+ if ((type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE) && type1 == POINTTYPE)
+ {
+ POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
- point = lwpoint_deserialize(SERIALIZED_FORM(geom1));
- lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom2));
+ point = lwpoint_deserialize(SERIALIZED_FORM(geom1));
+ lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom2));
- /*
- * Switch the context to the function-scope context,
- * retrieve the appropriate cache object, cache it for
- * future use, then switch back to the local context.
- */
- old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
- poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom2), fcinfo->flinfo->fn_extra);
- fcinfo->flinfo->fn_extra = poly_cache;
- MemoryContextSwitchTo(old_context);
+ /*
+ * Switch the context to the function-scope context,
+ * retrieve the appropriate cache object, cache it for
+ * future use, then switch back to the local context.
+ */
+ old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
+ poly_cache = retrieveCache(lwgeom, SERIALIZED_FORM(geom2), fcinfo->flinfo->fn_extra);
+ fcinfo->flinfo->fn_extra = poly_cache;
+ MemoryContextSwitchTo(old_context);
- if( poly_cache->ringIndices )
- {
- result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
- }
- else if ( type2 == POLYGONTYPE )
- {
- result = point_in_polygon((LWPOLY*)lwgeom, point);
- }
- else if ( type2 == MULTIPOLYGONTYPE )
- {
- result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
- }
- else {
- /* Gulp! Should not be here... */
- elog(ERROR,"Type isn't poly or multipoly!");
- PG_RETURN_NULL();
- }
-
- PG_FREE_IF_COPY(geom1, 0);
- PG_FREE_IF_COPY(geom2, 1);
- lwgeom_release((LWGEOM *)lwgeom);
- lwgeom_release((LWGEOM *)point);
- if( result != -1 ) /* not outside */
- {
- PG_RETURN_BOOL(TRUE);
- }
- else
- {
- PG_RETURN_BOOL(FALSE);
- }
- }
+ if ( poly_cache->ringIndices )
+ {
+ result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
+ }
+ else if ( type2 == POLYGONTYPE )
+ {
+ result = point_in_polygon((LWPOLY*)lwgeom, point);
+ }
+ else if ( type2 == MULTIPOLYGONTYPE )
+ {
+ result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
+ }
+ else
+ {
+ /* Gulp! Should not be here... */
+ elog(ERROR,"Type isn't poly or multipoly!");
+ PG_RETURN_NULL();
+ }
+ PG_FREE_IF_COPY(geom1, 0);
+ PG_FREE_IF_COPY(geom2, 1);
+ lwgeom_release((LWGEOM *)lwgeom);
+ lwgeom_release((LWGEOM *)point);
+ if ( result != -1 ) /* not outside */
+ {
+ PG_RETURN_BOOL(TRUE);
+ } else
+ {
+ PG_RETURN_BOOL(FALSE);
+ }
+ }
+
initGEOS(lwnotice, lwnotice);
#ifdef PROFILE
@@ -1993,7 +1991,7 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmax < box1.xmin ) PG_RETURN_BOOL(FALSE);
if ( box2.xmin > box1.xmax ) PG_RETURN_BOOL(FALSE);
@@ -2059,8 +2057,8 @@
int type1, type2, polytype;
LWPOINT *point;
LWGEOM *lwgeom;
- MemoryContext old_context;
- RTREE_POLY_CACHE *poly_cache;
+ MemoryContext old_context;
+ RTREE_POLY_CACHE *poly_cache;
#ifdef PROFILE
profstart(PROF_QRUN);
@@ -2078,7 +2076,7 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmax < box1.xmin ) PG_RETURN_BOOL(FALSE);
if ( box2.xmin > box1.xmax ) PG_RETURN_BOOL(FALSE);
@@ -2092,59 +2090,63 @@
*/
type1 = lwgeom_getType((uchar)SERIALIZED_FORM(geom1)[0]);
type2 = lwgeom_getType((uchar)SERIALIZED_FORM(geom2)[0]);
- if( (type1 == POINTTYPE && (type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE)) ||
- (type2 == POINTTYPE && (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE)))
+ if ( (type1 == POINTTYPE && (type2 == POLYGONTYPE || type2 == MULTIPOLYGONTYPE)) ||
+ (type2 == POINTTYPE && (type1 == POLYGONTYPE || type1 == MULTIPOLYGONTYPE)))
{
POSTGIS_DEBUG(3, "Point in Polygon test requested...short-circuiting.");
- if( type1 == POINTTYPE ) {
- point = lwpoint_deserialize(SERIALIZED_FORM(geom1));
- lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom2));
+ if ( type1 == POINTTYPE )
+ {
+ point = lwpoint_deserialize(SERIALIZED_FORM(geom1));
+ lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom2));
serialized_poly = SERIALIZED_FORM(geom2);
polytype = type2;
- } else {
- point = lwpoint_deserialize(SERIALIZED_FORM(geom2));
- lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
+ }
+ else
+ {
+ point = lwpoint_deserialize(SERIALIZED_FORM(geom2));
+ lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1));
serialized_poly = SERIALIZED_FORM(geom1);
polytype = type1;
}
- /*
- * Switch the context to the function-scope context,
- * retrieve the appropriate cache object, cache it for
- * future use, then switch back to the local context.
- */
- old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
- poly_cache = retrieveCache(lwgeom, serialized_poly, fcinfo->flinfo->fn_extra);
- fcinfo->flinfo->fn_extra = poly_cache;
- MemoryContextSwitchTo(old_context);
+ /*
+ * Switch the context to the function-scope context,
+ * retrieve the appropriate cache object, cache it for
+ * future use, then switch back to the local context.
+ */
+ old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
+ poly_cache = retrieveCache(lwgeom, serialized_poly, fcinfo->flinfo->fn_extra);
+ fcinfo->flinfo->fn_extra = poly_cache;
+ MemoryContextSwitchTo(old_context);
- if( poly_cache->ringIndices )
+ if ( poly_cache->ringIndices )
{
result = point_in_multipolygon_rtree(poly_cache->ringIndices, poly_cache->polyCount, poly_cache->ringCount, point);
}
- else if ( polytype == POLYGONTYPE )
+ else if ( polytype == POLYGONTYPE )
{
result = point_in_polygon((LWPOLY*)lwgeom, point);
}
- else if ( polytype == MULTIPOLYGONTYPE )
+ else if ( polytype == MULTIPOLYGONTYPE )
{
result = point_in_multipolygon((LWMPOLY*)lwgeom, point);
}
- else {
+ else
+ {
/* Gulp! Should not be here... */
elog(ERROR,"Type isn't poly or multipoly!");
- PG_RETURN_NULL();
+ PG_RETURN_NULL();
}
PG_FREE_IF_COPY(geom1, 0);
PG_FREE_IF_COPY(geom2, 1);
lwgeom_release((LWGEOM *)lwgeom);
lwgeom_release((LWGEOM *)point);
- if( result != -1 ) /* not outside */
+ if ( result != -1 ) /* not outside */
{
PG_RETURN_BOOL(TRUE);
- }
- else {
+ } else
+ {
PG_RETURN_BOOL(FALSE);
}
}
@@ -2218,7 +2220,7 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmax < box1.xmin ) PG_RETURN_BOOL(FALSE);
if ( box2.xmin > box1.xmax ) PG_RETURN_BOOL(FALSE);
@@ -2297,7 +2299,7 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmax < box1.xmin ) PG_RETURN_BOOL(TRUE);
if ( box2.xmin > box1.xmax ) PG_RETURN_BOOL(TRUE);
@@ -2388,14 +2390,15 @@
#endif
patt = DatumGetCString(DirectFunctionCall1(textout,
- PointerGetDatum(PG_GETARG_DATUM(2))));
+ PointerGetDatum(PG_GETARG_DATUM(2))));
- /*
- ** Need to make sure 't' and 'f' are upper-case before handing to GEOS
- */
- for( i = 0; i < strlen(patt); i++ ) {
- if( patt[i] == 't' ) patt[i] = 'T';
- if( patt[i] == 'f' ) patt[i] = 'F';
+ /*
+ ** Need to make sure 't' and 'f' are upper-case before handing to GEOS
+ */
+ for ( i = 0; i < strlen(patt); i++ )
+ {
+ if ( patt[i] == 't' ) patt[i] = 'T';
+ if ( patt[i] == 'f' ) patt[i] = 'F';
}
#ifdef PROFILE
@@ -2468,7 +2471,7 @@
profstop(PROF_P2G2);
#endif
- POSTGIS_DEBUG(3, "constructed geometries ");
+ POSTGIS_DEBUG(3, "constructed geometries ");
if ((g1==NULL) || (g2 == NULL))
elog(NOTICE,"g1 or g2 are null");
@@ -2490,7 +2493,7 @@
profstop(PROF_GRUN);
#endif
- POSTGIS_DEBUG(3, "finished relate()");
+ POSTGIS_DEBUG(3, "finished relate()");
GEOSGeom_destroy(g1);
GEOSGeom_destroy(g2);
@@ -2548,7 +2551,7 @@
* Do the test IFF BOUNDING BOX AVAILABLE.
*/
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if ( box2.xmax != box1.xmax ) PG_RETURN_BOOL(FALSE);
if ( box2.xmin != box1.xmin ) PG_RETURN_BOOL(FALSE);
@@ -2696,7 +2699,7 @@
if (result == 2)
{
elog(ERROR,"GEOS isring() threw an error!");
- PG_RETURN_NULL();
+ PG_RETURN_NULL();
}
#ifdef PROFILE
@@ -2758,7 +2761,7 @@
if ( is_worth_caching_pglwgeom_bbox(pglwgeom) )
{
ret = (PG_LWGEOM *)DatumGetPointer(DirectFunctionCall1(
- LWGEOM_addBBOX, PointerGetDatum(pglwgeom)));
+ LWGEOM_addBBOX, PointerGetDatum(pglwgeom)));
lwfree(pglwgeom);
}
else
@@ -2783,7 +2786,7 @@
LWDEBUG(2, "ptarray_fromGEOSCoordSeq called");
if ( ! GEOSCoordSeq_getSize(cs, &size) )
- lwerror("Exception thrown");
+ lwerror("Exception thrown");
LWDEBUGF(4, " GEOSCoordSeq size: %d", size);
@@ -2848,62 +2851,62 @@
LWGEOM **geoms;
unsigned int i, ngeoms;
- case GEOS_POINT:
- LWDEBUG(4, "lwgeom_from_geometry: it's a Point");
+ case GEOS_POINT:
+ LWDEBUG(4, "lwgeom_from_geometry: it's a Point");
- cs = GEOSGeom_getCoordSeq(geom);
- pa = ptarray_from_GEOSCoordSeq(cs, want3d);
- return (LWGEOM *)lwpoint_construct(SRID, NULL, pa);
-
- case GEOS_LINESTRING:
- case GEOS_LINEARRING:
- LWDEBUG(4, "lwgeom_from_geometry: it's a LineString or LinearRing");
+ cs = GEOSGeom_getCoordSeq(geom);
+ pa = ptarray_from_GEOSCoordSeq(cs, want3d);
+ return (LWGEOM *)lwpoint_construct(SRID, NULL, pa);
- cs = GEOSGeom_getCoordSeq(geom);
- pa = ptarray_from_GEOSCoordSeq(cs, want3d);
- return (LWGEOM *)lwline_construct(SRID, NULL, pa);
+ case GEOS_LINESTRING:
+ case GEOS_LINEARRING:
+ LWDEBUG(4, "lwgeom_from_geometry: it's a LineString or LinearRing");
- case GEOS_POLYGON:
- LWDEBUG(4, "lwgeom_from_geometry: it's a Polygon");
+ cs = GEOSGeom_getCoordSeq(geom);
+ pa = ptarray_from_GEOSCoordSeq(cs, want3d);
+ return (LWGEOM *)lwline_construct(SRID, NULL, pa);
- ngeoms = GEOSGetNumInteriorRings(geom);
- ppaa = lwalloc(sizeof(POINTARRAY *)*(ngeoms+1));
- g = GEOSGetExteriorRing(geom);
+ case GEOS_POLYGON:
+ LWDEBUG(4, "lwgeom_from_geometry: it's a Polygon");
+
+ ngeoms = GEOSGetNumInteriorRings(geom);
+ ppaa = lwalloc(sizeof(POINTARRAY *)*(ngeoms+1));
+ g = GEOSGetExteriorRing(geom);
+ cs = GEOSGeom_getCoordSeq(g);
+ ppaa[0] = ptarray_from_GEOSCoordSeq(cs, want3d);
+ for (i=0; i<ngeoms; i++)
+ {
+ g = GEOSGetInteriorRingN(geom, i);
cs = GEOSGeom_getCoordSeq(g);
- ppaa[0] = ptarray_from_GEOSCoordSeq(cs, want3d);
- for (i=0; i<ngeoms; i++)
- {
- g = GEOSGetInteriorRingN(geom, i);
- cs = GEOSGeom_getCoordSeq(g);
- ppaa[i+1] = ptarray_from_GEOSCoordSeq(cs,
- want3d);
- }
- return (LWGEOM *)lwpoly_construct(SRID, NULL,
- ngeoms+1, ppaa);
+ ppaa[i+1] = ptarray_from_GEOSCoordSeq(cs,
+ want3d);
+ }
+ return (LWGEOM *)lwpoly_construct(SRID, NULL,
+ ngeoms+1, ppaa);
- case GEOS_MULTIPOINT:
- case GEOS_MULTILINESTRING:
- case GEOS_MULTIPOLYGON:
- case GEOS_GEOMETRYCOLLECTION:
- LWDEBUG(4, "lwgeom_from_geometry: it's a Collection or Multi");
+ case GEOS_MULTIPOINT:
+ case GEOS_MULTILINESTRING:
+ case GEOS_MULTIPOLYGON:
+ case GEOS_GEOMETRYCOLLECTION:
+ LWDEBUG(4, "lwgeom_from_geometry: it's a Collection or Multi");
- ngeoms = GEOSGetNumGeometries(geom);
- geoms = NULL;
- if ( ngeoms )
+ ngeoms = GEOSGetNumGeometries(geom);
+ geoms = NULL;
+ if ( ngeoms )
+ {
+ geoms = lwalloc(sizeof(LWGEOM *)*ngeoms);
+ for (i=0; i<ngeoms; i++)
{
- geoms = lwalloc(sizeof(LWGEOM *)*ngeoms);
- for (i=0; i<ngeoms; i++)
- {
- g = GEOSGetGeometryN(geom, i);
- geoms[i] = GEOS2LWGEOM(g, want3d);
- }
+ g = GEOSGetGeometryN(geom, i);
+ geoms[i] = GEOS2LWGEOM(g, want3d);
}
- return (LWGEOM *)lwcollection_construct(type,
- SRID, NULL, ngeoms, geoms);
+ }
+ return (LWGEOM *)lwcollection_construct(type,
+ SRID, NULL, ngeoms, geoms);
- default:
- lwerror("GEOS2LWGEOM: unknown geometry type: %d", type);
- return NULL;
+ default:
+ lwerror("GEOS2LWGEOM: unknown geometry type: %d", type);
+ return NULL;
}
@@ -2923,7 +2926,7 @@
return NULL;
}
- LWDEBUGF(4, "GEOS2POSTGIS: GEOS2LWGEOM returned a %s", lwgeom_summary(lwgeom, 0));
+ LWDEBUGF(4, "GEOS2POSTGIS: GEOS2LWGEOM returned a %s", lwgeom_summary(lwgeom, 0));
if ( is_worth_caching_lwgeom_bbox(lwgeom) )
{
@@ -2944,7 +2947,7 @@
GEOSGeom LWGEOM2GEOS(LWGEOM *);
-GEOSGeom
+GEOSGeom
LWGEOM2GEOS(LWGEOM *lwgeom)
{
size_t size;
@@ -2956,7 +2959,7 @@
return geom;
}
-GEOSGeom
+GEOSGeom
POSTGIS2GEOS(PG_LWGEOM *pglwgeom)
{
size_t size;
@@ -2970,7 +2973,8 @@
}
geom = GEOSGeomFromWKB_buf(wkb, size);
lwfree(wkb);
- if ( ! geom ) {
+ if ( ! geom )
+ {
lwerror("POSTGIS2GEOS conversion failed");
}
@@ -3020,29 +3024,29 @@
GEOSCoordSeq sq;
GEOSGeom g, shell, *geoms;
/*
- LWGEOM *tmp;
+ LWGEOM *tmp;
*/
unsigned int ngeoms, i;
int type = 0;
int geostype;
-#if POSTGIS_DEBUG_LEVEL >= 4
+#if POSTGIS_DEBUG_LEVEL >= 4
char *wkt;
#endif
LWDEBUGF(4, "LWGEOM2GEOS got a %s", lwgeom_typename(type));
- if(has_arc(lwgeom))
- {
- LWDEBUG(3, "LWGEOM2GEOS_c: arced geometry found.");
+ if (has_arc(lwgeom))
+ {
+ LWDEBUG(3, "LWGEOM2GEOS_c: arced geometry found.");
lwerror("Exception in LWGEOM2GEOS: curved geometry not supported.");
/*
- tmp = lwgeom;
- lwgeom = lwgeom_segmentize(tmp, 32);
- LWDEBUGF(3, "LWGEOM2GEOM_c: was %p, is %p", tmp, lwgeom);
+ tmp = lwgeom;
+ lwgeom = lwgeom_segmentize(tmp, 32);
+ LWDEBUGF(3, "LWGEOM2GEOM_c: was %p, is %p", tmp, lwgeom);
*/
- }
- type = TYPE_GETTYPE(lwgeom->type);
+ }
+ type = TYPE_GETTYPE(lwgeom->type);
switch (type)
{
LWPOINT *lwp;
@@ -3050,78 +3054,78 @@
LWLINE *lwl;
LWCOLLECTION *lwc;
- case POINTTYPE:
- lwp = (LWPOINT *)lwgeom;
- sq = ptarray_to_GEOSCoordSeq(lwp->point);
- g = GEOSGeom_createPoint(sq);
- if ( ! g ) lwerror("Exception in LWGEOM2GEOS");
- break;
- case LINETYPE:
- lwl = (LWLINE *)lwgeom;
- sq = ptarray_to_GEOSCoordSeq(lwl->points);
- g = GEOSGeom_createLineString(sq);
- if ( ! g ) lwerror("Exception in LWGEOM2GEOS");
- break;
+ case POINTTYPE:
+ lwp = (LWPOINT *)lwgeom;
+ sq = ptarray_to_GEOSCoordSeq(lwp->point);
+ g = GEOSGeom_createPoint(sq);
+ if ( ! g ) lwerror("Exception in LWGEOM2GEOS");
+ break;
+ case LINETYPE:
+ lwl = (LWLINE *)lwgeom;
+ sq = ptarray_to_GEOSCoordSeq(lwl->points);
+ g = GEOSGeom_createLineString(sq);
+ if ( ! g ) lwerror("Exception in LWGEOM2GEOS");
+ break;
- case POLYGONTYPE:
- lwpoly = (LWPOLY *)lwgeom;
- sq = ptarray_to_GEOSCoordSeq(lwpoly->rings[0]);
- shell = GEOSGeom_createLinearRing(sq);
- if ( ! shell ) return NULL;
- /*lwerror("LWGEOM2GEOS: exception during polygon shell conversion"); */
- ngeoms = lwpoly->nrings-1;
- geoms = malloc(sizeof(GEOSGeom)*ngeoms);
- for (i=1; i<lwpoly->nrings; ++i)
- {
- sq = ptarray_to_GEOSCoordSeq(lwpoly->rings[i]);
- geoms[i-1] = GEOSGeom_createLinearRing(sq);
- if ( ! geoms[i-1] ) return NULL;
- /*lwerror("LWGEOM2GEOS: exception during polygon hole conversion"); */
- }
- g = GEOSGeom_createPolygon(shell, geoms, ngeoms);
- if ( ! g ) return NULL;
- free(geoms);
- break;
- case MULTIPOINTTYPE:
- case MULTILINETYPE:
- case MULTIPOLYGONTYPE:
- case COLLECTIONTYPE:
- if ( type == MULTIPOINTTYPE )
- geostype = GEOS_MULTIPOINT;
- else if ( type == MULTILINETYPE )
- geostype = GEOS_MULTILINESTRING;
- else if ( type == MULTIPOLYGONTYPE )
- geostype = GEOS_MULTIPOLYGON;
- else
- geostype = GEOS_GEOMETRYCOLLECTION;
+ case POLYGONTYPE:
+ lwpoly = (LWPOLY *)lwgeom;
+ sq = ptarray_to_GEOSCoordSeq(lwpoly->rings[0]);
+ shell = GEOSGeom_createLinearRing(sq);
+ if ( ! shell ) return NULL;
+ /*lwerror("LWGEOM2GEOS: exception during polygon shell conversion"); */
+ ngeoms = lwpoly->nrings-1;
+ geoms = malloc(sizeof(GEOSGeom)*ngeoms);
+ for (i=1; i<lwpoly->nrings; ++i)
+ {
+ sq = ptarray_to_GEOSCoordSeq(lwpoly->rings[i]);
+ geoms[i-1] = GEOSGeom_createLinearRing(sq);
+ if ( ! geoms[i-1] ) return NULL;
+ /*lwerror("LWGEOM2GEOS: exception during polygon hole conversion"); */
+ }
+ g = GEOSGeom_createPolygon(shell, geoms, ngeoms);
+ if ( ! g ) return NULL;
+ free(geoms);
+ break;
+ case MULTIPOINTTYPE:
+ case MULTILINETYPE:
+ case MULTIPOLYGONTYPE:
+ case COLLECTIONTYPE:
+ if ( type == MULTIPOINTTYPE )
+ geostype = GEOS_MULTIPOINT;
+ else if ( type == MULTILINETYPE )
+ geostype = GEOS_MULTILINESTRING;
+ else if ( type == MULTIPOLYGONTYPE )
+ geostype = GEOS_MULTIPOLYGON;
+ else
+ geostype = GEOS_GEOMETRYCOLLECTION;
- lwc = (LWCOLLECTION *)lwgeom;
- ngeoms = lwc->ngeoms;
- geoms = malloc(sizeof(GEOSGeom)*ngeoms);
+ lwc = (LWCOLLECTION *)lwgeom;
+ ngeoms = lwc->ngeoms;
+ geoms = malloc(sizeof(GEOSGeom)*ngeoms);
- for (i=0; i<ngeoms; ++i)
- {
- geoms[i] = LWGEOM2GEOS(lwc->geoms[i]);
- if ( ! geoms[i] ) return NULL;
- }
- g = GEOSGeom_createCollection(geostype, geoms, ngeoms);
- if ( ! g ) return NULL;
- free(geoms);
- break;
+ for (i=0; i<ngeoms; ++i)
+ {
+ geoms[i] = LWGEOM2GEOS(lwc->geoms[i]);
+ if ( ! geoms[i] ) return NULL;
+ }
+ g = GEOSGeom_createCollection(geostype, geoms, ngeoms);
+ if ( ! g ) return NULL;
+ free(geoms);
+ break;
- default:
- lwerror("Unknown geometry type: %d", type);
+ default:
+ lwerror("Unknown geometry type: %d", type);
- return NULL;
+ return NULL;
}
GEOSSetSRID(g, lwgeom->SRID);
-#if POSTGIS_DEBUG_LEVEL >= 4
+#if POSTGIS_DEBUG_LEVEL >= 4
wkt = GEOSGeomToWKT(g);
LWDEBUGF(4, "LWGEOM2GEOS: GEOSGeom: %s", wkt);
/*
- if(tmp != NULL) lwgeom_release(tmp);
+ if(tmp != NULL) lwgeom_release(tmp);
*/
free(wkt);
#endif
@@ -3129,7 +3133,7 @@
return g;
}
-GEOSGeom
+GEOSGeom
POSTGIS2GEOS(PG_LWGEOM *pglwgeom)
{
GEOSGeom ret;
@@ -3141,7 +3145,8 @@
}
ret = LWGEOM2GEOS(lwgeom);
lwgeom_release(lwgeom);
- if ( ! ret ) {
+ if ( ! ret )
+ {
lwerror("POSTGIS2GEOS conversion failed");
return NULL;
}
@@ -3193,11 +3198,11 @@
GEOSGeom *vgeoms;
int SRID=-1;
size_t offset;
-#if POSTGIS_DEBUG_LEVEL > 0
+#if POSTGIS_DEBUG_LEVEL > 0
static int call=1;
#endif
-#if POSTGIS_DEBUG_LEVEL >= 3
+#if POSTGIS_DEBUG_LEVEL >= 3
call++;
#endif
@@ -3233,8 +3238,8 @@
{
if ( SRID != pglwgeom_getSRID(geom) )
{
- elog(ERROR, "polygonize: operation on mixed SRID geometries");
- PG_RETURN_NULL();
+ elog(ERROR, "polygonize: operation on mixed SRID geometries");
+ PG_RETURN_NULL();
}
}
}
@@ -3304,7 +3309,7 @@
}
- POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ;
+ POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ;
GEOSSetSRID(g3, pglwgeom_getSRID(geom1));
@@ -3355,7 +3360,7 @@
/*
* Take a geometry and return an areal geometry
* (Polygon or MultiPolygon).
- * Actually a wrapper around GEOSpolygonize,
+ * Actually a wrapper around GEOSpolygonize,
* transforming the resulting collection into
* a valid polygonzl Geometry.
*/
@@ -3415,7 +3420,7 @@
/*
* No geometries in collection, return NULL
*/
- if ( ngeoms == 0 )
+ if ( ngeoms == 0 )
{
GEOSGeom_destroy(geos_result);
PG_RETURN_NULL();
@@ -3436,7 +3441,7 @@
PG_RETURN_POINTER(result);
}
- /*
+ /*
* Iteratively invoke symdifference on outer rings
* as suggested by Carl Anderson:
* postgis-devel/2005-December/001805.html
@@ -3455,12 +3460,12 @@
* a LinearRing clone.
*/
sq=GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(
- GEOSGetExteriorRing(GEOSGetGeometryN( geos_result, i))
- ));
+ GEOSGetExteriorRing(GEOSGetGeometryN( geos_result, i))
+ ));
extring = GEOSGeom_createPolygon(
- GEOSGeom_createLinearRing(sq),
- NULL, 0
- );
+ GEOSGeom_createLinearRing(sq),
+ NULL, 0
+ );
if ( extring == NULL ) /* exception */
{
@@ -3500,6 +3505,13 @@
}
+/*********************************************************************************
+**
+** PreparedGeometry implementations that cache intermediate indexed versions
+** of geometry in a special MemoryContext for re-used by future function
+** invocations.
+**
+*********************************************************************************/
Datum containsPrepared(PG_FUNCTION_ARGS);
Datum containsProperlyPrepared(PG_FUNCTION_ARGS);
@@ -3507,8 +3519,8 @@
Datum intersectsPrepared(PG_FUNCTION_ARGS);
/*
- * GEOS prepared geometry is only available from GEOS 3.1 onwards
- */
+** GEOS prepared geometry is only available from GEOS 3.1 onwards
+*/
#if POSTGIS_GEOS_VERSION >= 31
#define PREPARED_GEOM 1
#warning COMPILING PREPARED GEOMETRY
@@ -3520,13 +3532,14 @@
{
int32 key1;
int32 key2;
- int32 argnum;
+ int32 argnum;
GEOSPreparedGeometry *prepared_geom;
GEOSGeometry *geom;
-} PREPARED_GEOM_CACHE;
+}
+PREPARED_GEOM_CACHE;
-/*
+/*
* get cached prepared geometry for geom1
* only geom1 is potentially prepared as only
* the first arg of the prepared predicates CAN be prepared
@@ -3534,21 +3547,21 @@
*
* get cache
* if cache not exist
- * create cache
+ * create cache
* key into cache
*
* else if key matches cached key
* if cached prepared not exist
* geom1 prepared into cache
- *
+ *
* else
* key into cache
* clear prepared cache
*/
-PREPARED_GEOM_CACHE * get_prepared_geometry_cache(
- PREPARED_GEOM_CACHE *cache,
- PG_LWGEOM *serialized_geom1, PG_LWGEOM *serialized_geom2,
- int32 key1, int32 key2 )
+PREPARED_GEOM_CACHE * get_prepared_geometry_cache(
+ PREPARED_GEOM_CACHE *cache,
+ PG_LWGEOM *serialized_geom1, PG_LWGEOM *serialized_geom2,
+ int32 key1, int32 key2 )
{
if ( !cache )
@@ -3556,7 +3569,7 @@
cache = lwalloc( sizeof(PREPARED_GEOM_CACHE) );
cache->prepared_geom = 0;
cache->geom = 0;
- cache->argnum = 0;
+ cache->argnum = 0;
cache->key1 = 0;
cache->key2 = 0;
LWDEBUGF(3, "get_prepared_geometry_cache: creating cache: %x", cache);
@@ -3566,9 +3579,9 @@
if ( !cache->prepared_geom )
{
GEOSGeom g = POSTGIS2GEOS( serialized_geom1 );
- cache->geom = g;
+ cache->geom = g;
cache->prepared_geom = GEOSPrepare( g );
- cache->argnum = 1;
+ cache->argnum = 1;
LWDEBUG(3, "get_prepared_geometry_cache: preparing obj in argument 1");
}
else
@@ -3581,9 +3594,9 @@
if ( !cache->prepared_geom )
{
GEOSGeom g = POSTGIS2GEOS( serialized_geom2 );
- cache->geom = g;
+ cache->geom = g;
cache->prepared_geom = GEOSPrepare( g );
- cache->argnum = 2;
+ cache->argnum = 2;
LWDEBUG(3, "get_prepared_geometry_cache: preparing obj in argument 2");
}
else
@@ -3595,15 +3608,15 @@
{
LWDEBUG(3, "get_prepared_geometry_cache: obj NOT in cache");
GEOSPreparedGeom_destroy( cache->prepared_geom );
- GEOSGeom_destroy( cache->geom );
+ GEOSGeom_destroy( cache->geom );
cache->prepared_geom = 0;
cache->geom = 0;
- cache->argnum = 0;
+ cache->argnum = 0;
}
cache->key1 = key1;
cache->key2 = key2;
-
+
return cache;
}
@@ -3629,23 +3642,23 @@
geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
key1 = PG_GETARG_INT32(2);
-
+
errorIfGeometryCollection(geom1,geom2);
errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2));
/*
- * short-circuit: if geom2 bounding box is not completely inside
- * geom1 bounding box we can prematurely return FALSE.
- * Do the test IFF BOUNDING BOX AVAILABLE.
- */
+ * short-circuit: if geom2 bounding box is not completely inside
+ * geom1 bounding box we can prematurely return FALSE.
+ * Do the test IFF BOUNDING BOX AVAILABLE.
+ */
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if (( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) ||
- ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ))
- PG_RETURN_BOOL(FALSE);
+ ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ))
+ PG_RETURN_BOOL(FALSE);
}
-
+
old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
prep_cache = fcinfo->flinfo->fn_extra;
prep_cache = get_prepared_geometry_cache( prep_cache, geom1, 0, key1, 0 );
@@ -3653,22 +3666,22 @@
MemoryContextSwitchTo(old_context);
initGEOS(lwnotice, lwnotice);
-
+
if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
{
- GEOSGeom g = POSTGIS2GEOS(geom2);
+ GEOSGeom g = POSTGIS2GEOS(geom2);
pg = prep_cache->prepared_geom;
- result = GEOSPreparedContains( pg, g);
- GEOSGeom_destroy(g);
+ result = GEOSPreparedContains( pg, g);
+ GEOSGeom_destroy(g);
}
else
{
GEOSGeom g1 = POSTGIS2GEOS(geom1);
- GEOSGeom g2 = POSTGIS2GEOS(geom2);
+ GEOSGeom g2 = POSTGIS2GEOS(geom2);
result = GEOSContains( g1, g2);
GEOSGeom_destroy(g1);
- GEOSGeom_destroy(g2);
- }
+ GEOSGeom_destroy(g2);
+ }
if (result == 2)
{
@@ -3702,23 +3715,23 @@
geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
key1 = PG_GETARG_INT32(2);
-
+
errorIfGeometryCollection(geom1,geom2);
errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2));
/*
- * short-circuit: if geom2 bounding box is not completely inside
- * geom1 bounding box we can prematurely return FALSE.
- * Do the test IFF BOUNDING BOX AVAILABLE.
- */
+ * short-circuit: if geom2 bounding box is not completely inside
+ * geom1 bounding box we can prematurely return FALSE.
+ * Do the test IFF BOUNDING BOX AVAILABLE.
+ */
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if (( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) ||
- ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ))
- PG_RETURN_BOOL(FALSE);
+ ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ))
+ PG_RETURN_BOOL(FALSE);
}
-
+
old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
prep_cache = fcinfo->flinfo->fn_extra;
prep_cache = get_prepared_geometry_cache( prep_cache, geom1, 0, key1, 0 );
@@ -3729,19 +3742,19 @@
if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
{
- GEOSGeom g = POSTGIS2GEOS(geom2);
+ GEOSGeom g = POSTGIS2GEOS(geom2);
pg = prep_cache->prepared_geom;
- result = GEOSPreparedContainsProperly( pg, g);
- GEOSGeom_destroy(g);
+ result = GEOSPreparedContainsProperly( pg, g);
+ GEOSGeom_destroy(g);
}
else
{
GEOSGeom g1 = POSTGIS2GEOS(geom1);
- GEOSGeom g2 = POSTGIS2GEOS(geom2);
+ GEOSGeom g2 = POSTGIS2GEOS(geom2);
result = GEOSRelatePattern( g1, g2, "T**FF*FF*" );
GEOSGeom_destroy(g1);
- GEOSGeom_destroy(g2);
- }
+ GEOSGeom_destroy(g2);
+ }
if (result == 2)
{
@@ -3780,18 +3793,18 @@
errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2));
/*
- * short-circuit: if geom2 bounding box is not completely inside
- * geom1 bounding box we can prematurely return FALSE.
- * Do the test IFF BOUNDING BOX AVAILABLE.
- */
+ * short-circuit: if geom2 bounding box is not completely inside
+ * geom1 bounding box we can prematurely return FALSE.
+ * Do the test IFF BOUNDING BOX AVAILABLE.
+ */
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
if (( box2.xmin < box1.xmin ) || ( box2.xmax > box1.xmax ) ||
- ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ))
- PG_RETURN_BOOL(FALSE);
+ ( box2.ymin < box1.ymin ) || ( box2.ymax > box1.ymax ))
+ PG_RETURN_BOOL(FALSE);
}
-
+
old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
prep_cache = fcinfo->flinfo->fn_extra;
prep_cache = get_prepared_geometry_cache( prep_cache, geom1, 0, key1, 0 );
@@ -3802,19 +3815,19 @@
if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
{
- GEOSGeom g = POSTGIS2GEOS(geom2);
+ GEOSGeom g = POSTGIS2GEOS(geom2);
pg = prep_cache->prepared_geom;
- result = GEOSPreparedCovers( pg, g);
- GEOSGeom_destroy(g);
+ result = GEOSPreparedCovers( pg, g);
+ GEOSGeom_destroy(g);
}
else
{
GEOSGeom g1 = POSTGIS2GEOS(geom1);
- GEOSGeom g2 = POSTGIS2GEOS(geom2);
+ GEOSGeom g2 = POSTGIS2GEOS(geom2);
result = GEOSRelatePattern( g1, g2, "******FF*" );
GEOSGeom_destroy(g1);
- GEOSGeom_destroy(g2);
- }
+ GEOSGeom_destroy(g2);
+ }
if (result == 2)
{
@@ -3850,23 +3863,23 @@
geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
key1 = PG_GETARG_INT32(2);
key2 = PG_GETARG_INT32(3);
-
+
errorIfGeometryCollection(geom1,geom2);
errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2));
/*
- * short-circuit 1: if geom2 bounding box does not overlap
- * geom1 bounding box we can prematurely return FALSE.
- * Do the test IFF BOUNDING BOX AVAILABLE.
- */
+ * short-circuit 1: if geom2 bounding box does not overlap
+ * geom1 bounding box we can prematurely return FALSE.
+ * Do the test IFF BOUNDING BOX AVAILABLE.
+ */
if ( getbox2d_p(SERIALIZED_FORM(geom1), &box1) &&
- getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
+ getbox2d_p(SERIALIZED_FORM(geom2), &box2) )
{
- if (( box2.xmax < box1.xmin ) || ( box2.xmin > box1.xmax ) ||
- ( box2.ymax < box1.ymin ) || ( box2.ymin > box2.ymax ))
- PG_RETURN_BOOL(FALSE);
+ if (( box2.xmax < box1.xmin ) || ( box2.xmin > box1.xmax ) ||
+ ( box2.ymax < box1.ymin ) || ( box2.ymin > box2.ymax ))
+ PG_RETURN_BOOL(FALSE);
}
-
+
old_context = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
prep_cache = fcinfo->flinfo->fn_extra;
prep_cache = get_prepared_geometry_cache( prep_cache, geom1, geom2, key1, key2 );
@@ -3877,26 +3890,28 @@
if ( prep_cache && prep_cache->prepared_geom )
{
- if( prep_cache->argnum == 1 ) {
- GEOSGeom g = POSTGIS2GEOS(geom2);
- pg = prep_cache->prepared_geom;
- result = GEOSPreparedCovers( pg, g);
- GEOSGeom_destroy(g);
+ if ( prep_cache->argnum == 1 )
+ {
+ GEOSGeom g = POSTGIS2GEOS(geom2);
+ pg = prep_cache->prepared_geom;
+ result = GEOSPreparedCovers( pg, g);
+ GEOSGeom_destroy(g);
}
- else {
- GEOSGeom g = POSTGIS2GEOS(geom1);
- pg = prep_cache->prepared_geom;
- result = GEOSPreparedCovers( pg, g);
- GEOSGeom_destroy(g);
+ else
+ {
+ GEOSGeom g = POSTGIS2GEOS(geom1);
+ pg = prep_cache->prepared_geom;
+ result = GEOSPreparedCovers( pg, g);
+ GEOSGeom_destroy(g);
}
}
else
{
GEOSGeom g1 = POSTGIS2GEOS(geom1);
- GEOSGeom g2 = POSTGIS2GEOS(geom2);
+ GEOSGeom g2 = POSTGIS2GEOS(geom2);
result = GEOSIntersects( g1, g2);
GEOSGeom_destroy(g1);
- GEOSGeom_destroy(g2);
+ GEOSGeom_destroy(g2);
}
if (result == 2)
More information about the postgis-commits
mailing list