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

📄 shapefile.h

📁 用vc和cj60lib做的读取shape文件的源代码.还有些小问题没做完。
💻 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 + -