FNC_GeomGetWKBSize - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

目的

ジオメトリのWKB (Well-Known Binary)表現のバイト単位の長さを返します。

構文

FNC_GeomSize_t
    FNC_GeomGetWKBSize(GEO_HANDLE  geoHandle)
GEO_HANDLE geoHandle
外部ルーチンへの入力または出力パラメータとして定義されたST_Geometry型へのハンドル。

使用上の注意

FNC_GeomGetWKBSizeは、ジオメトリのWKB表現のサイズを取得します。ジオメトリのGEO_HANDLEは入力として渡され、ジオメトリのWKB表現のサイズは呼び出し側に返されます。

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