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

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

?? environment.cpp

?? 電子地圖 地理信息系統二次開發實例教程-C#和MapObjects實現程序源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//-----------------------------------------------------------------------------------------
// 根據地圖名稱得到當前地圖在地圖集合中的索引
int CEnvironment::GetMapIndex(CString szMapName)
{
	int nIndex = -1;
	
	for (int i = 0; i<m_nMapNum; i ++)
	{
		if (szMapName == m_mapInfos[i].szName)
		{
			// 如果地圖名稱等于輸入的參數,則表示找到
			nIndex = i;
			// 退出循環
			break;
		}
	}
	
	return nIndex;
}
//-----------------------------------------------------------------------------------------
// 功能:計算地圖比例尺
// 返回值:地圖比例尺
double CEnvironment::CalcScale(CMap1* map, CMoRectangle extent)
{
	HWND hWnd = (HWND)map->GetHWnd();
	HDC hDC = GetDC(hWnd);
	double dpix = GetDeviceCaps(hDC, LOGPIXELSX);
	
	MPoint* pts = new MPoint[2];
	pts[0].x = extent.GetLeft();
	pts[0].y = extent.GetTop();
	pts[1].x = extent.GetRight();
	pts[1].y = extent.GetTop();
    
	CRect rect;
	map->GetWindowRect(&rect);
	double dLen1 = CalcLenght(pts,2);
	double dLen2 = rect.Width() / dpix * 2.54 /100;
	
	delete pts;
	pts = NULL;

	return dLen1 / dLen2;
}
//-----------------------------------------------------------------------------------------
void CEnvironment::ExecuteSpatialByPoint(CMap1* map, CMoPoint shape)
{
	for (int i = 0; i<m_nLayerNum; i ++)
	{
		// 先計算地圖顯示比例尺
		double dScale = CalcScale(map);
		if (dScale > 8000)
		{
			dScale = dScale/10000;
			dScale = dScale / 5000;
		}
		else
		{
			dScale = dScale/10000;
			dScale = dScale / 2500;
		}
        
		if (m_layerInfos[i].layer.GetVisible() && m_layerInfos[i].bCanSelected)  
			m_layerInfos[i].rsSel = m_layerInfos[i].layer.SearchByDistance(shape.m_lpDispatch, dScale,"");
		else
			m_layerInfos[i].rsSel =	NULL;
	}
}
//-----------------------------------------------------------------------------------------
void CEnvironment::ExecuteSpatialByRect(CMoRectangle shape, int sMode)
{
	for (int i = 0; i<m_nLayerNum; i ++)
	{
		if (m_layerInfos[i].layer.GetVisible() && m_layerInfos[i].bCanSelected)  
			m_layerInfos[i].rsSel = m_layerInfos[i].layer.SearchShape(shape.m_lpDispatch, sMode,"");
		else
			m_layerInfos[i].rsSel = NULL;
	}
}
//-----------------------------------------------------------------------------------------
void CEnvironment::ExecuteSpatialByPolygon(CMoPolygon shape, int sMode)
{
	for (int i = 0; i<m_nLayerNum; i ++)
	{
		if (m_layerInfos[i].layer.GetVisible() && m_layerInfos[i].bCanSelected)  
			m_layerInfos[i].rsSel = m_layerInfos[i].layer.SearchShape(shape.m_lpDispatch, sMode,"");
		else
			m_layerInfos[i].rsSel = NULL;
	}
}
//-----------------------------------------------------------------------------------------
// 高亮度繪制選擇的地物
void CEnvironment::DrawRecordset(CMap1* map)
{
	for (int i = 0; i < m_nLayerNum; i ++)
	{
		if (m_layerInfos[i].layer.GetVisible())
		{
			if (m_layerInfos[i].rsSel != NULL)
			{
				// 創建一符號對象
				CMoSymbol sym;
				sym.CreateDispatch(_T("MapObjects2.Symbol")); 
				sym.SetSymbolType(m_layerInfos[i].layer.GetSymbol().GetSymbolType()); 
				sym.SetStyle(m_layerInfos[i].layer.GetSymbol().GetStyle());
				sym.SetSize(m_layerInfos[i].layer.GetSymbol().GetSize());
				sym.SetColor(0xff);
                
				if (m_layerInfos[i].nCharacterIndex >= 0 && 
					m_layerInfos[i].layer.GetShapeType() == moShapeTypePoint)
				{
					sym.SetSymbolType(moPointSymbol);
					sym.GetFont().SetName(m_layerInfos[i].szFontName);
					sym.SetStyle(4);
					sym.SetSize(m_layerInfos[i].layer.GetSymbol().GetSize());
					sym.SetCharacterIndex(m_layerInfos[i].nCharacterIndex);
				}
                
				// 移動到第一條記錄
				m_layerInfos[i].rsSel.MoveFirst();
                
				while  (!m_layerInfos[i].rsSel.GetEof())
				{
					CMoField tempField = m_layerInfos[i].rsSel.GetFields().Item(COleVariant("Shape"));
					// 用構建的符號對象繪制地物
					map->DrawShape(tempField.GetValue().pdispVal,sym);
					// 移動到下一條記錄
					m_layerInfos[i].rsSel.MoveNext(); 
				}	
			}
		}        
	}
}
//-----------------------------------------------------------------------------------------
void CEnvironment::ClearSelRsts()
{
	for (int i = 0; i < m_nLayerNum; i ++)
	{
		m_layerInfos[i].rsSel = NULL;
	}
}
//-----------------------------------------------------------------------------------------
void CEnvironment::DrawSelectedShape(CMap1* map)
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CNameGisView* pMapView = (CNameGisView*)(pMainWnd->m_wndSplitter.GetPane(0,0));

	CMoSymbol sym;
	sym.CreateDispatch(_T("MapObjects2.Symbol")); 
	sym.SetColor(0xff);
	
	if (m_selectedSymbol == NULL)
		map->DrawShape(m_selectedFeature,sym );
	else
	{
		double dScale = CalcScale(map);
		m_selectedSymbol.SetSize(pMapView->ReCalcFontSize(m_selectedSymbolSize, dScale));
		map->DrawShape(m_selectedFeature, m_selectedSymbol );
	}
}
//-----------------------------------------------------------------------------------------
// 從指定表中得到指定的地名對應的數據表
// 參數szName指需要查找其對應數據表的地名名稱
// 參數szTableName表示從該表中來查找地名對應的數據表名稱
// 返回值為數據表名稱
CString CEnvironment::GetTableName(CString szName, CString szTbleName)
{
	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		tmpDB->Open(m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return "";
	}

	CString szTableName = "";
	CDaoRecordset rs(tmpDB);
	try
	{
		CString szSQL;
		szSQL = "Select * From " + szTbleName + " Where 名稱 ='"+szName+"'";
		rs.Open(dbOpenDynaset, szSQL);

		if(rs.GetRecordCount() != 0)
		{
			COleVariant var;
			var = rs.GetFieldValue("屬性表名");
			szTableName = CCrack::strVARIANT(var);
		}
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		tmpDB->Close();
		delete tmpDB;
		e->Delete();
		return "";
	}

	if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			tmpDB->Close();
		}

		delete tmpDB;
		tmpDB = NULL;
	}

	return szTableName;
}
//-----------------------------------------------------------------------------------------
// 根據地名得到地名所在的圖層名
// <param name="szName">string 地名名稱</param>
// <param name="szTblName">string 索引表名稱</param>
// <returns>圖層名稱</returns>
CString CEnvironment::GetLayerName(CString szName, CString szTblName)
{
	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		tmpDB->Open(m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return "";
	}

	CString szTableName = "";
	CDaoRecordset rs(tmpDB);
	try
	{
		CString szSQL;
		szSQL = "Select * From " + szTblName + " Where 名稱 ='"+szName+"'";
		rs.Open(dbOpenDynaset, szSQL);

		if(rs.GetRecordCount() != 0)
		{
			COleVariant var;
			var = rs.GetFieldValue("圖層名");
			szTableName = CCrack::strVARIANT(var);
		}
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		tmpDB->Close();
		delete tmpDB;
		e->Delete();
		return "";
	}

	if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			tmpDB->Close();
		}

		delete tmpDB;
		tmpDB = NULL;
	}

	return szTableName;
}
//-----------------------------------------------------------------------------------------
// 查詢某點指定距離范圍內的地物
// 參數dX表示某點的X坐標
// 參數dY表示某點的Y坐標
// 參數dDistance表示查詢半徑
// 參數pListBox表示將查詢得到的地名顯示在該列表框中
// 返回值為查詢得到的地物書目
long CEnvironment::SearchByDistance(double dX, double dY,double dDistance, CListBox* pListBox)
{
	bool bClosest = false;
    
	if (dDistance <= 0.0)
	{
		bClosest = true;
		dDistance = 1000000000;
	}
    
	pListBox->ResetContent();
    
	for (int i = 0; i < m_nLayerNum; i ++)
	{
		if (m_layerInfos[i].bSelected
			&& m_layerInfos[i].layer.GetShapeType() == moShapeTypePoint)
		{
			CMoRecordset rs;
			CString	szPlaceName = "";
			double	dMinDist = -1.0;
			double	dDist = 0.0;
            
			rs = m_layerInfos[i].layer.GetRecords();
			if (rs)
			{
				rs.MoveFirst();

				while (!rs.GetEof())
				{					
					CMoFields fields(rs.GetFields());
					CMoField  shapeField(fields.Item(COleVariant(TEXT("Shape"))));
					CMoPoint pt(shapeField.GetValue().pdispVal);
				
					MPoint pts[2];
					pts[0].x = dX;
					pts[0].y = dY;
					pts[1].x = pt.GetX();
					pts[1].y = pt.GetY();

					dDist = CalcLenght(pts, 2);
					if (dDistance >= CalcLenght(pts, 2))
					{
						if (bClosest)
						{
							//查找最近							
							CString szTemp = rs.GetFields().Item(COleVariant("名稱")).GetValueAsString();

							if (szTemp == "")
								continue;

							if (((dMinDist < 0) || (dMinDist > dDist)) 
								&& (m_szPlaceName != szTemp))
							{
								dMinDist = dDist;
								szPlaceName = szTemp;
							}
						}
						else
						{
							pListBox->AddString(rs.GetFields().Item(COleVariant("名稱")).GetValueAsString()); 
						}
					}

					rs.MoveNext(); 
				}

				if (bClosest && (szPlaceName != "") 
					&& (m_szPlaceName != szPlaceName) )
					pListBox->AddString(szPlaceName); 
			}
		}
		else
		{
			m_layerInfos[i].rsSel = NULL;
		}
	}
    
	return pListBox->GetCount();
}
//-----------------------------------------------------------------------------------------
// 功能:得到公交線路上車站
// 參數:PathNode node 乘車路線結構
//       nIndex 第幾次換乘
//       Buses buses 車站數組
//       int nCount 車站數目
// 返回值:true 成功
BOOL CEnvironment::GetStation(PathNode* node, int nIndex, Buses* buses, int* nCount)
{
	PathNode* line = node;
    
	int nOrder1, nOrder2;
	nOrder1 = GetStationOrder(line->szRoutineName[nIndex], line->szFromStationName[nIndex]);  
	nOrder2 = GetStationOrder(line->szRoutineName[nIndex], line->szToStationName[nIndex]);  
    
	if ((nOrder1 < 0) || (nOrder2 < 0))
		return FALSE;
	
	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		tmpDB->Open(m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	CString szTableName = "";
	CDaoRecordset rs(tmpDB);
	try
	{
		CString szSQL;
		char buf1[20], buf2[20];
		itoa(nOrder1, buf1, 10);
		itoa(nOrder2, buf2, 10);
		szSQL = "Select * From 公交車站路線 Where 線路名 ='" + line->szRoutineName[nIndex] + "' And 順序 Between " + CString(buf1) + " And " + CString(buf2);
		rs.Open(dbOpenDynaset, szSQL);

		if(rs.GetRecordCount() == 0)
			return FALSE;

		COleVariant var;
		while(!rs.IsEOF())
		{
			var = rs.GetFieldValue("站名");
			CString szStation = CCrack::strVARIANT(var);
            
			if (!GetStationPt(szStation, &(buses->pts[*nCount])))
			{
				buses->pts[*nCount].x = -1;
				buses->pts[*nCount].y = -1;
			}
			*nCount ++;      
			rs.MoveNext();
		}        

		rs.Close();// 關閉數據表
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}
    
    if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			tmpDB->Close();
		}

		delete tmpDB;
		tmpDB = NULL;
	}

	return TRUE;
}
//-----------------------------------------------------------------------------------------
//功能:得到公交線路上車站
//參數:string szLineName 公交線路名
//      Buses buses 車站數組
//      int nCount 車站數目
//返回值:true 成功
BOOL CEnvironment::GetStation(CString szLineName, Buses* pBuses, int* nCount)
{
	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		tmpDB->Open(m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	CString szTableName = "";
	CDaoRecordset rs(tmpDB);
	try
	{
		CString szSQL;
		szSQL = "Select * From 公交車站路線 Where 線路名 ='"+szLineName +"'" ;
		rs.Open(dbOpenDynaset, szSQL);
        
		if (0 == rs.GetRecordCount())
			return FALSE;

        COleVariant var;
		while(!rs.IsEOF())
		{			
			var = rs.GetFieldValue("站名");
			CString szStation = CCrack::strVARIANT(var);
            
			if (!GetStationPt(szStation, &(pBuses->pts[*nCount])))
			{				
				pBuses->pts[*nCount].x = -1;
				pBuses->pts[*nCount].y = -1;
			}
			
			(*nCount) ++;
			rs.MoveNext();
		}

		rs.Close(); // 關閉數據表

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区国产盗摄色噜噜| 欧美欧美欧美欧美首页| 国产一区二区中文字幕| 日韩电影在线看| 日韩精品五月天| 日韩精品福利网| 奇米色777欧美一区二区| 午夜在线电影亚洲一区| 亚洲成人激情社区| 美女mm1313爽爽久久久蜜臀| 青青草国产成人av片免费| 日韩精品乱码免费| 国产综合一区二区| 成人app软件下载大全免费| 99这里只有精品| 91黄色免费版| 日韩欧美一二三四区| 日韩午夜精品电影| 久久久不卡影院| 亚洲精品福利视频网站| 天堂在线亚洲视频| 国产一区二区精品久久| 91片黄在线观看| 91精品国产高清一区二区三区蜜臀| 欧美变态tickle挠乳网站| 亚洲精品自拍动漫在线| 午夜成人在线视频| 国产一区高清在线| 日本道色综合久久| 日韩一区二区免费在线观看| 欧美日本一区二区三区四区| 久久奇米777| 一区二区三区在线视频观看 | 欧美一区二区三区喷汁尤物| 精品盗摄一区二区三区| 亚洲色图欧美激情| 极品尤物av久久免费看| 成人晚上爱看视频| 日韩一区二区在线免费观看| 国产精品人人做人人爽人人添| 一级精品视频在线观看宜春院| 日本不卡在线视频| 91视频一区二区| 欧美成人官网二区| 亚洲一二三四在线| 成人app在线| 2欧美一区二区三区在线观看视频| 亚洲人成在线播放网站岛国| 久久国产精品99精品国产| 色猫猫国产区一区二在线视频| 欧美精品一区二区三区四区| 亚洲影院理伦片| www.色综合.com| 久久欧美中文字幕| 麻豆久久一区二区| 欧美日韩国产经典色站一区二区三区 | 日本乱人伦一区| 国产人妖乱国产精品人妖| 日本网站在线观看一区二区三区| 99国产精品久久久久久久久久 | 免费成人在线影院| 在线影院国内精品| 综合久久给合久久狠狠狠97色 | 欧美日韩国产一二三| 欧美国产日韩精品免费观看| 九九**精品视频免费播放| 在线播放/欧美激情| 一二三四社区欧美黄| 色综合久久久久网| 亚洲人成精品久久久久| hitomi一区二区三区精品| 国产视频一区二区在线| 国产精品一区二区无线| 精品少妇一区二区三区日产乱码| 亚洲成人在线观看视频| 欧美日韩高清在线播放| 午夜精品免费在线| 在线播放视频一区| 日本不卡一二三| 日韩欧美国产一区二区三区 | 日韩欧美国产午夜精品| 美洲天堂一区二卡三卡四卡视频 | 色综合久久中文综合久久97| 日韩码欧中文字| 色网站国产精品| 亚洲国产精品久久人人爱| 欧美日韩国产天堂| 日韩va欧美va亚洲va久久| 欧美一区二区三区在线视频| 久久se精品一区二区| 精品福利av导航| 不卡的电影网站| 亚洲综合视频在线观看| 欧美一区二区观看视频| 国产在线播放一区三区四| 国产欧美日韩不卡| 91在线云播放| 天天色图综合网| 国产亚洲一区二区三区在线观看| 成人看片黄a免费看在线| 亚洲日本丝袜连裤袜办公室| 欧美日韩在线三级| 精油按摩中文字幕久久| 亚洲视频免费观看| 日韩一级片网站| 成人午夜又粗又硬又大| 午夜欧美在线一二页| 国产日韩欧美电影| 欧美色男人天堂| 国产a区久久久| 亚洲成人在线观看视频| 欧美精品一区二区三区四区 | 国产在线精品视频| 中文字幕中文乱码欧美一区二区| 欧洲精品视频在线观看| 精品一区二区三区免费观看| 亚洲欧美日本韩国| 久久一留热品黄| 欧美吻胸吃奶大尺度电影| 国产在线国偷精品产拍免费yy| 亚洲一级二级在线| 国产情人综合久久777777| 4438亚洲最大| 色婷婷av一区二区| 国产白丝精品91爽爽久久| 蜜桃精品视频在线| 亚洲永久精品大片| 中文字幕精品在线不卡| 久久青草国产手机看片福利盒子| 欧美日韩大陆一区二区| 91在线精品一区二区三区| 国产精品一级片在线观看| 日韩成人午夜精品| 亚洲一区中文在线| 中文字幕亚洲视频| 久久久99精品免费观看不卡| 91精品国产免费| 51精品久久久久久久蜜臀| 欧美日韩精品一区二区天天拍小说 | 久久先锋影音av| 日韩视频中午一区| 777xxx欧美| 91精选在线观看| 欧美日韩一区成人| 欧美日韩激情一区二区| 91久久精品日日躁夜夜躁欧美| 99久久精品一区二区| 成人黄色片在线观看| 成人av第一页| 日本福利一区二区| 在线观看91视频| 欧美日韩一区二区三区四区| 欧美日韩一区二区在线观看 | 欧美午夜在线观看| 色老汉一区二区三区| 91九色最新地址| 欧美日韩精品一区二区天天拍小说 | 性欧美疯狂xxxxbbbb| 亚洲不卡av一区二区三区| 亚洲午夜日本在线观看| 亚洲.国产.中文慕字在线| 日韩av网站免费在线| 日本亚洲免费观看| 国产精品亚洲一区二区三区在线| 国产美女娇喘av呻吟久久| 成人激情开心网| 色噜噜狠狠色综合中国| 欧美三级欧美一级| 亚洲精品一区二区在线观看| 国产免费观看久久| 亚洲黄色尤物视频| 免费成人在线网站| 成人激情av网| 在线看不卡av| 日韩精品一区二区三区视频| 国产喂奶挤奶一区二区三区| 亚洲天堂a在线| 日韩在线一区二区三区| 国产91精品一区二区麻豆网站| 91丨九色丨尤物| 欧美一区二区三区婷婷月色| 久久嫩草精品久久久久| 最新国产の精品合集bt伙计| 亚洲成人av一区二区| 国产真实精品久久二三区| 91污片在线观看| 欧美成人乱码一区二区三区| 国产精品美女一区二区| 全国精品久久少妇| 成人avav影音| 精品国产乱码久久久久久牛牛| 国产精品高潮呻吟| 日韩av二区在线播放| 大美女一区二区三区| 7777精品伊人久久久大香线蕉 | 蜜臀久久99精品久久久久久9| 国产麻豆一精品一av一免费 | 国产69精品一区二区亚洲孕妇| 一本在线高清不卡dvd| 久久日韩精品一区二区五区|