📄 wreadandwritegeometry.h
字号:
//----------------------------------------------
// WReadAndWriteGeometry.h
//----------------------------------------------
#if(!defined(WReadAndWriteGeometry_H))
#define WReadAndWriteGeometry_H
#pragma comment( lib, "oci.lib" )
#pragma comment( lib, "ociw32.lib" )
#pragma comment( lib, "oraocci9.lib" )
#ifndef OCI_ORACLE
#include <oci.h>
#include <oci1.h>
#endif
/*---------------------------------------------------------------------------
PUBLIC TYPES AND CONSTANTS
---------------------------------------------------------------------------*/
#define ARRAY_SIZE 32
#define TYPE_OWNER "MDSYS"
#define SDO_ORDINATE_ARRAY TYPE_OWNER".SDO_ORDINATE_ARRAY"
#define SDO_ELEM_INFO_ARRAY TYPE_OWNER".SDO_ELEM_INFO_ARRAY"
#define SDO_GEOMETRY TYPE_OWNER".SDO_GEOMETRY"
/*************************************************************************/
/* Type definitions */
/*************************************************************************/
struct sdo_point_type
{
OCINumber x;
OCINumber y;
OCINumber z;
};
typedef struct sdo_point_type sdo_point_type;
typedef OCIArray sdo_elem_info_array;
typedef OCIArray sdo_ordinate_array;
struct sdo_geometry
{
OCINumber sdo_gtype;
OCINumber sdo_srid;
sdo_point_type sdo_point;
OCIArray *sdo_elem_info;
OCIArray *sdo_ordinates;
};
typedef struct sdo_geometry SDO_GEOMETRY_TYPE;
/***
** Indicator structures for SDO_GEOMETRY_TYPE
***/
struct sdo_point_type_ind
{
OCIInd _atomic;
OCIInd x;
OCIInd y;
OCIInd z;
};
typedef struct sdo_point_type_ind sdo_point_type_ind;
struct SDO_GEOMETRY_ind
{
OCIInd _atomic;
OCIInd sdo_gtype;
OCIInd sdo_srid;
struct sdo_point_type_ind sdo_point;
OCIInd sdo_elem_info;
OCIInd sdo_ordinates;
};
typedef struct SDO_GEOMETRY_ind SDO_GEOMETRY_ind;
/*************************************************************************/
/* Class definitions */
/*************************************************************************/
class WReadAndWriteGeometry
{
public:
WReadAndWriteGeometry(char *username, char *password,char *connectstring);
~WReadAndWriteGeometry();
void read_geometries (char *table, char *geom_column, char *id_column, int num_dimensions);
void write_geometries ();
protected:
void checkerr(OCIError *errhp, sword status);
void connect(char *username, char *password, char *connectstring);
void disconnect(void);
OCIType *get_tdo(char *typeName);
void process_data(int num_dimensions, char *id_column, int rows_to_process, int *rows_processed);
protected:
int sc_ops_geom_null(void);
void sc_ops_init_geometry (SDO_GEOMETRY_TYPE *, SDO_GEOMETRY_ind *, int);
void sc_ops_get_gtype (void);
void sc_ops_get_sdo_point (void);
int sc_ops_next_elem (void);
ub4 sc_ops_get_element_type (void);
void sc_ops_get_type1 (void);
void sc_ops_get_type2 (void);
void sc_ops_get_type3 (void);
void sc_ops_get_type4 (void);
void sc_ops_get_type5 (void);
ub4 get_interpretation (void);
void get_ordinates (int starting_offset, int ending_offset);
int get_next_ending_offset (int processing_type_4or5);
int get_next_starting_offset (int read_varray);
private:
OCIEnv *envhp; /* OCI general handles */
OCIError *errhp;
OCIServer *srvhp;
OCISvcCtx *svchp;
OCISession *usrhp;
OCIStmt *stmthp;
OCIDescribe *dschp;
//读GEOMETRY数据时,需要的变量
private:
OCINumber global_gid[ARRAY_SIZE];
OCIType *geom_tdo;
SDO_GEOMETRY_TYPE *global_geom_obj[ARRAY_SIZE];/* spatial object buffer */
SDO_GEOMETRY_ind *global_geom_ind[ARRAY_SIZE]; /* Object indicator */
//写GEOMETRY数据时,需要的变量
private:
OCIType *elem_info_tdo; /* Varrays and the type descriptors */
OCIArray *elem_info;
OCIType *ordinates_tdo;
OCIArray *ordinates;
private:
SDO_GEOMETRY_TYPE *m_geom_obj;
SDO_GEOMETRY_ind *m_geom_ind;
int global_num_dimensions;
int global_elem_index;
int global_ending_offset;
int global_nelems;
int global_nords;
int global_first_elem;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -