1657 const GEOSGeometry *g1 = NULL;
1659 char *geos_reason = NULL;
1660 char *reason = NULL;
1661 GEOSGeometry *geos_location = NULL;
1667 AttInMetadata *attinmeta;
1674 get_call_result_type(fcinfo, 0, &tupdesc);
1675 BlessTupleDesc(tupdesc);
1681 attinmeta = TupleDescGetAttInMetadata(tupdesc);
1683 geom = PG_GETARG_GSERIALIZED_P(0);
1684 flags = PG_GETARG_INT32(1);
1692 valid = GEOSisValidDetail(g1, flags, &geos_reason, &geos_location);
1693 GEOSGeom_destroy((GEOSGeometry *)g1);
1696 reason = pstrdup(geos_reason);
1697 GEOSFree(geos_reason);
1699 if ( geos_location )
1701 location =
GEOS2LWGEOM(geos_location, GEOSHasZ(geos_location));
1702 GEOSGeom_destroy(geos_location);
1708 lwpgerror(
"GEOS isvaliddetail() threw an exception!");
1719 values[0] = valid ?
"t" :
"f";
1727 tuple = BuildTupleFromCStrings(attinmeta, values);
1728 result = (HeapTupleHeader) palloc(tuple->t_len);
1729 memcpy(
result, tuple->t_data, tuple->t_len);
1730 heap_freetuple(tuple);
1732 PG_RETURN_HEAPTUPLEHEADER(
result);
char result[OUT_DOUBLE_BUFFER_SIZE]
char lwgeom_geos_errmsg[LWGEOM_GEOS_ERRMSG_MAXSIZE]
void lwgeom_geos_error(const char *fmt,...)
void(*) LWGEOM GEOS2LWGEOM)(const GEOSGeometry *geom, uint8_t want3d)
char * lwgeom_to_hexwkb_buffer(const LWGEOM *geom, uint8_t variant)
GEOSGeometry * POSTGIS2GEOS(const GSERIALIZED *pglwgeom)