lwgeom_release(LWGEOM *lwgeom)
{
if ( ! lwgeom )
- lwerror("lwgeom_release: someone called on 0x0");
+ lwerror("%s: someone called on 0x0", __func__);
LWDEBUGF(3, "releasing type %s", lwtype_name(lwgeom->type));
/* Drop bounding box (always a copy) */
if ( lwgeom->bbox )
{
- LWDEBUGF(3, "lwgeom_release: releasing bbox. %p", lwgeom->bbox);
+ LWDEBUGF(3, "%s: releasing bbox. %p", __func__, lwgeom->bbox);
lwfree(lwgeom->bbox);
}
lwfree(lwgeom);
case COLLECTIONTYPE:
return (LWGEOM *)lwcollection_clone((LWCOLLECTION *)lwgeom);
default:
- lwerror("lwgeom_clone: Unknown geometry type: %s", lwtype_name(lwgeom->type));
+ lwerror("%s: Unknown geometry type: %s", __func__, lwtype_name(lwgeom->type));
return NULL;
}
}
case COLLECTIONTYPE:
return (LWGEOM *)lwcollection_clone_deep((LWCOLLECTION *)lwgeom);
default:
- lwerror("lwgeom_clone_deep: Unknown geometry type: %s", lwtype_name(lwgeom->type));
+ lwerror("%s: Unknown geometry type: %s", __func__, lwtype_name(lwgeom->type));
return NULL;
}
}
return lwcollection_same((LWCOLLECTION *)lwgeom1,
(LWCOLLECTION *)lwgeom2);
default:
- lwerror("lwgeom_same: unsupported geometry type: %s",
+ lwerror("%s: unsupported geometry type: %s", __func__,
lwtype_name(lwgeom1->type));
return LW_FALSE;
}
case COLLECTIONTYPE:
return lwcollection_as_lwgeom(lwcollection_force_dims((LWCOLLECTION*)geom, hasz, hasm));
default:
- lwerror("lwgeom_force_2d: unsupported geom type: %s", lwtype_name(geom->type));
+ lwerror("%s: unsupported geom type: %s", __func__, lwtype_name(geom->type));
return NULL;
}
}
lwgeom_set_geodetic(col->geoms[i], value);
break;
default:
- lwerror("lwgeom_set_geodetic: unsupported geom type: %s", lwtype_name(geom->type));
+ lwerror("%s: unsupported geom type: %s", __func__, lwtype_name(geom->type));
return;
}
}
lwgeom_longitude_shift(coll->geoms[i]);
return;
default:
- lwerror("lwgeom_longitude_shift: unsupported geom type: %s",
- lwtype_name(lwgeom->type));
+ lwerror("%s: unsupported geom type: %s",
+ __func__, lwtype_name(lwgeom->type));
}
}
lwcollection_free((LWCOLLECTION *)lwgeom);
break;
default:
- lwerror("lwgeom_free called with unknown type (%d) %s", lwgeom->type, lwtype_name(lwgeom->type));
+ lwerror("%s called with unknown type (%d) %s", __func__, lwgeom->type, lwtype_name(lwgeom->type));
}
return;
}
/* Null? Zero. */
if( ! geom ) return 0;
- LWDEBUGF(4, "lwgeom_count_vertices got type %s",
- lwtype_name(geom->type));
+ LWDEBUGF(4, "%s got type %s",
+ __func__, lwtype_name(geom->type));
/* Empty? Zero. */
if( lwgeom_is_empty(geom) ) return 0;
result = lwcollection_count_vertices((LWCOLLECTION *)geom);
break;
default:
- lwerror("lwgeom_count_vertices: unsupported input geometry type: %s",
- lwtype_name(geom->type));
+ lwerror("%s: unsupported input geometry type: %s",
+ __func__, lwtype_name(geom->type));
break;
}
LWDEBUGF(3, "counted %d vertices", result);
/* Null? Zero. */
if( ! geom ) return -1;
- LWDEBUGF(4, "lwgeom_dimension got type %s",
- lwtype_name(geom->type));
+ LWDEBUGF(4, "%s got type %s",
+ __func__, lwtype_name(geom->type));
/* Empty? Zero. */
/* if( lwgeom_is_empty(geom) ) return 0; */
return maxdim;
}
default:
- lwerror("lwgeom_dimension: unsupported input geometry type: %s",
- lwtype_name(geom->type));
+ lwerror("%s: unsupported input geometry type: %s",
+ __func__, lwtype_name(geom->type));
}
return -1;
}
break;
}
default:
- lwerror("lwgeom_count_rings: unsupported input geometry type: %s", lwtype_name(geom->type));
+ lwerror("%s: unsupported input geometry type: %s", __func__, lwtype_name(geom->type));
break;
}
LWDEBUGF(3, "counted %d rings", result);
int lwgeom_is_empty(const LWGEOM *geom)
{
int result = LW_FALSE;
- LWDEBUGF(4, "lwgeom_is_empty: got type %s",
- lwtype_name(geom->type));
+ LWDEBUGF(4, "%s: got type %s",
+ __func__, lwtype_name(geom->type));
switch (geom->type)
{
return lwcollection_is_empty((LWCOLLECTION *)geom);
break;
default:
- lwerror("lwgeom_is_empty: unsupported input geometry type: %s",
- lwtype_name(geom->type));
+ lwerror("%s: unsupported input geometry type: %s",
+ __func__, lwtype_name(geom->type));
break;
}
return result;
{
int dim;
- LWDEBUGF(3, "lwgeom_dimensionality got type %s",
- lwtype_name(geom->type));
+ LWDEBUGF(3, "%s got type %s",
+ __func__, lwtype_name(geom->type));
switch (geom->type)
{
return lwcollection_dimensionality((LWCOLLECTION *)geom);
break;
default:
- lwerror("lwgeom_dimensionality: unsupported input geometry type: %s",
- lwtype_name(geom->type));
+ lwerror("%s: unsupported input geometry type: %s",
+ __func__, lwtype_name(geom->type));
break;
}
return 0;
return in;
default:
- lwnotice("lwgeom_remove_repeated_points: unsupported geometry type: %s",
- lwtype_name(in->type));
+ lwnotice("%s: unsupported geometry type: %s",
+ __func__, lwtype_name(in->type));
return in;
break;
}
break;
default:
- lwerror("lwgeom_swap_ordinates: unsupported geometry type: %s",
- lwtype_name(in->type));
+ lwerror("%s: unsupported geometry type: %s",
+ __func__, lwtype_name(in->type));
return;
}
case COLLECTIONTYPE:
return (LWGEOM*)lwcollection_simplify((LWCOLLECTION *)igeom, dist);
default:
- lwerror("lwgeom_simplify: unsupported geometry type: %s",lwtype_name(igeom->type));
+ lwerror("%s: unsupported geometry type: %s",
+ __func__, lwtype_name(igeom->type));
}
return NULL;
}
}
else
{
- lwerror("lwgeom_affine: unable to handle type '%s'", lwtype_name(type));
+ lwerror("%s: unsupported geometry type: %s",
+ __func__, lwtype_name(type));
}
}
}
case COLLECTIONTYPE:
return lwcollection_as_lwgeom(lwcollection_construct_empty(type, srid, hasz, hasm));
default:
- lwerror("lwgeom_construct_empty: unsupported geometry type: %s",
- lwtype_name(type));
+ lwerror("%s: unsupported geometry type: %s",
+ __func__, lwtype_name(type));
return NULL;
}
}
case COLLECTIONTYPE:
return lwcollection_startpoint((LWCOLLECTION*)lwgeom, pt);
default:
- lwerror("int: unsupported geometry type: %s",
- lwtype_name(lwgeom->type));
+ lwerror("%s: unsupported geometry type: %s",
+ __func__, lwtype_name(lwgeom->type));
return LW_FAILURE;
}
}
case CIRCSTRINGTYPE:
return (LWGEOM *)lwcircstring_grid((LWCIRCSTRING *)lwgeom, grid);
default:
- lwerror("lwgeom_grid: Unsupported geometry type: %s",
- lwtype_name(lwgeom->type));
+ lwerror("%s: Unsupported geometry type: %s",
+ __func__, lwtype_name(lwgeom->type));
return NULL;
}
}
if ( ! gbox_overlaps_2d(geombox, gbox) )
return 0;
-
+
+ if ( gbox_contains_2d(gbox, geombox) )
+ return lwgeom_count_vertices(geom);
+
switch ( geom->type )
{
case POINTTYPE:
}
default:
{
- lwerror("lwgeom_npoints_in_rect: Unsupported geometry type: %s",
+ lwerror("%s: Unsupported geometry type: %s", __func__,
lwtype_name(geom->type));
return 0;
}
pt.y = clip->ymin;
if ( lwpoly_contains_point((LWPOLY*)geom, &pt) )
{
- /* TODO: Probably just making the clipping box into a polygon is a more */
- /* efficient way to do this? */
- LWGEOM *clipped = lwgeom_clip_by_rect(geom, clip->xmin, clip->ymin, clip->xmax, clip->ymax);
- /* Hm, clipping left nothing behind, skip it */
- if ( lwgeom_is_empty(clipped) )
- {
- return 0;
- }
- /* Add the clipped part */
- else
- {
- lwcollection_add_lwgeom(col, clipped);
- return 5;
- }
- }
- else
- {
- return 0;
+ LWPOLY *clip_poly = lwpoly_construct_from_gbox(geom->srid, clip);
+ lwcollection_add_lwgeom(col, lwpoly_as_lwgeom(clip_poly));
+ return 5;
}
}
else
{
int n = 0;
LWCOLLECTION *col;
+
+ /* Guard against terribleness */
+ if ( maxvertices < 10 )
+ lwerror("%s: must use a vertex count of at least 10", __func__);
+
col = lwcollection_construct_empty(COLLECTIONTYPE, geom->srid, lwgeom_has_z(geom), lwgeom_has_m(geom));
n = lwgeom_subdivide_recursive(geom, maxvertices, col, NULL);
return col;