FNC_GeomSetWKT Function | C Library Functions | Teradata Vantage - FNC_GeomSetWKT - Advanced SQL Engine - Teradata Database

SQL External Routine Programming

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
June 2020
Language
English (United States)
Last Update
2021-01-24
dita:mapPath
qwr1571437338192.ditamap
dita:ditavalPath
lze1555437562152.ditaval
dita:id
B035-1147
lifecycle
previous
Product Category
Teradata Vantage™

Purpose

Set the value of a Geometry type using a Well-Known Text (WKT) string representation of the Geometry in the Latin character set.

Syntax

void
FNC_GeomGetWKT(GEO_HANDLE      geoHandle,
               unsigned char*  wkt,
               FNC_GeomSize_t  wktSize,
               int             srid)
GEO_HANDLE geoHandle
A handle to a Geometry type that is defined to be a return value for a UDF/UDM or an INOUT/OUT parameter to an external stored procedure.
unsigned char* wkt
A pointer to the WKT string in the Latin character set.
FNC_GeomSize_t wktSize
Size in bytes of the WKT string.
int srid
Spatial Reference System Identifier of the Geometry to be set.

Usage Notes

The FNC_GeomSetWKT function sets the value of a Geometry using a WKT string representation. The wkt parameter containing the WKT string, the wktSize, and the SRID to be set for the Geometry are passed as input.

The FNC_GeomSetWKT function should be called only for inline ST_Geometry values. If used with a LOB-based ST_Geometry value, a 7579 error is generated: FNC_GeomSetWKT is only valid for inline ST_Geometry values.

Example: Using FNC_GeomGetWKT to retrieve a ST_Geometry WKT

The following example function takes a ST_Geometry parameter and retrieves the Well Known Text format for the geometry. It returns the string back in the ST_Geometry return parameter.

CREATE FUNCTION geomUDF1(P1 st_geometry(1000))
RETURNS ST_GEOMETRY(1000)
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!geomUDF1!geomUDF1.c';

void geomUDF1(GEO_HANDLE* geom_handle,
              GEO_HANDLE* return_handle,
              int* indicator_thisGeom,
              int* indicator_returnGeom,
              char  sqlstate[6],
              SQL_TEXT   extname[129],
              SQL_TEXT   specific_name[129],
              SQL_TEXT   error_message[257] )
{
    FNC_GeomSize_t geomsize;
    FNC_GeomSize_t wktSize;
    char* wktBuffer;
    FNC_GeomSize_t wktBufferSize;
    int srid , max_length, numLobs;

    /* Get the Geometry Info */
     FNC_GetGeometryInfo(*geom_handle,&max_length, &numLobs); 
    if(numLobs == 0)
    {
    /* Get the Geometry WKT Size */
     geomsize = FNC_GeomGetWKTSize(*geom_handle); 

     /* Allocate the buffer to hold the WKT. Note that we add 
        1 for the null termination character. */ 
    wktBuffer = (char*)FNC_Malloc(geomsize + 1);
    wktBufferSize = geomsize + 1;

    /* Get the WKT string */
     FNC_GeomGetWKT(*geom_handle,wktBuffer, wktBufferSize, 
                     &wktSize, &srid); 
                                                                                                   
    /* Set the WKT string as return value */
     FNC_GeomSetWKT(*return_handle, wktBuffer, wktSize,0); 
    *indicator_returnGeom = 0;
    FNC_free(wkbBuffer);
    }
}