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

📄 public_tgisview.cpp

📁 公交查询系统源代码 是武汉的 提供简单的查询和乘车方案 vc++
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	else
		pCmdUI->SetCheck(FALSE);
}
//----------------------------------------------------------------------------
void CPublic_TGISView::OnUpdateBankFtr(CCmdUI* pCmdUI)
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();	
	if (pMainWnd->m_environment.GetLayerVisible(MO_BANK))
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}
//---------------------------------------------------------------------------
void CPublic_TGISView::OnUpdateGovFtr(CCmdUI* pCmdUI)
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();	
	if (pMainWnd->m_environment.GetLayerVisible(MO_GOV))
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}



//-------------------------------------------------------------------
void CPublic_TGISView::OnUpdatePostFtr(CCmdUI* pCmdUI)
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();	
	if (pMainWnd->m_environment.GetLayerVisible(MO_POST))
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}

//-------------------------------------------------------------------------------
void CPublic_TGISView::OnUpdateBusStaFtr(CCmdUI* pCmdUI)
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();	
	if (pMainWnd->m_environment.GetLayerVisible(MO_BUSSTATION))
		pCmdUI->SetCheck(TRUE);
	else
		pCmdUI->SetCheck(FALSE);
}

//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowAllFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断当前地物的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_HOSPITAL); 

	// 如果没有显示,则显示所有地物
	environment->SetLayerVisible(MO_BANK, !bVisibled, dScale);
	environment->SetLayerVisible(MO_GOV, !bVisibled,dScale);
	environment->SetLayerVisible(MO_HOSPITAL, !bVisibled, dScale);
	environment->SetLayerVisible(MO_HOTEL, !bVisibled, dScale);
	environment->SetLayerVisible(MO_POST,!bVisibled, dScale);
	environment->SetLayerVisible(MO_SCHOOL, !bVisibled, dScale);
	environment->SetLayerVisible(MO_SHOP, !bVisibled, dScale);
	environment->SetLayerVisible(MO_BUSSTATION, !bVisibled, dScale);
	environment->SetLayerVisible(MO_TOUR, !bVisibled, dScale);
	
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowShopFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断当前地物的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_SHOP);
	environment->SetLayerVisible(MO_SHOP, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowTourFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断当前地物的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_TOUR);
	environment->SetLayerVisible(MO_TOUR, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowSchoolFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断当前地物的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_SCHOOL);
	environment->SetLayerVisible(MO_SCHOOL, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowHospitalFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断医院的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_HOSPITAL);
	environment->SetLayerVisible(MO_HOSPITAL, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowHotelFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断宾馆的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_HOTEL);
	environment->SetLayerVisible(MO_HOTEL, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowBankFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断银行的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_BANK);
	environment->SetLayerVisible(MO_BANK, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}
//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowGovFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	//地图比例尺
	// 判断加油站的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_GOV);
	environment->SetLayerVisible(MO_GOV, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}



//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowPostFeature()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	// 地图比例尺
	// 判断邮局的显示状态
	BOOL bVisibled = environment->GetLayerVisible(MO_POST);
	environment->SetLayerVisible(MO_POST, !bVisibled, dScale);
	m_map.SetExtent(m_map.GetExtent());
	pMainWnd->ReloadLayerCtrlView();
}

//----------------------------------------------------------------------------------------------
void CPublic_TGISView::OnShowBusStationFeature()
{
	CBusQueryDlg busDlg;
	busDlg.DoModal();
}



////////////////////////////////////////////////
//------------------------------------------------------------------------------
//功能:缩放时,重新设置注记、符号的大小
void CPublic_TGISView::ReLabelLayers()
{
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CEnvironment* environment = &(pMainWnd->m_environment);
	double dScale = environment->CalcScale(&m_map);	//地图比例尺
	
	//放大缩小时,循环设置图层的符号和注记
	for (int i = 0; i < environment->m_nLayerNum; i ++)
	{
		//图层不显示,下一个循环
		if (!environment->m_layerInfos[i].bVisible)
			continue;
		
		//重新设置注记
		if (environment->m_layerInfos[i].bLable	&& 
			environment->CalcScale(&m_map)<environment->m_layerInfos[i].dScale)
		{
			CMoLabelPlacer myRD = environment->m_layerInfos[i].layer.GetRenderer();
			
			if (myRD != NULL && myRD.GetField() != "")
			{				
				CMoTextSymbol textSym(myRD.GetDefaultSymbol());
				CMoFont fnt;
				fnt.InitializeFont();
				fnt.SetName(textSym.GetFont().GetName());
				fnt.SetSize(ReCalcFontSize(
					environment->m_layerInfos[i].nFontSize,dScale));
				textSym.SetFont(fnt.GetFontDispatch());				
			}
			else
			{
				if ( myRD == NULL)
				{
					//设置注记
					myRD.CreateDispatch(_T("MapObjects2.LabelPlacer"));
				}
				if(myRD.GetField() == "")
					myRD.SetField("名称");
				myRD.SetDrawBackground(environment->m_layerInfos[i].bBackground) ;
				myRD.SetAllowDuplicates(TRUE);
				myRD.SetMaskLabels(FALSE);
                
				if (environment->m_layerInfos[i].layer.GetShapeType() == moShapeTypeLine)   
					myRD.SetPlaceAbove(TRUE);
				else
					myRD.SetPlaceAbove(FALSE);
				myRD.SetPlaceOn(TRUE);
                
				CMoFont fnt;
				fnt.InitializeFont();
				fnt.SetName(pMainWnd->FONTNAME);
				fnt.SetSize(ReCalcFontSize(
					 environment->m_layerInfos[i].nFontSize,dScale));
				myRD.GetDefaultSymbol().SetFont(fnt.GetFontDispatch());				

				environment->m_layerInfos[i].layer.SetRenderer(myRD);
			}
		}
		else
		{
			//显示比例尺小于注记显示比例尺,则不显示注记
			if (environment->m_layerInfos[i].bLable)
			{
				CMoLabelPlacer myRD = environment->m_layerInfos[i].layer.GetRenderer();
				if (myRD != NULL)
					myRD.SetField("");
			}
		}

		//重新设置图层的符号
		if (environment->m_layerInfos[i].layer.GetSymbol() != NULL 
			&& environment->m_layerInfos[i].layer.GetShapeType() == moShapeTypePoint)
		{
			environment->m_layerInfos[i].layer.GetSymbol().SetSize(
				ReCalcFontSize(environment->m_layerInfos[i].nSymSize, dScale));
		}        
	}
    
	//街道注记
	if (environment->m_layerRoad)
	{
		CMoLabelPlacer roadRD = environment->m_layerRoad.GetRenderer();
		if (dScale < 100000)
		{
			roadRD.SetField("名称");
			CMoTextSymbol textSym(roadRD.GetDefaultSymbol());
			CMoFont fnt;
			fnt.InitializeFont();
			fnt.SetName(textSym.GetFont().GetName());
			fnt.SetSize(ReCalcFontSize(10,dScale));
			textSym.SetFont(fnt.GetFontDispatch());			
		}
		else
		{
			roadRD.SetField("");
		}
	}
      
}

//--------------------------------------------------------------------------
// 功能:根据显示比例,返回符号和注记的大小。
// <param name="nSize">short,原始大小</param>
// <param name="dScale">double,当前显示比例</param>
// <returns>short,返回计算后的符号和注记的大小</returns>
short CPublic_TGISView::ReCalcFontSize(short nSize, double dScale)
{
	if (dScale > 15000)
		return nSize;
    
	if (dScale > 10000)
		return (short)(nSize * 1.0);
    
	return (short)(nSize * 1.0);
}

//--------------------------------------------------------------------------
//--------------------------------------------------------------------
//放大
void CPublic_TGISView::OnZoomIn()
{	
	if(m_nCurTool == ID_MAP_ZOOMIN)
	{
		m_nCurTool = NULL;
		m_map.SetMousePointer(moArrow);
	}
	else
	{
		m_nCurTool = ID_MAP_ZOOMIN;
		m_map.SetMousePointer(moZoomIn);
	}
}
//-------------------------------------------------------------------------
void CPublic_TGISView::OnUpdateZoomIn(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( m_nCurTool == ID_MAP_ZOOMIN);	
}
//----------------------------------------------------------------------
//缩小
void CPublic_TGISView::OnZoomOut()
{	
	if(m_nCurTool == ID_MAP_ZOOMOUT)
	{
		m_nCurTool = NULL;
		m_map.SetMousePointer(moArrow);
	}
	else
	{
		m_nCurTool = ID_MAP_ZOOMOUT;
		m_map.SetMousePointer(moZoomOut);
	}
}
//------------------------------------------------------------------------------

void CPublic_TGISView::OnUpdateZoomOut(CCmdUI* pCmdUI)
{
	pCmdUI->SetCheck( m_nCurTool == ID_MAP_ZOOMOUT);
}
//------------------------------------------------------------------------------
//显示全部
void CPublic_TGISView::OnFullExtent()
{
	m_map.SetExtent(m_map.GetFullExtent());
	ReLabelLayers();
	ReShowLayers();
    
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CHawkView* pHawkView = (CHawkView*)(pMainWnd->m_wndSplitter2.GetPane(1,0));
	pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
}
//--------------------------------------------------------------------------------
//漫游函数
void CPublic_TGISView::OnPanMap()
{
	if(m_nCurTool == ID_MAP_PAN)
	{
		m_nCurTool = NULL;
		m_map.SetMousePointer(moArrow);
	}
	else
	{
		m_nCurTool = ID_MAP_PAN;
		m_map.SetMousePointer(moPan);
	}
}
//-------------------------------------------------------------------------------
void CPublic_TGISView::OnUpdatePanMap(CCmdUI* pCmdUI)
{
	pCmdUI->SetCheck(m_nCurTool == ID_MAP_PAN);
}



BEGIN_EVENTSINK_MAP(CPublic_TGISView, CFormView)
    //{{AFX_EVENTSINK_MAP(CPublic_TGISView)
	ON_EVENT(CPublic_TGISView, IDC_MAP1, -605 /* MouseDown */, OnMouseDownMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CPublic_TGISView, IDC_MAP1, -606 /* MouseMove */, OnMouseMoveMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CPublic_TGISView, IDC_MAP1, 3 /* AfterLayerDraw */, OnAfterLayerDrawMap1, VTS_I2 VTS_BOOL VTS_I4)
	ON_EVENT(CPublic_TGISView, IDC_MAP1, 4 /* AfterTrackingLayerDraw */, OnAfterTrackingLayerDrawMap1, VTS_I4)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CPublic_TGISView::OnMouseDownMap1(short Button, short Shift, long X, long Y) 
{
	// TODO: Add your control notification handler code here
	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();

	if(m_nCurTool == ID_MAP_ZOOMIN) // 放大
	{
		double dScale = pMainWnd->m_environment.CalcScale(&m_map);
		if (dScale < pMainWnd->MAX_SCALE)
			return;
        
		CMoRectangle rect;
		rect = m_map.TrackRectangle();
        
		dScale = pMainWnd->m_environment.CalcScale(&m_map, rect);
		double dWidth = rect.GetWidth();
		double dHeight = rect.GetHeight(); 
        
		if ((dWidth < 0.00005) || ( dHeight < 0.00005) 
			|| (dScale < pMainWnd->MAX_SCALE))
		{
			CMoPoint  pt = m_map.ToMapPoint((float)X, (float)Y); 
			CMoRectangle r = m_map.GetExtent();
			r.ScaleRectangle(0.6667);
			r.Offset(-(r.GetCenter().GetX() - pt.GetX()),
				-(r.GetCenter().GetY() - pt.GetY() ));
			m_map.SetExtent(r);
		}
		else
		{
			m_map.SetExtent(rect);
		}
        
		ReLabelLayers();
		ReShowLayers();
        
		CHawkView* pHawkView = (CHawkView*)(pMainWnd->
			                m_wndSplitter2.GetPane(1,0));
		pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
	}
	else if(m_nCurTool == ID_MAP_ZOOMOUT) // 缩小
	{
		CMoRectangle rect;
		rect = m_map.TrackRectangle();
		if ((rect == NULL) || (rect.GetWidth() < 0.00005) 
			|| (rect.GetHeight() < 0.00005))
		{
			rect = m_map.GetExtent();
			rect.ScaleRectangle(1.5);
		}
		else
		{	
			double dRate = m_map.GetExtent().GetWidth() / rect.GetWidth() * 10;  
			rect.ScaleRectangle(dRate);
		}
		
		m_map.SetExtent(rect);
		CHawkView* pHawkView = (CHawkView*)(pMainWnd->
			              m_wndSplitter2.GetPane(1,0));
		pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
		ReLabelLayers();
		ReShowLayers();
	}
	else if(m_nCurTool == ID_MAP_PAN) // 漫游
	{
		m_map.Pan(); 
		CHawkView* pHawkView = (CHawkView*)(pMainWnd->
			              m_wndSplitter2.GetPane(1,0));
		pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
	}
	else if(m_nCurTool == ID_MAP_POINTSEL) // 点选择
	{
		CMoPoint  pt;
		pt = m_map.ToMapPoint((float)X, (float)Y);
		// 执行空间点查询
		pMainWnd->m_environment.ExecuteSpatialByPoint(&m_map, pt); 
		m_map.SetExtent(m_map.GetExtent()) ; 		
		CMapControlView* pCtrlView = (CMapControlView*)(pMainWnd->m_wndSplitter2.GetPane(0,0));
		pCtrlView->m_OperaTab.SetCurSel(2);
		pCtrlView->m_MapIndexTreeView.ModifyStyle(WS_VISIBLE, 0, 0);
		pCtrlView->m_LayerTreeView.ModifyStyle(WS_VISIBLE, 0, 0);
		pCtrlView->m_ResultListBox.ModifyStyle(0, WS_VISIBLE, 0);
		pCtrlView->m_ContentBtn.ModifyStyle(0, WS_VISIBLE, 0);

⌨️ 快捷键说明

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