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

📄 environment.h

📁 程序编写环境为Visual Studio.NET 2002
💻 H
字号:
#pragma once

#include "momaplayer.h"
#include "morecordset.h"
#include "MoRectangle.h"
#include "MoDataConnection.h"
#include "MoSymbol.h"
#include "Map.h"
#include "NrstPath.h"

//-----------------------------------------------------------------------------------------
/*LayerInfo用于包含地图中某个图层的信息*/
struct LayerInfo
{
	CString szName;        // 名称
	CString szLayerName;   // 图层名称
	CString szFileName;    // 图层对应的文件名称
	CString szTableName;   // 对应的属性表文件名称
	CString szFieldName;   // 字段名称
	CString szType;        // 大类类型
	CString szSubType;	   // 中类类型
	CString szSubType2;    // 小类类型
	CString szSubType3;    // 次小类类型
	bool bCanControl;      // 可控制状态
	bool bVisible;         // 可显示状态,只能通过图层控制来改变
	bool bSelected;        // 是否已经被选择										
	bool bCanSelected;     // 可选择状态
	bool bBackground;      // 是否作为背景
	bool bLable;           // 是否为地物加入注记
	double dScale;         // 图层的比例尺
	double dShowScale;     // 图层的显示比例尺
	int	nCharacterIndex;   // 图层注记的字体索引
	CString szFontName;    // 图层注记的字体名称
	int  nFontSize;        // 图层注记的字体大小
	int	nSymSize;          // 符号大小
	UINT	nSymColor;     // 符号颜色 
	
	CMoMapLayer	layer;     // 图层对象
	CMoRecordset rsSel;    // 记录集合
};
//-----------------------------------------------------------------------------------------
// MPoint结构用于定义地图中的点
struct MPoint
{
	double x;  // X坐标值
	double y;  // Y坐标值
};
//-----------------------------------------------------------------------------------------
// MLine类用于定义地图上的一条线对象
class MLine
{
public:
	int nPointNumber; // 线对象包含的点的数目
	MPoint* pPoint;   // 点坐标数组
	
public:
	MLine()  // 构造函数
	{
		nPointNumber = 0;
		pPoint = NULL;
	}
};
//-----------------------------------------------------------------------------------------
// MapOpr枚举类型用于定义用户当前在地图上的操作类型
enum MapOpr 
{
	MO_NULL=0,    // 无操作
	MO_ZOOMIN,    // 放大操作
	MO_ZOOMOUT,   // 缩小操作
	MO_ZOOMFULL,  // 全图显示操作
	MO_PAN,       // 漫游操作
	MO_POINTSEL,  // 点选择操作
	MO_RECTSEL,   // 巨型选择操作
	MO_CIRCLESEL, // 圆选择操作
	MO_POLYGONSEL,// 多边形选择操作
	MO_INFO,      // 获取信息操作
	MO_LINEMEAS,  // 长度量算操作
	MO_POLYMEAS,  // 面积量算操作
	MO_SEACHBYDIST, // 根据距离搜索地物操作
	MO_CLOSEST      // 最短距离查询操作
};
//-----------------------------------------------------------------------------------------
// MapDisp枚举类型用于定义在地图中显示的地物类型
enum MapDisp 
{
	MO_ALL = 0,     // 所有地物
	MO_SCHOOL = 1,  // 学校
	MO_TOUR,        // 旅游点
	MO_HOSPITAL,    // 医院
	MO_SHOP,        // 购物
	MO_HOTEL,       // 宾馆
	MO_GAS,         // 加油站
	MO_BANK,        // 银行
	MO_MOVIE,       // 电影音乐厅
	MO_RESTAURANT,  // 餐馆
	MO_WC,          // 公共厕所
	MO_POST,        // 邮局
	MO_LIBRAY,      // 图书馆
	MO_STATION      // 公交
};
//-----------------------------------------------------------------------------------------
// MapInfo结构用于包含某一地图的信息
struct MapInfo
{
	CString szName;       // 地图名称
	CString szMetaTable;  // 元数据表名
	CString szIndexTable; // 索引表名
	CString szType;       // 类型
	
	CMoRectangle rect;    // 地图包括的范围
};
//-----------------------------------------------------------------------------------------
// IndexInfo结构包括某一地区的信息
struct IndexInfo
{
	CString szName;         // 名称
	double dX;              // 中心点的X坐标
	double dY;              // 中心点的Y坐标
	CMoRectangle m_extent;  // 显示范围
};
//-----------------------------------------------------------------------------------------
// 公交站点类
class Buses
{
public:
	int		nNum;  // 点的数目
	MPoint* pts;   // 坐标数组

public:
	Buses()
	{
		nNum = 200;
		pts = NULL;
		pts = new MPoint[200]; 		
	}

	~Buses()
	{
		if(pts)
		{
			delete pts;
			pts = NULL;
		}
	}
};
//-----------------------------------------------------------------------------------------
class CloestPath // 用于计算最短路径的类
{
public:
	MPoint* pt1;  // 起点
	MPoint* pt2;  // 终点
public:
	CloestPath()
	{
		pt1 = NULL;
		pt2 = NULL;
	}
};
//-----------------------------------------------------------------------------------------
class CEnvironment
{
public:	
	CString BUSLINE_LAYERNAME;    // 包含公交路线信息的图层的名称
	CString BUSSTATION_LAYERNAME; // 包含公交站点信息的图层的名称
	UINT    SYMBOL_COLOR_NONE;    // 默认符号的颜色
	
	CString    m_szDBName;    // 元数据库名称
	CString    m_szSDBPath;   // 元数据库所在的路径
	CString    m_AppPath;     // 应用程序的路径
	CString    m_szHelpPath;  // 帮助文件所在的路径

	CMoDataConnection m_db;   // 与元数据库连接的对象

	int m_nSelectedLineNum;   // 选择的线对象的数目
	int      m_nCurrMapIndex; // 当前地图在地图集合中的索引
	int      m_nMapNum;       // 地图集合中包含的地图的数目
	MapInfo* m_mapInfos;      // 地图集合中地图信息数组
	
	int         m_nLayerNum;  // 当前地图中包含的图层的数目
	LayerInfo*  m_layerInfos; // 图层信息数组
	
	int         m_nIndexNum;  // 索引数目
	IndexInfo*  m_indexInfos; // 索引信息数组
	
	CMoSymbol   m_selSymbol;    // 显示选择地物的符号
	CString     m_szfntStation; // 显示公交站点的字体的名称
	char        m_chStation;    // 显示公交站点的样式
	int         m_nfntStation;  // 显示公交站点的字体的大小
	
	int         m_MapOpr;       // 用户当前操作类型

	CMoMapLayer m_layerRoad;    // 道路图层

	LPDISPATCH          m_selectedFeature;
	CMoSymbol           m_selectedSymbol;
	short				m_selectedSymbolSize;

	double				m_dDistance;		//最短距离查询
	CString				m_szPlaceName;

	bool				m_bPathInit; // 路径初始化状态	
	CString				m_szBusFilter; // 公交查询类型过滤字符串

	double				m_selectedScale;
	MLine*				m_drawLine; 
	Buses*				m_buses;

	CNrstPath           m_path; // 最短路径对象

	CloestPath*			m_cloestPath;
public:
	CEnvironment(void);
	~CEnvironment(void);
public:
	double CalcScale(CMap1* map);
	double CalcScale(CMap1* map, CMoRectangle extent);
	double CalcLenght(MPoint* pt,int nSize);
	void CalGuassFromLB(double dLongitude, double dLatitude, double* dX, double* dY, long nCenterL);
	void SubGussFs(double X,double Y,double L0, double* B, double* L);
	void SubGussFs(double* X, double* Y,double B,double L,int nCenterLongi);
	bool GetLayerVisible(int disp);
	void SetLayerVisible(int disp, bool bVisible, double dScale);
	int GetLayerIndexByName(CString szName);

	int GetMapIndex(CString szMapName);

	void ExecuteSpatialByPoint(CMap1* map, CMoPoint shape);
	void ExecuteSpatialByRect(CMoRectangle shape, int sMode);
	void ExecuteSpatialByPolygon(CMoPolygon shape, int sMode);

	void DrawRecordset(CMap1* map);
	void ClearSelRsts();
	void DrawSelectedShape(CMap1* map);

	CString GetTableName(CString szName, CString szTbleName);
	CString GetLayerName(CString szName, CString szTblName);
	long SearchByDistance(double dX, double dY,double dDistance, CListBox* listBox);

	BOOL GetStation(CString szLineName, Buses* pBuses, int* nCount);
	BOOL GetStation(PathNode* node, int nIndex, Buses* buses, int* nCount);
	int GetStationOrder(CString szLineName, CString szStationName);
	BOOL GetStationPt(CString szStationName, MPoint* pt);

	MPoint FromMapPoint(CMap1* map, double x,double y);

	CMoLine GetLine(CString szName);
	CMoPoint GetPoint(CString szName);
	MLine* CreateLine(CMoLine moline);

	BOOL IsBusLine(CString szName);
	CMoMapLayer GetLayerByName(CString szName);
	BOOL IsStation(CString szName);

	CString GetFieldName(CString szName);
	double GetLineLength(CMoLine line);
	double GetPolygonLength(CMoPolygon poly);
	double GetPolygonArea(CMoPolygon poly);
	double CalcArea(MPoint* pt,int nSize);
};

⌨️ 快捷键说明

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