亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? environment.cpp

?? 電子地圖 地理信息系統二次開發實例教程-C#和MapObjects實現程序源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include "StdAfx.h"
#include "environment.h"
#include <math.h>
#include "MoPoint.h"
#include "MoPolygon.h"
#include "MapObjects2.h"
#include "MainFrm.h"
#include "NameGisView.h"
#include "AppApi.h"
#include "Crack.h"
//-----------------------------------------------------------------------------------------
CEnvironment::CEnvironment(void)
{
	m_MapOpr = MO_NULL;
	
	m_selSymbol.CreateDispatch(TEXT("MapObjects2.Symbol"));
	m_selSymbol.SetSymbolType(0);  
	m_selSymbol.SetColor(0xff);  
	
	m_szDBName = "";
	m_szSDBPath = "";
	m_AppPath = "";
	m_szHelpPath = "";

	m_nCurrMapIndex = -1;
	m_nMapNum = -1;
	m_mapInfos = NULL;
	
	m_nLayerNum = -1;
	m_layerInfos = NULL;

	m_nIndexNum = -1;
	m_indexInfos = NULL;

	m_szfntStation = "";
	m_chStation = 'a';
	m_nfntStation = 10;

	m_nSelectedLineNum = 0;

	m_selectedFeature = NULL;
	m_selectedSymbol = NULL;
	m_selectedSymbolSize = -1;

	m_selectedScale = -1.0;
	m_buses = NULL;
	m_drawLine = NULL;

	m_cloestPath = new CloestPath(); 
}
//-----------------------------------------------------------------------------------------
CEnvironment::~CEnvironment(void)
{
	// 釋放資源
	if(m_layerInfos)
	{
		delete []m_layerInfos;
		m_layerInfos = NULL;
	}
	if(m_mapInfos)
	{
		delete []m_mapInfos;
		m_mapInfos = NULL;
	}
	if(m_indexInfos)
	{
		delete []m_indexInfos;
		m_indexInfos = NULL;
	}

	if(m_drawLine)
	{
		for(int i=0; i<m_nSelectedLineNum; i++)
		{
			if(m_drawLine[i].pPoint)
			{
				delete m_drawLine[i].pPoint;
				m_drawLine[i].pPoint = NULL;
			}
		}
		delete m_drawLine;
		m_drawLine = NULL;
	}

	if(m_buses)
	{
		delete m_buses;
		m_buses = NULL;
	}
}
//-----------------------------------------------------------------------------------------
// 功能:計算地圖比例尺
// 返回值:地圖比例尺
double CEnvironment::CalcScale(CMap1* map)
{
	HWND hWnd = (HWND)map->GetHWnd();
	HDC hDC = GetDC(hWnd);
	double dpix = GetDeviceCaps(hDC, LOGPIXELSX);
	
	MPoint* pts = new MPoint[2];
	CMoRectangle extent = map->GetExtent();
	pts[0].x = extent.GetLeft();
	pts[0].y = extent.GetTop();
	pts[1].x = extent.GetRight();
	pts[1].y = extent.GetTop();
	
	// 計算pts點對象數組定義的點之間的長度
	double dLen1 = CalcLenght(pts,2);
	CRect rect;
	map->GetWindowRect(&rect);
	double dLen2 = rect.Width() / dpix * 2.54 /100;

	delete pts;
	pts = NULL;

	return dLen1 / dLen2;
}
//-----------------------------------------------------------------------------------------
// 計算一條線的長度
// 參數MPoint*表示一點對象數組
// 參數nSize表示點對象數組中點對象的個數
// 返回值為線的長度
double CEnvironment::CalcLenght(MPoint* pt,int nSize)
{
	double dLength = 0;
	double x1=0,x2=0,y1=0,y2=0;
	int nCenterL = ((int)(pt[0].x)/6+1)*6-3; 

	for(int i=0;i<nSize-1;i++)
	{
		CalGuassFromLB(pt[i].x, pt[i].y, &x1, &y1, nCenterL);
		CalGuassFromLB(pt[i+1].x, pt[i+1].y, &x2, &y2, nCenterL);
		dLength += sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
	}

	return dLength;
}
//-----------------------------------------------------------------------------------------
void CEnvironment::CalGuassFromLB(double dLongitude, double dLatitude, 
								  double* dX, double* dY, long nCenterL)
{			
	int CenterL = (int)nCenterL;

	SubGussFs(dX, dY, dLatitude, dLongitude, CenterL);
	nCenterL = (long)CenterL;
}
//-----------------------------------------------------------------------------------------
void CEnvironment::SubGussFs(double X,double Y,double L0, double* B, double* L)
{
	double p=57.29577951472;
	const double a=6.378245000e+06;
	const double e2=0.00669342162297;
	const double e12=0.00673852541468;
	const double c0=0.157046064172e-06;
	const double c1=0.005051773759;
	const double c2=0.000029837302;
	const double c3=0.000000238189;

	double bf0 = c0*X;
	double bf0c = cos(bf0);
	double bf0s = sin(bf0);
	double bf = bf0 + bf0c * (c1 * bf0s - c2 * pow(bf0s, 3) + c3 * pow(bf0s, 5));
	double bt = tan(bf);
	double bc = cos(bf);
	double bs = sin(bf);
	double bi = e12 * pow(bc,2);
	double v2 = 1.0e+0 +bi;
	double bn = a/sqrt(1.0-e2* pow(bs,2));
	double yn=Y/bn;

	// 計算緯度
	double b1 = -v2 * bt * pow(yn, 2) / 2.0;
	double b2 = -(5.0 + 3.0 * pow(bt, 2) + bi - 9.0 * bi* pow(bt, 2)) 
		        * b1 * pow(yn, 2) / 12.0;
	double b3 = (61.0 + 90.0 * pow(bt, 2) + 45.0 * pow(bt, 4)) * b1 * pow(yn, 4)/ 360.0;
	*B = bf + b1 + b2 + b3;
	*B = *B * p;

	// 計算經度
	double l1 = yn/bc;
	double l2 = -(1.0 + 2.0 * pow(bt, 2) + bi) * l1 * pow(yn, 2) / 6.0;
	double l3 = (5.0 + 28.0 * pow(bt , 2) + 24.0 * pow(bt, 4) 
		         + 6.0 * bi + 8.0 * bi * pow(bt, 2)) 
				 * l1 * pow(yn, 4) / 120.0;
	*L = l1 + l2 + l3;
	*L = *L * p;

	*L += L0;
	if(*L > 360.0)
		*L -= 360.0;
}
//-----------------------------------------------------------------------------------------
void CEnvironment::SubGussFs(double* X, double* Y,double B,double L,int nCenterLongi)
{
	//高斯投影分帶
	int nzonenum;
	if(nCenterLongi==0)
	{
		nzonenum = (int)L/6+1;
		nCenterLongi = nzonenum*6-3;
	}
	else
		nzonenum = (int)nCenterLongi/6+1;

	//以弧度為單位的經緯度數值
	double rB = B / 180 * 3.1415926;
	double rL = (L - nCenterLongi) / 180 * 3.1415926;		//同時計算了中央經線
	//1980坐標系參數
	const double a = 6378245.00;		//長軸
	const double b = 6356863.50;		//短軸
	double sqre1 = ( a * a - b * b) / ( a * a);	//第一偏心率平方
	//B:緯度
	//L:精度
	//子午圈曲率半徑
	double sinb = sin(rB);
	double cosb = cos(rB);
	double M = a *(1 - sqre1) / (1 - sqre1 * sinb * sinb) / sqrt( 1 - sqre1 * sinb * sinb);
	//卯酉圈曲率半徑
	double N = a / sqrt(1 - sqre1 * sinb * sinb);
	double sqrita = N / M - 1;

	//該緯度點到赤道的子午線弧長
	double s = a * (1 - sqre1 ) * (1.00505117739 * rB - 0.00506237764 / 2 
		        * sin(2*rB) + 0.0000106245 / 4 * sin(4*rB) - 0.00000002081 / 
				6 * sin(6 * rB));

	double tanb = tan(rB);
	*X = s + rL * rL * N / 2 * sinb * cosb + rL * rL * rL * rL * N / 24 
		 * sinb * cosb * cosb *cosb * (5 - tanb * tanb + 9 * sqrita * sqrita + 4 * sqrita);
	*Y = rL * N * cosb + rL * rL * rL * N / 6 * cosb * cosb * cosb * 
		(1 - tanb * tanb + sqrita) + rL * rL * rL * rL * rL * N / 120 
		* cosb * cosb * cosb * cosb * cosb * 
		(5 - 18 * tanb * tanb + tanb * tanb * tanb * tanb);
	*Y = *Y + 500000 + nzonenum * 1.0e+6;
}
//-----------------------------------------------------------------------------------------
// 得到某類地物所在圖層是否可見
bool CEnvironment::GetLayerVisible(int disp)
{
	bool bVisible = true;
	int  nType = 2;
	CString szSubType = "";

	// 根據地物類型,設置szSubType變量
	switch ((MapDisp)disp)
	{
		case MO_ALL:
			nType = 1;
			break;
		case MO_HOSPITAL:
			szSubType = "醫院";
			break;
		case MO_SCHOOL:
			szSubType = "教育";
			break;
		case MO_SHOP:
			szSubType = "零售";
			break;
		case MO_TOUR:
			szSubType = "旅游";
			break;
		case MO_GAS:
			break;
		case MO_HOTEL: 
			szSubType = "住宿";
			break;
		case MO_LIBRAY:
			szSubType = "圖書館";
			nType = 3;
			break;
		case MO_MOVIE:
			szSubType = "影劇院、音樂廳";
			nType = 3;
			break;
		case MO_POST:
			szSubType = "郵政";
			break;
		case MO_RESTAURANT:
			szSubType = "餐飲";
			break;
		case MO_WC:
			szSubType = "dddd";
			break;
		case MO_STATION:
			szSubType = "站點";
			nType = 4;
			break;
	}

	int nCount = 0;
	for (int i = 0; i<m_nLayerNum; i ++)
	{
		if (m_layerInfos[i].bCanControl) 
		{
			switch (nType)
			{
				case 1:
					nCount ++;
					if (!m_layerInfos[i].bVisible)
					{
						return false;
					}
					break;
				case 2:
					if (szSubType == m_layerInfos[i].szSubType)
					{
						nCount ++;
						if (!m_layerInfos[i].bVisible)
						{
							return false;
						}
					}
					break;
				case 3:
					if (szSubType == m_layerInfos[i].szSubType2)
					{
						nCount ++;
						if (!m_layerInfos[i].bVisible)
						{
							return false;
						}
					}
					break;
				case 4:
					if (szSubType == m_layerInfos[i].szSubType3)
					{
						nCount ++;
						if (!m_layerInfos[i].bVisible)
						{
							return false;
						}
					}
					break;
			}
		}
	}		

	if (0 == nCount)
		bVisible = false;
	return bVisible;
}
//-----------------------------------------------------------------------------------------
// 功能:設置圖層是否可見
void CEnvironment::SetLayerVisible(int disp, bool bVisible, double dScale)
{
	int  nType = 2;
	CString szSubType = "";
    
	// 根據地物類型設置nType與szSubType變量
	switch(disp)
	{
	case MO_ALL:
		nType = 1;
		break;
	case MO_HOSPITAL:
		szSubType = "醫院";
		break;
	case MO_SCHOOL:
		szSubType = "教育";
		break;
	case MO_SHOP:
		szSubType = "零售";
		break;
	case MO_TOUR:
		szSubType = "旅游";
		break;
	case MO_GAS:
		break;
	case MO_HOTEL: 
		szSubType = "住宿";
		break;
	case MO_LIBRAY:
		szSubType = "圖書館";
		nType = 3;
		break;
	case MO_MOVIE:
		szSubType = "影劇院、音樂廳";
		nType = 3;
		break;
	case MO_POST:
		szSubType = "郵政";
		break;
	case MO_RESTAURANT:
		szSubType = "餐飲";
		break;
	case MO_WC:
		szSubType = "廁所";
		break;
	case MO_STATION:
		szSubType = "站點";
		nType = 4;
		break;
	}
    
	for (int i = 0; i < m_nLayerNum; i ++)
	{
		if(m_layerInfos[i].bCanControl) 
		{
			switch (nType)
			{
			case 1:
				if (!bVisible)
				{
					m_layerInfos[i].bVisible = bVisible;
					// 設置圖層的可見性
					m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
				}
				else
				{
					m_layerInfos[i].bVisible = bVisible;

					if (m_layerInfos[i].dScale > dScale)
						// 設置圖層的可見性
						m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
				}
				break;
			case 2:
				if (szSubType == m_layerInfos[i].szSubType)
				{
					if (!bVisible)
					{
						m_layerInfos[i].bVisible = bVisible;
						m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
					}
					else
					{
						m_layerInfos[i].bVisible = bVisible;
                        
						if (m_layerInfos[i].dScale > dScale)
							m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
					}
				}
				break;
			case 3:
				if (szSubType == m_layerInfos[i].szSubType2)
				{
					if (!bVisible)
					{
						m_layerInfos[i].bVisible = bVisible;
						m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
					}
					else
					{
						m_layerInfos[i].bVisible = bVisible;

						if (m_layerInfos[i].dScale > dScale)
							m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
					}
				}
				break;
			case 4:
				if (szSubType == m_layerInfos[i].szSubType3)
				{
					if (!bVisible)
					{
						m_layerInfos[i].bVisible = bVisible;
						m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
					}
					else
					{
						m_layerInfos[i].bVisible = bVisible;

						if (m_layerInfos[i].dScale > dScale)
							m_layerInfos[i].layer.SetVisible(m_layerInfos[i].bVisible);
					}
				}
				break;
			}
		}
	}
}
//-----------------------------------------------------------------------------------------
// 根據圖層的名稱得到該圖層在地圖的圖層集合中的索引值
// 參數CString szName:圖層的名稱
// 返回值:圖層在圖層集合中的索引值
int CEnvironment::GetLayerIndexByName(CString szName)
{
	int nIndex = -1;

	for (int i=0; i<m_nLayerNum; i ++)
	{		
		if (szName == m_layerInfos[i].szName)
		{
			// 如果圖層的名稱等于輸入的參數,則表示找到
			nIndex = i;
			// 退出循環
			break;
		}
	}

	return nIndex;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频免费观看| 国产一区二区三区香蕉| 日韩精品最新网址| 欧美性猛交xxxx乱大交退制版| 国产剧情一区二区| 岛国精品在线播放| 成人午夜碰碰视频| 国产精品羞羞答答xxdd| 国产福利91精品一区| 国产成人精品在线看| 不卡欧美aaaaa| 日本韩国精品一区二区在线观看| 91在线视频在线| 欧美性受xxxx黑人xyx性爽| 色成人在线视频| 在线观看91精品国产麻豆| 8v天堂国产在线一区二区| 91精品国产入口| 日韩精品一区二区三区三区免费| 精品乱码亚洲一区二区不卡| 国产午夜三级一区二区三| 日韩精品一区二区三区视频播放 | 亚洲一二三区不卡| 亚洲精品菠萝久久久久久久| 亚洲成a人片综合在线| 日韩一区欧美二区| 国产一区二区三区日韩| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美视频第二页| 日韩欧美一区二区视频| 久久精品视频一区二区三区| 亚洲欧美自拍偷拍色图| 亚洲综合一二三区| 久久99在线观看| av在线播放成人| 欧美放荡的少妇| 国产精品麻豆欧美日韩ww| 午夜视频一区在线观看| 成人免费电影视频| 4hu四虎永久在线影院成人| 久久免费国产精品| 亚洲成人动漫在线免费观看| 国产xxx精品视频大全| 777午夜精品免费视频| 欧美激情中文不卡| 麻豆免费精品视频| 欧美日韩一区精品| **网站欧美大片在线观看| 精品一区二区三区视频在线观看 | 亚洲福利一区二区三区| 国产成人亚洲精品青草天美| 欧美精品在线一区二区| 亚洲欧美日韩在线播放| 国产精品香蕉一区二区三区| 日韩一级完整毛片| 亚洲高清视频中文字幕| 91丨porny丨最新| 国产欧美日韩精品a在线观看| 日韩电影在线免费看| 色婷婷久久99综合精品jk白丝 | 91久久精品一区二区三区| 久久久欧美精品sm网站| 免费观看在线综合| 欧美男同性恋视频网站| 亚洲自拍偷拍图区| 91麻豆免费观看| 亚洲精品综合在线| 91视频国产观看| 国产精品成人一区二区艾草| 成人中文字幕电影| 久久精品水蜜桃av综合天堂| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美唯美清纯偷拍| 亚洲一区二区在线免费观看视频| 91麻豆自制传媒国产之光| 中文字幕亚洲在| 99久久国产综合精品色伊| 中文字幕亚洲不卡| proumb性欧美在线观看| 综合色中文字幕| 97se亚洲国产综合自在线不卡| 中文字幕一区av| 97精品超碰一区二区三区| 中文字幕制服丝袜一区二区三区| 成人av电影在线| 亚洲美女视频在线| 欧美亚洲一区二区三区四区| 亚洲一卡二卡三卡四卡| 欧美日本乱大交xxxxx| 午夜精品久久久久久久久久| 精品视频色一区| 秋霞午夜av一区二区三区| 337p亚洲精品色噜噜| 国模大尺度一区二区三区| 久久久久免费观看| 成人h精品动漫一区二区三区| 亚洲一区成人在线| 91免费版pro下载短视频| 亚洲香肠在线观看| 成人激情免费电影网址| 亚洲同性同志一二三专区| 91国模大尺度私拍在线视频| 婷婷开心久久网| 亚洲国产精品ⅴa在线观看| 91麻豆国产自产在线观看| 秋霞影院一区二区| 国产精品三级av| 7777精品伊人久久久大香线蕉超级流畅 | 欧美私人免费视频| 久久er精品视频| 亚洲女子a中天字幕| 91精品国产综合久久久久久| 国产超碰在线一区| 亚洲国产精品人人做人人爽| 欧美xxxx在线观看| 色综合久久88色综合天天免费| 蜜桃一区二区三区四区| 亚洲天堂精品视频| 精品久久久久av影院 | 蜜桃在线一区二区三区| 国产精品久久久久久久久久久免费看 | 成人夜色视频网站在线观看| 亚洲一区电影777| 国产日产欧产精品推荐色 | 99re这里都是精品| 国产在线播精品第三| 亚洲大片免费看| 中文字幕国产精品一区二区| 欧美一级二级在线观看| 在线亚洲一区二区| 国产成人精品亚洲日本在线桃色| 午夜影视日本亚洲欧洲精品| 国产精品天天看| 精品国产乱码久久| 在线观看av不卡| 成熟亚洲日本毛茸茸凸凹| 亚洲www啪成人一区二区麻豆| 中日韩av电影| 久久综合色8888| 日韩欧美国产1| 91精品国产乱码久久蜜臀| 在线中文字幕一区| 91丝袜高跟美女视频| 99国产精品久久| 一本一道久久a久久精品综合蜜臀| 国产伦理精品不卡| 国产精品一区二区久久精品爱涩 | 884aa四虎影成人精品一区| 欧美中文字幕一区二区三区 | 一区二区三区四区亚洲| 国产精品福利一区二区| 国产精品拍天天在线| 国产欧美精品一区二区色综合 | 色8久久精品久久久久久蜜| 成人丝袜高跟foot| 北条麻妃国产九九精品视频| 成人动漫一区二区三区| 国产成人免费视频精品含羞草妖精| 国产麻豆日韩欧美久久| 成人在线一区二区三区| 成a人片国产精品| 97国产一区二区| 欧美三级日韩三级国产三级| 精品视频免费在线| 91精品久久久久久蜜臀| 3atv一区二区三区| 久久久亚洲精品一区二区三区| 久久免费午夜影院| 国产精品伦理一区二区| 曰韩精品一区二区| 日本中文字幕不卡| 国产精品一区二区久激情瑜伽| av动漫一区二区| 色综合一个色综合亚洲| 欧美日韩国产不卡| 日韩欧美一区二区不卡| 国产视频一区不卡| 亚洲男帅同性gay1069| 亚洲国产美女搞黄色| 免费看欧美美女黄的网站| 精品一二线国产| 懂色av中文一区二区三区| 在线精品观看国产| 精品国产一区二区三区久久影院| 国产精品水嫩水嫩| 日日欢夜夜爽一区| 丰满放荡岳乱妇91ww| 欧美精品xxxxbbbb| 中日韩免费视频中文字幕| 亚洲一二三四在线| 丁香网亚洲国际| 91精品黄色片免费大全| 中文字幕亚洲一区二区va在线| 毛片不卡一区二区| 欧美综合一区二区| 国产欧美综合在线观看第十页| 亚洲国产日韩在线一区模特| 国产福利不卡视频| 在线成人小视频| 亚洲色图第一区|