?? shpfile.h
字號:
/************************************************************
文件名: shpFile.h
作者: 錢軍洪 Version : 1.0 Date: 2002/12/21
類描述: 完成Shp、shx、dbf 文件讀取 實現(xiàn)對shp對象的管理及
繪制工作
郵件地址:Visual20@sohu.com
***********************************************************/
#ifndef _SHPFILE_H_
#define _SHPFILE_H_
#include "Global.h"
#include "MapRectangle.h"
#include "MapLine.h"
#include "MapPolygon.h"
#include "MapRender.h"
#include "MapRecordSet.h"
#define FILE_VERSION 1000
#define MAX_BUFFER_SIZE 32768 /*32K*/
/*系統(tǒng)錯誤常量*/
#define FILE_READERR -1
#define FILE_CODEERR -2
#define FILE_VERSIONERR -3
//shp 類型
#define NULLSHP 0
#define POINT 1
#define POLYLINE 3
#define POLYGON 5
#define MULTIPOINT 8
#define POINTZ 11
#define POLYLINEZ 13
#define POLYGONZ 15
#define MULTIPOINTZ 18
#define POINTM 21
#define POLYLINEM 23
#define POLYGONM 25
#define MULTIPOINTM 28
#define MULTIPATCH 31
#pragma pack(4)
typedef struct {
int iFileCode; //文件標識
int iReserved[5]; //保留字節(jié)
int iFileLength; //文件長度
int iVersion; //版本號
int iShpType; //文件類型
double dbXMin;
double dbYMin;
double dbXMax;
double dbYMax;
double dbZMin;
double dbZMax;
double dbMMin;
double dbMMax;
} SHPHEADER;
typedef struct shpRecordHeader {
int iRecordNum; //記錄數(shù)
int iContentLength; //記錄內(nèi)容長度
} SHPRECORDHEADER;
typedef struct shpPoint
{
double dbX;
double dbY;
} SHPPOINT;
typedef struct shpPtContent {
int iShpType;
double dbX;
double dbY;
} SHPPTCONTENT;
typedef struct shxRecord {
int iOffset;
int iContentLength;
} SHXRECORD;
typedef struct shpInfo {
int ishpType; //shp 類型
shpPoint Box[2]; //最大矩形范圍
int iNumParts; //分段數(shù)
int iNumPoints; //shp總共頂點數(shù)
} SHPINFO;
class CMapLayer;
class CShpFile
{
public:
CShpFile();
virtual ~CShpFile();
public:
BOOL ReadShp(CString& csFileName);
CMapRectangle GetExtent();
void SetExtent(CMapRectangle& extent );
int GetShpType( ) {return m_shpType;};
void SetShpType(int& iShpType);
int SearchShape(CMapPoint& pt );
void DrawShp(CDC*pDC , CMapRender* m_pRender , DrawParam& draw );
void FlashShp(CDC*pDC , DrawParam& draw , int iIndex);
protected:
BOOL ReadRecord();
BOOL GetRecordHeader(SHPRECORDHEADER& varHeader );
BOOL GetShpInfo(SHPINFO& varInfo);
int ReadPoint(char* pszBuffer,int& iLength,BOOL& bEof);
int SetRecordPos( int iRecord );
BOOL ReadDBF(CString& csFileName);
private:
void DrawPoint(CDC*pDC , CMapRender* m_pRender , DrawParam& draw );
void DrawPointElement(CDC*pDC,CMapPoint *pPoint,DrawParam& draw );
void DrawPLine(CDC*pDC , CMapRender* m_pRender , DrawParam& draw );
void DrawPLineElement(CDC*pDC,CMapLine *pPline , DrawParam& draw );
void DrawPolygon(CDC*pDC , CMapRender* m_pRender , DrawParam& draw );
void DrawPolygonElement(CDC*pDC , CMapPolygon* pPolygon , DrawParam& draw );
private:
BOOL bShpOpen,bShxOpen;
BOOL m_bBigEndian;
CFile fShp,fShx;
CMapRectangle m_Extent;
CMapRecordSet *pRecordSet;
private:
int m_shpFileLength;
int m_shxFileLength;
int m_iRecordCount;
int m_shpType;
CMapRectangle m_CurMapExtent;
CObList m_ObList;
private:
friend class CMapLayer;
};
#endif //_SHPFILE_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -