目的
ジオメトリの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); }