17.00 - 17.05 - FNC_GeomGetWKB - 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
日本語 (日本)

目的

ジオメトリのWKB (Well-Known Binary)表現をバイナリ文字列として返します。

構文規則

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

使用上の注意

FNC_GeomGetWKBは、ジオメトリのWell-Known Binary表現の取得に使用できます。ジオメトリのGEO_HANDLEはバッファ(wkbBuffer)とバッファ サイズ(wkbBufferSize)へのポインタとともに入力として渡されます。wkbBufferサイズはWKBデータの保持に十分な大きさである必要があります。適切なバッファ サイズを割り当てるには、FNC_GetGeomeryInfo関数またはFNC_GetWKBSize関数を使用して、ジオメトリ長を見つけることができます。

ルーチンはwkbBufferにジオメトリのWKB表現を入力します。wkbSizeフィールドとsridフィールドもFNCルーチンによって入力されます。

このルーチンはインラインST_Geometry値でのみ呼び出し可能です。LOBベースのST_Geometry値で呼び出されると、次の7579エラーが発生します: FNC_GeomGetWKBは、インラインのST_Geometry値に対してのみ有効です。

例: FNC_GeomGetWKBを使用してST_Geometry WKBを取得する

次の関数例では、ST_Geometryパラメータを受け取り、ジオメトリのWell-Known Binary形式を取得します。これはBLOBとして取得されたWKBを返します。

CREATE FUNCTION geomUDF2(P1 st_geometry(1000))
RETURNS BLOB AS LOCATOR
NO SQL
PARAMETER STYLE SQL
DETERMINISTIC
LANGUAGE C
EXTERNAL NAME 'CS!geomUDF2!geomUDF2.c';

void geomUDF2(GEO_HANDLE *geom_handle,
              LOB_RESULT_LOCATOR *return_handle,
              int*        indicator_thisGeom,
              int*        indicator_returnLOB,
              char        sqlstate[6],
              SQL_TEXT    extname[129],
              SQL_TEXT    specific_name[129],
              SQL_TEXT    error_message[257] )
{
     FNC_GeomSize_t geomsize;
     FNC_GeomSize_t wkbSize;
     byte* wkbBuffer;
     FNC_GeomSize_t wkbBufferSize;
     FNC_LobLength_t actlen;
     int srid;

    /* Get the Geometry WKT Size */
     geomsize = FNC_GeomGetWKBSize(*geom_handle); 

    wkbBuffer = (byte*)FNC_Malloc(geomsize);
    wkbBufferSize = geomsize;
    /* Get the WKB value */
     FNC_GeomGetWKB(*geom_handle,wkbBuffer, wkbBufferSize, 
         &wkbSize, &srid); 
                                                                                                                           
    /* Append the WKB to a LOB */
     FNC_LobAppend(*return_handle, wkbBuffer, wkbBufferSize, 
         &actlen); 
    *indicator_returnLob = 0;
    FNC_free(wkbBuffer);
}