⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wreadandwritegeometry.h

📁 ReadAndWriteOracleSpatial C++读写OracleSpatial
💻 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 + -