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