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

📄 geodataengine.h

📁 使用VC++程序制作的COM组件是地理信息系统的一个实例
💻 H
字号:
// GeoDataEngine.h: interface for the CGeoDataEngine class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GEODATAENGINE_H__50A3E933_F26E_11D2_B406_97B7537E8706__INCLUDED_)
#define AFX_GEODATAENGINE_H__50A3E933_F26E_11D2_B406_97B7537E8706__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//********************************************************************
//空间要素数据结构
//--------------------------------------------------------------------
//DPOINT结构定义二维空间一个点的x和y坐标
struct DPOINT{
	double x;				//x坐标
    double y;	 			//y坐标
};
//--------------------------------------------------------------------
//DRECT结构定义二维空间一个矩形的左下和右上角的坐标
struct DRECT{    
	double x1;  			//矩形左下角的x坐标
	double y1;				//矩形左下角的y坐标
	double x2; 				//矩形右上角的x坐标
	double y2;				//矩形右上角的y坐标
}; 
//--------------------------------------------------------------------
//DSIZE结构定义二维空间一个矩形的宽和高
struct DSIZE{    
	double cx; 				//矩形宽 					
	double cy;     			//矩形高
}; 
//--------------------------------------------------------------------
//点状(主要是独立点)要素空间数据结构
struct POINTFEATURE
{
	long ID;								//点标识码
	BYTE byType;							//点类型 0-无向点,1-有向点
											//10-无向结点,11-有向结点
	DPOINT ptPosition;						//定位点坐标
	double dElevation;						//高程
	DPOINT ptDirection;						//方向点坐标(有向)
	CArray<long, long> arrayLineID;			//关联的弧段标识变长数组
	long lAttriCode;						//属性编码
};
//--------------------------------------------------------------------
//线状(弧段)要素空间数据结构
struct LINEFEATURE
{
	long ID;										//线的标识码
	BYTE byType;									//弧段类型 0-折线,1-光滑曲线,
													//2-圆弧
	                                                //10--12为具有拓扑关系的弧段
	long lStartNodeID;								//始结点标识码
	long lEndNodeID;								//终结点标识码
	long lLeftPolygonID;	                        //左多边形标识码
	long lRightPolygonID;                           //右多边形标识码
	CArray<DPOINT, DPOINT> arrayVertex;				//点列坐标数组
	CArray<double, double> arrayElevation;			//高程数组
	DRECT rectBound;								//外接矩形
	long lAttriCode;								//属性编码
};
//--------------------------------------------------------------------
//面状要素空间数据结构
struct POLYGONFEATURE
{
	long ID;										//标识码
	BYTE byType;									//面类型 0-简单面,1-带岛面
	CArray<long, long> arrayLineID;					//关联的弧段标识变长数组
	CArray<long, long> arrayIslandID;				//包含的岛屿标识变长数组
	long lParentID;									//归属面的标识码
	DPOINT ptCentroid;								//内点坐标
	DRECT rectBound;								//外接矩形
	long lAttriCode;								//属性编码
};
//--------------------------------------------------------------------
//TEXTFEATURE结构定义文本要素数据结构
struct TEXTFEATURE{
	long ID;								//文本标识码
	DPOINT ptPosition; 					    //定位点坐标
	CString csContent;						//文本内容
	BYTE byAlignment;						//对齐方式
	double dVerticalSpace;					//行距
	CString csFaceName;	 			   	    //文本字体
	long lEffect;							//字型、效果
	SIZE size;							    //文本尺寸
	long lCharExtra;						//文本间隔
	double dAngle;							//文本方向,以角度表示
	COLORREF rgbFore;						//文本前景色
	COLORREF rgbBack;						//文本背景色
};
//--------------------------------------------------------------------
//LABELFEATURE结构定义注记数据结构
struct LABELFEATURE{
	long ID;								//注记标识码
	BYTE byType;							//注记类型, 0-点, 1-线, 2-面
	long lGeoObjID;                         //关联的地理目标标识码
	CString csFieldName;					//注记字段名称
	CString csContent;						//注记内容
	CArray<DPOINT, DPOINT> arrayLocation;	//变长坐标数组
	BYTE byPlaceStyle;						//配置方式
	CString csFaceName;						//注记字体的字样名
	long lEffect;							//字型、效果
	SIZE size;							    //注记尺寸
	long lCharExtra;					    //注记间隔
	double dAngle;					  	    //注记方向,以角度表示
	COLORREF rgbFore;						//注记前景色
	COLORREF rgbBack;						//注记背景色
};
//--------------------------------------------------------------------
//绘图符号信息数据结构
struct SYMBOLFEATURE
{
	long ID;										//绘图式样标识码
	BYTE byType;									//符号类型, 0-点, 1-线, 2-面
	long lGeoObjID;						    	      //关联的地理目标标识码
	long lCode;										//符号代码
	double dSize;									//符号尺寸
	COLORREF rgbFore;								//符号颜色
	COLORREF rgbBack;								//符号背景颜色
	double dDistance;								//配制符号距离
};
//--------------------------------------------------------------------
//专题图数据结构
struct THEMEFEATURE
{
	long ID;										//标识码
//	BYTE byType;									//符号类型, 0-点, 1-线, 2-面
//	long lGeoObjID;						    	    //关联的地理目标标识码
//	long lCode;										//符号代码
//	double dSize;									//符号尺寸
//	COLORREF rgbFore;								//符号颜色
//	COLORREF rgbBack;								//符号背景颜色
//	double dDistance;								//配制符号距离
};
//--------------------------------------------------------------------
//要素层数据结构
struct LAYERFEATURE
{
	CString csName;							//要素层名称
	BYTE byType;							//类型 0-矢量数据要素层,
											//     1-图像数据要素层,
											//     2-DEM数据要素层,
											//     3-专题数据要素层,
	DPOINT ptLocation;						//要素层的位置
	long lScale;							//比例尺分母
	double dMinView;						//最小视野
    double dMaxView;						//最大视野
	BYTE byVisible;							//0-可视, 1-不可视
};
//--------------------------------------------------------------------
//工作区数据结构
struct WORKSPACEFEATURE
{
	CString csName;					//工作区文件名
	COleDateTime dtDate;			//建立时间
	CString csLevel;				//密级
	double dLongitude1;				//左下角经度
	double dLatitude1;				//左下角纬度
	double dLongitude2;				//右上角经度
	double dLatitude2;				//右上角纬度
	double x1;						//左下角坐标X
	double y1;						//左下角坐标Y
	double x2;						//右上角坐标X
	double y2;						//右上角坐标Y
	BYTE byXYSystem;				//平面坐标系统 0--54,1--80,2--WGS-84,3--独立
	BYTE byZSystem;					//高程坐标系统 0--54黄海,1--85国家基准,2--独立
	BYTE byProjection;				//地图投影 0--经纬度,1--高斯,2--等角圆锥,3--墨卡托,4--无投影
	BYTE byUnit;					//坐标单位 当Projection = 0时 0--秒,1--度
									//其他 0--毫米,1--米
	BYTE byStyle;					//显示方式 0--平面,1--立体
	BYTE byDisplayProjection;		//显示投影方式 0--无投影,1--高斯,2--等角圆锥,3--墨卡托,
};

//********************************************************************
//--------------------------------------------------------------------
//地理要素表类型定义
enum TableTypeConstants
{
	comPointTable     =  0,       //点
	comLineTable      =  1,       //线
	comPolygonTable   =  2,       //面
	comTextTable      =  3,       //文本
	comLabelTable     =  4,       //注记
	comSymbolTable    =  5,		  //符号
	comLayerTable     =  6,		  //要素层
	comWorkspaceTable =  7		  //工作区
};

//数据库字段与类型结构
struct FIELDDEF
{
	TCHAR csName[32];			 		//字段名
	long lType;	 						//字段类型
	long lSize;							//字段长度
};

#define comDatabaseProperty  _T("ComGIS1.0")
#define comWorkspaceTableName  _T("工作区参数表")
#define comLayerTableName  _T("要素层数据表")

#define comPointSuffix          _T("_点")
#define comPointSymbolSuffix    _T("_点符号")
#define comPointLabelSuffix     _T("_点注记")
#define	comLineSuffix           _T("_线") 
#define comLineSymbolSuffix     _T("_线符号")
#define comLineLabelSuffix      _T("_线注记")
#define comPolygonSuffix        _T("_面")
#define comPolygonSymbolSuffix  _T("_面符号")
#define comPolygonLabelSuffix   _T("_面注记")
#define	comTextSuffix           _T("_文本") 

//--------------------------------------------------------------------
typedef CdbDatabase		CGeoDatabase;
typedef CdbRecordset	CGeoRecordset;
typedef CdbField		CGeoField;

//--------------------------------------------------------------------
//地理数据访问对象类成员函数及成员变量说明
class CGeoDataEngine  
{
public:
	CGeoDataEngine();
	virtual ~CGeoDataEngine();
//Attributes	
public:
	CdbDBEngine m_dbEngine;
	CdbWorkspace m_dbWorkspace;

//Operations	
public:
	BOOL OpenDatabase(CString filename, CGeoDatabase* db);

	BOOL CreatePointTable(CGeoDatabase& db, CString tablename);
	BOOL CreateLineTable(CGeoDatabase& db, CString tablename);
	BOOL CreatePolygonTable(CGeoDatabase& db, CString tablename);
	BOOL CreateTextTable(CGeoDatabase& db, CString tablename);
	BOOL CreateLabelTable(CGeoDatabase& db, CString tablename);
	BOOL CreateSymbolTable(CGeoDatabase& db, CString tablename);
	BOOL CreateLayerTable(CGeoDatabase& db, CString tablename);
	BOOL CreateWorkspaceTable(CGeoDatabase& db, CString tablename);

	BOOL OpenLayerTable(CGeoDatabase& db, CGeoRecordset* rs);
	BOOL OpenWorkspaceTable(CGeoDatabase& db, CGeoRecordset* rs);
	BOOL OpenTable(CGeoDatabase& db, CString tablename, CGeoRecordset* rs);
	BOOL DeleteTable(CGeoDatabase& db, CString tablename);
	int GetTableType(CGeoRecordset& rs);
	int GetSpatialFieldNum(CGeoRecordset& rs);

	void SetPointSpatialData(CGeoRecordset& rs, POINTFEATURE* pdata);
	void GetPointSpatialData(CGeoRecordset& rs, POINTFEATURE* pdata);
	void SetLineSpatialData(CGeoRecordset& rs, LINEFEATURE* pdata);
	void GetLineSpatialData(CGeoRecordset& rs, LINEFEATURE* pdata);
	void SetPolygonSpatialData(CGeoRecordset& rs, POLYGONFEATURE* pdata);
	void GetPolygonSpatialData(CGeoRecordset& rs, POLYGONFEATURE* pdata);
	void SetTextData(CGeoRecordset& rs, TEXTFEATURE* pdata);
	void GetTextData(CGeoRecordset& rs, TEXTFEATURE* pdata);
	void SetLabelData(CGeoRecordset& rs, LABELFEATURE* pdata);
	void GetLabelData(CGeoRecordset& rs, LABELFEATURE* pdata);
	void SetSymbolData(CGeoRecordset& rs, SYMBOLFEATURE* pdata);
	void GetSymbolData(CGeoRecordset& rs, SYMBOLFEATURE* pdata);
	void SetLayerData(CGeoRecordset& rs, LAYERFEATURE* pdata);
	void GetLayerData(CGeoRecordset& rs, LAYERFEATURE* pdata);
	void SetWorkspaceData(CGeoRecordset& rs, WORKSPACEFEATURE* pdata);
	void GetWorkspaceData(CGeoRecordset& rs, WORKSPACEFEATURE* pdata);

	BOOL CreateNewLayer(CGeoDatabase& db, LAYERFEATURE* pdata);
	void RenameLayer(CGeoDatabase& db, CString oldname, CString newname);

	void BeginTrans();
	void CommitTrans();
	void Rollback();
};

#endif // !defined(AFX_GEODATAENGINE_H__50A3E933_F26E_11D2_B406_97B7537E8706__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -