1740{
1741 int type = GEOSGeomTypeId(geom);
1742 int SRID = GEOSGetSRID(geom);
1743
1744
1746
1747 if (want3d && !GEOSHasZ(geom))
1748 {
1749 LWDEBUG(3,
"Geometry has no Z, won't provide one");
1750 want3d = 0;
1751 }
1752
1753 switch (type)
1754 {
1756 uint32_t i, ngeoms;
1757 case GEOS_GEOMETRYCOLLECTION:
1758 LWDEBUG(4,
"lwgeom_from_geometry: it's a Collection or Multi");
1759
1760 ngeoms = GEOSGetNumGeometries(geom);
1761 geoms = NULL;
1762 if (ngeoms)
1763 {
1764 geoms =
lwalloc(ngeoms *
sizeof *geoms);
1765 if (!geoms)
1766 {
1767 lwerror(
"lwtin_from_geos: can't allocate geoms");
1768 return NULL;
1769 }
1770 for (i = 0; i < ngeoms; i++)
1771 {
1772 const GEOSGeometry *poly, *ring;
1773 const GEOSCoordSequence* cs;
1775
1776 poly = GEOSGetGeometryN(geom, i);
1777 ring = GEOSGetExteriorRing(poly);
1778 cs = GEOSGeom_getCoordSeq(ring);
1780
1782 }
1783 }
1785 case GEOS_POLYGON:
1786 case GEOS_MULTIPOINT:
1787 case GEOS_MULTILINESTRING:
1788 case GEOS_MULTIPOLYGON:
1789 case GEOS_LINESTRING:
1790 case GEOS_LINEARRING:
1791 case GEOS_POINT:
1792 lwerror(
"lwtin_from_geos: invalid geometry type for tin: %d", type);
1793 break;
1794
1795 default:
1796 lwerror(
"GEOS2LWGEOM: unknown geometry type: %d", type);
1797 return NULL;
1798 }
1799
1800
1801 return NULL;
1802}
POINTARRAY * ptarray_from_GEOSCoordSeq(const GEOSCoordSequence *cs, uint8_t want3d)
LWCOLLECTION * lwcollection_construct(uint8_t type, int32_t srid, GBOX *bbox, uint32_t ngeoms, LWGEOM **geoms)
void * lwalloc(size_t size)
#define SRID_UNKNOWN
Unknown SRID value.
LWTRIANGLE * lwtriangle_construct(int32_t srid, GBOX *bbox, POINTARRAY *points)
#define LWDEBUG(level, msg)
void lwerror(const char *fmt,...)
Write a notice out to the error handler.