17.00 - 17.05 - FNC_GeomGetWKT - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

目的

GeometryのWKT (Well-Known Text)表現をLatin文字セットのNULL終了文字列として返します。

構文

void
FNC_GeomGetWKT(GEO_HANDLE  geoHandle,
               unsigned char *wktBuffer,
               FNC_GeomSize_t  wktBufferSize,
               FNC_GeomSize_t *wktSize,
               int *srid)
GEO_HANDLE geoHandle
外部ルーチンへの入力パラメータとして定義されたST_Geometry型へのハンドル。
unsigned char * wktBuffer
WKT文字列を保持するバッファへのポインタ。
FNC_GeomSize_t wktBufferSize
FNCルーチンに渡されるwktBufferのバイト単位のサイズ。
FNC_GeomSize_t * wktSize
ルーチンによって返されるWKT文字列のバイト単位のサイズ。
int* srid
ルーチンによって返されるジオメトリの空間参照系の識別子。

使用上の注意

FNC_GeomGetWKTは、ジオメトリのWell Known Text表現を取得します。ジオメトリのGEO_HANDLEはバッファ(wktBuffer)とバッファ サイズ(wktBufferSize)へのポインタとともに入力として渡されます。wktBufferサイズはWKB値の保持に十分な大きさである必要があります。適切なバッファ サイズを決定するには、FNC_GetGeometryInfo関数またはFNC_GetWKTSize関数呼び出しを使用して、ジオメトリ長を取得することができます。

ルーチンはwktBufferにWKT表現を入力します。wktSizeフィールドとsridフィールドもFNCルーチンによって入力されます。

このFNC関数は、インラインST_Geometry値でのみ呼び出す必要があります。LOBベースのST_Geometry値に対して呼び出されると、次の7579エラーが発生します: FNC_GeomGetWKTは、インラインのST_Geometry値に対してのみ有効です。

例: FNC_GeomGetWKTを使用してST_Geometry WKTを取得する

次の例の関数では、ST_Geometryパラメータを取り、ジオメトリのWell Known Text形式を取得します。文字列をST_Geometry戻りパラメータで返します。

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);
    }
}