/*! @class
********************************************************************************
<PRE>
类名称 : CShapeToVml
功能 : 实现shape文件向Vml格式的转化,生成Html文件,并生成一个文本报告
--------------------------------------------------------------------------------
备注 : 版本:PBeta_3 完善日期:2007.12.22.23:20
典型用法 : {
CShapeToVml my;
my.GetShapeFile();//获得shape文件,并做初始化工作
my.ReadeHead(); //读取shape文件的头记录,判断是否为shape,并作初始化工作
my.WriteData(); //对shape文件的数据就行操作,转化开始
}
--------------------------------------------------------------------------------
作者 : flyingfan
</PRE>
*******************************************************************************/
#include<iostream>
using namespace std;
#include<fstream>
整型int的字节长
#define INT_LENGTH 4
/double的字节长
#define DOUBLE_LENGTH 8
/用于写html代码的宏数据
#define HTML_HEAD "<!--wangflying--><HTML xmlns:v><STYLE>v//:*{behavior:url(#default#VML);}</STYLE><BODY bgcolor=/"#eeeeee/">"
#define A "<v:polyline style=/"Z-INDEX:1;LEFT:0;POSITION:absolute;TOP:400/" points=/""
#define B "/" filled=/"t/" strokecolor=/"red/" fillcolor=/"white/"/>"
/**************************************************
结构体,便于存贮坐标,加快算法
***************************************************/
struct POINT
{
double X;
double Y;
};
typedef struct POINT Point;
#pragma once
class CShapeToVml
{
///构造函数
public:
CShapeToVml(void);
public:
//!获得shape文件,并做初始化工作
void GetShapeFile();
public:
//!读取shape文件的头记录,判断是否为shape,并作初始化工作
void ReadeHead();
public:
//!对shape文件的数据就行操作,转化开始
void WriteData();
public:
//析构函数,关闭文件流
~CShapeToVml(void);
private:
//类自己需要的属性
int m_nMemo ;// m_nMemo用于偏转文件指针,具体是记录了文件操作的字节位置
char * m_pShapeFile ; //shape文件路径
int m_nTemp ;//读取到的整型数据,先存在这里,而后反转
double m_dbTemp ;//缓存读取到的double数据
private:
文件流
ifstream m_inFile; //shape源文件
ofstream m_outTxt; //生成的文本报告
ofstream m_outHtml; //生成的Html文件
private:
/与shape文件相关的属性
int m_nFile_Code;
int m_nFile_Length;
int m_nVersion;
int m_nShape_Type;
double m_dbXmin;
double m_dbYmin;
double m_dbXmax;
double m_dbYmax;
private:
//!反转 整型int 数据的字节顺序
void Revers(int * i_data);
private:
//!从二进制文本读取 双精度double 数据
double dbGetData();
private:
//!从二进制文本读取 整型int 数据
int iGetData();
private:
/**************************************************
读取 点坐标 Point 的函数
m_inFile为源文件
length来判断该记录是否读完
m_outTxt生成文本报告
m_outHtml生成html文件
***************************************************/
void ReadPoint(int & length);
private:
/**************************************************
读取 点坐标 MultiPoint 的函数
m_inFile为源文件
length来判断该记录是否读完
m_outTxt生成文本报告
m_outHtml生成html文件
***************************************************/
void ReadMultiPoint(int & length);
private:
/**************************************************
读取 线 PolyLine 的函数
m_inFile为源文件
length来判断该记录是否读完
m_outTxt生成文本报告
m_outHtml生成html文件
***************************************************/
void ReadPolyLine(int & length);
private:
/**************************************************
读取 面PolyGon 的函数
m_inFile为源文件
length来判断该记录是否读完
m_outTxt生成文本报告,
m_outHtml生成html文件
具体的实现和PolyLine相似
***************************************************/
void ReadPolyGon(int & length);
};