📄 shapefile.h
字号:
// ShapeFile.h: interface for the CShapeFile class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SHAPEFILE_H__2570391B_328E_425D_B4D4_359935E454DA__INCLUDED_)
#define AFX_SHAPEFILE_H__2570391B_328E_425D_B4D4_359935E454DA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CMapLayer;
//class CQuery;
//class CMapLayerObj;
//class CArrayAttrSel;
//struct CRectDbl;
class CLongLines;
enum
{
SHPNullShape=0,
SHPPoint=1,
SHPPolyLine=3,
SHPPolygon=5,
SHPMultipoint=8,
SHPPointZ=11,
SHPPolyLineZ=13,
SHPPolygonZ=15,
SHPMultiPointZ=18,
SHPPointM=21,
SHPPolyLineM=23,
SHPPolygonM=25,
SHPMultipointM=28,
SHPMultiPatch=31
};//ShapeFile支持的几何类型;
#pragma pack(1)
struct CMainHeader
{
int m_nFileCode; // Big Endian
int m_nUnused1; // ""
int m_nUnused2;
int m_nUnused3;
int m_nUnused4;
int m_nUnused5;
int m_nFileLength;
int m_nVersion; // Little endian
int m_nShapeType; // ""
double m_dXMin;
double m_dYMin;
double m_dXMax;
double m_dYMax;
double m_dZMin;
double m_dZMax;
double m_dMMin;
double m_dMMax;
};//Shapefiles头文件
struct CRecordHeader
{
int m_nRecordNumber; // Big Endian
int m_nContentLength; // ""
};
struct CIndexRecord
{
int m_nOffset;
int m_nContentLength;
};//索引文件的记录内容;
struct CPolyLine
{
double m_dBox[4]; // Little endian
DWORD m_nParts; // ""
DWORD m_nPoints;
public:
CPolyLine();
};
struct CShapePoint
{
double m_dX; // Little endian
double m_dY;
};
struct CDBFHeader
{
BYTE m_nValid;
char m_aDate[3];
int m_nNumRecords;
short m_nHeaderBytes;
short m_nRecordBytes;
BYTE m_nReserved1[3];
BYTE m_nReserved2[13];
BYTE m_nReserved3[4];
};
struct CDBFDescriptor
{
char m_sName[11];
BYTE m_nType;
BYTE m_nAddress[4];
BYTE m_nFieldLength;
BYTE m_nFieldCount;
BYTE m_nReserved1[2];
BYTE m_nWorkArea;
BYTE m_nReserved2[2];
BYTE m_nSetFieldsFlag;
BYTE m_nReserved3[8];
};
struct CDBFRecordPoint
{
char m_sID[8];
char m_sName[32];
};
#define DBF_TEXT 32
#define DBF_NUMBER 16
#define DBF_NDP 7
#define DBF_BOOL 1
#define DBF_DATE 8
class CShapeFile
{
public:
BOOL IsValidMapObject(CAttrArray& aAttr, CArrayAttrSel& aAttrSel);
BOOL ImportPolyLine(CLongLines* pMapLines, FILE* pFile, BOOL bLatLon, CRectDbl* pRect = NULL);
void Convert();
BOOL ImportShapeFile(CMapLayer* pMapLayer, LPCSTR sFileName);
BOOL ExportShapeFile(CMapLayer* pMapLayer, LPCSTR sFileName, int nFlags);
int ImportShapeFileType(LPCSTR sFileName);
BOOL ExportShapeFile(CLongLines* pMapLines, LPCSTR sFileName, int nFlags);
BOOL ImportShapeFile(CLongLines* pMapLines, LPCSTR sFileName);
CShapeFile();
virtual ~CShapeFile();
FILE *m_pFileIn, *m_pFileOut;
CString m_sFileIn, m_sFileOut;
BOOL m_bLatLon;
CMainHeader m_mainheader;
DWORD m_nShape;
CRecordHeader m_recordheader;
enum {LatLon=1, Header=2, PolyLine=4, Points=8, Polygon=16};
protected:
BOOL PolylineToPolygon(CMapLayer*);
BOOL ConvertDBaseFile();
BOOL ConvertIndex();
BOOL ConvertPoints();
BOOL ConvertPolyLine();
BOOL ConvertShapeFile();
void fwritex(void* p, size_t size, DWORD n, FILE* pFile);
CString GetLineText(CMapLayer*, CMapLayerObj*);
CPolyLine GetNumParts(CLongLines* pMapLines);
CPolyLine GetBoundingBox(CMapLayer* pMapLayer, BOOL bLatLon);
CPolyLine GetBoundingBoxPoly(CLongLines* pMapLines, BOOL bLatLon, int i1 = 0, int j2 = 0);
int ReverseBytes(int);
BOOL ExportDBase(CMapLayer* pMapLayer, LPCSTR sFileName);
BOOL ExportDBaseQuery(CMapLayer* pMapLayer, LPCSTR sFileName);
BOOL ExportIndexFile(CMapLayer* pMapLayer, LPCSTR sFileName, CMainHeader& mainheader);
BOOL ExportIndexFile(CPolyLine& polyline, CMapLayer* pMapLayer, LPCSTR sFileName, CMainHeader& mainheader);
BOOL ExportShapeFilePoly(CMapLayer* pMapLayer, LPCSTR sFileName, BOOL bLatLon);
BOOL ExportShapeFilePoint(CMapLayer* pMapLayer, LPCSTR sFileName, BOOL bLatLon);
BOOL ExportPolyLine(CMapLayer* pMapLayer, FILE* pFile, BOOL bLatLon, DWORD nShape);
BOOL ExportPoints(CMapLayer* pMapLayer, FILE* pFile, BOOL bLatLon);
BOOL ImportPoints(CCoordArray* pPoints, FILE* pFile, BOOL bLatLon);
BOOL ImportShapeFile(CLongLines* pMapLines, CCoordArray* pCoords, CMainHeader& mainheader, LPCSTR sFileName, int iFlag);
BOOL ImportMultMapLines(CLongLines* pMapLines, CLongCoord, CLongLines*& pMapLinesNew);
};
#endif // !defined(AFX_SHAPEFILE_H__2570391B_328E_425D_B4D4_359935E454DA__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -