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

📄 mo20view.cpp

📁 电子地图的代码 实现一些空间功能 比如说放大 缩小等 是以美国为例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MO20View.cpp : implementation of the CMO20View class
//

#include "stdafx.h"
#include "MO20.h"

#include "MO20Doc.h"
#include "MO20View.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMO20View

IMPLEMENT_DYNCREATE(CMO20View, CFormView)

BEGIN_MESSAGE_MAP(CMO20View, CFormView)
	//{{AFX_MSG_MAP(CMO20View)
	ON_COMMAND(ID_BUTTON32771, OnButton32771)
	ON_COMMAND(ID_BUTTON32772, OnButton32772)
	ON_COMMAND(ID_BUTTON32773, OnButton32773)
	ON_COMMAND(ID_BUTTON32774, OnButton32774)
	ON_COMMAND(IDC_EVENTCHECK, OnLabel)
	ON_WM_SIZE()
	ON_COMMAND(ID_BUTTON32776, OnButton32776)
	ON_COMMAND(ID_BN_DOWN, OnBnDown)
	ON_COMMAND(ID_BN_LEFT, OnBnLeft)
	ON_COMMAND(ID_BN_RIGHT, OnBnRight)
	ON_COMMAND(ID_BN_UP, OnBnUp)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(IDC_SEARCH, OnMapSearch)

	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMO20View construction/destruction

CMO20View::CMO20View()
	: CFormView(CMO20View::IDD)
{
	//{{AFX_DATA_INIT(CMO20View)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CMO20View::~CMO20View()
{
}

void CMO20View::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMO20View)
	DDX_Control(pDX, IDC_MAP1, m_map);
	DDX_Control(pDX, IDC_MAP2, m_map1);
	//}}AFX_DATA_MAP
}

BOOL CMO20View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CMO20View::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	char  szPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,szPath);
CString currentDir(szPath);
CString dataPath(TEXT("..\\USA"));
// Add data to the map.
/*AddLayer(m_map, dataPath + TEXT("\\states.shp"), moLimeGreen);

AddLayer(m_map, dataPath + TEXT("\\ushigh.shp"), moMagenta);
AddLayer(m_map, dataPath + TEXT("\\counties.shp"), moPaleYellow);

AddLayer(m_map, dataPath + TEXT("\\capitals.shp"), moRed);*/
	CDataDir dataDir;

  // Try to open the shape file
	try
	{
		//AddLayer(m_map, TEXT(dataDir.GetPath() + "..\\USA\\states.shp"), moLimeGreen);
		AddLayer(m_map, dataPath + TEXT("\\states.shp"), moLimeGreen);

AddLayer(m_map, dataPath + TEXT("\\ushigh.shp"), moMagenta);
AddLayer(m_map, dataPath + TEXT("\\counties.shp"), moPaleYellow);

AddLayer(m_map, dataPath + TEXT("\\capitals.shp"), moRed);
    AddLayer(m_map1, TEXT(dataDir.GetPath() + "..\\USA\\states.shp"), moLightYellow);
  }
	catch (...)
	{
		::MessageBox(this->GetSafeHwnd(), _T("Default shape file not found."), _T("MoveMap"), MB_ICONEXCLAMATION);
	}


CMoLayers	layers(m_map.GetLayers());
	CMoMapLayer counties(layers.Item(COleVariant(TEXT("Counties"))));

	CMoClassBreaksRenderer cbRenderer;	// Create from scratch
	cbRenderer.CreateDispatch(TEXT("MapObjects2.ClassBreaksRenderer"));
	cbRenderer.SetField(TEXT("MOBILEHOME"));

	CMoRecordset  recs(counties.GetRecords());
	CMoStatistics stats(recs.CalculateStatistics(TEXT("MOBILEHOME")));
	double breakVal = stats.GetMean() - (stats.GetStdDev() * 3.0);
	double min = stats.GetMin();	double max = stats.GetMax();
	for (int i = 0; i < 7; i++)	{
		if (min <= breakVal &&  breakVal <= max)     {
			int breakCount = cbRenderer.GetBreakCount();
			cbRenderer.SetBreakCount(breakCount + 1);
			cbRenderer.SetBreak(breakCount, breakVal);
		}
		breakVal = breakVal + stats.GetStdDev();
	}
	cbRenderer.RampColors(moCyan, moBlue);
	counties.SetRenderer(cbRenderer);


	// Append code after the code for the Counties renderer 

/*// Set up states renderer
CMoMapLayer	states(layers.Item(COleVariant(TEXT("States"))));
CMoDotDensityRenderer ddRenderer;	// Create from scratch
ddRenderer.CreateDispatch(TEXT("MapObjects2.DotDensityRenderer"));
ddRenderer.SetField(TEXT("NO_FARMS87"));
recs = states.GetRecords();
stats = recs.CalculateStatistics(TEXT("NO_FARMS87"));
ddRenderer.SetDotValue(stats.GetMax() / 100.0);
states.SetRenderer(ddRenderer); 

//对sates添加注记
CMoLayers layers1(m_map.GetLayers());
CMoMapLayer states1(layers1.Item(COleVariant(TEXT("states"))));
CMoLabelRenderer labRenderer;
labRenderer.CreateDispatch(TEXT("MapObjects2.LabelRenderer"));
labRenderer.SetField(TEXT("state_NAME"));
states1.SetRenderer(labRenderer);

//对capitals添加注记
CMoMapLayer capitals(layers.Item(COleVariant(TEXT("capitals"))));
CMoLabelPlacer labelPlacer;
labelPlacer.CreateDispatch(TEXT("MapObjects2.labelPlacer"));
labelPlacer.SetField(TEXT("city_NAME"));
labelPlacer.SetPlaceOn(false);
labelPlacer.SetPlaceAbove(false);
labelPlacer.SetPlaceBelow(true);
labelPlacer.SetDrawBackground(true);//是否显示注记对象要素
capitals.SetRenderer(labelPlacer);*/


	// Build a search expression from the text in IDC_SEARCHEDIT

}

/////////////////////////////////////////////////////////////////////////////
// CMO20View printing

BOOL CMO20View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMO20View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMO20View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CMO20View::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
		CRect frame(0, 0, ::GetDeviceCaps(pDC->m_hAttribDC, HORZRES), 
   ::GetDeviceCaps(pDC->m_hAttribDC, VERTRES));
	FrameMap(m_map, pDC, frame);

}

/////////////////////////////////////////////////////////////////////////////
// CMO20View diagnostics

#ifdef _DEBUG
void CMO20View::AssertValid() const
{
	CFormView::AssertValid();
}

void CMO20View::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CMO20Doc* CMO20View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMO20Doc)));
	return (CMO20Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMO20View message handlers

void CMO20View::OnButton32771() 
{
	// TODO: Add your command handler code here
	CMoRectangle r(m_map.GetFullExtent());
	m_map.SetExtent(r);
	
}

void CMO20View::OnButton32772() 
{
	// TODO: Add your command handler code here
	f1=0;
	f2=1;
	f3=0;
	f4=0;
		m_map.SetMousePointer(54);
	
	
}

void CMO20View::OnButton32773() 
{
	// TODO: Add your command handler code here
		f1=0;
	f2=0;
	f3=1;
	f4=0;

	m_map.SetMousePointer(51);
}

void CMO20View::OnButton32774() 
{
	// TODO: Add your command handler code here
		f1=0;
	f2=0;
	f3=0;
	f4=1;
		m_map.SetMousePointer(52);
	
	
}

BEGIN_EVENTSINK_MAP(CMO20View, CFormView)
    //{{AFX_EVENTSINK_MAP(CMO20View)
	ON_EVENT(CMO20View, IDC_MAP1, -605 /* MouseDown */, OnMouseDownMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CMO20View, IDC_MAP1, 2 /* BeforeLayerDraw */, OnBeforeLayerDrawMap1, VTS_I2 VTS_I4)
	ON_EVENT(CMO20View, IDC_MAP1, 4 /* AfterTrackingLayerDraw */, OnAfterTrackingLayerDrawMap1, VTS_I4)
	ON_EVENT(CMO20View, IDC_MAP2, -605 /* MouseDown */, OnMouseDownMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CMO20View, IDC_MAP2, -606 /* MouseMove */, OnMouseMoveMap2, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CMO20View::OnMouseDownMap1(short Button, short Shift, long X, long Y) 
{
	// TODO: Add your control notification handler code here


	 if(f2)
	 {
		 m_map.Pan();
	 }
 
	 if(f3)
	 {
		 CMoRectangle r(m_map.TrackRectangle());
		if (LPDISPATCH(r))
			m_map.SetExtent(r);

	 }
	   if(f4)
	 {CMoRectangle r(m_map.GetExtent());
		r.ScaleRectangle(1.1);
		m_map.SetExtent(r);
	}

	   	if(f5)
	{
		// search for a highway within a N pixel tolerance 设置容差
	const double tolerance = m_map.ToMapDistance((float)10);
	CMoLayers	layers(m_map.GetLayers());
	CMoMapLayer	highways(layers.Item(COleVariant(TEXT("USHigh"))));
	CMoPoint	mapPt(m_map.ToMapPoint((float)X, (float)Y));
	CMoRecordset	selectedHighways(highways.SearchByDistance(mapPt,tolerance, TEXT("")));
	if (selectedHighways.GetEof())
		::MessageBeep(MB_ICONQUESTION); // no highways found
	else   {
		CMoMapLayer  counties(layers.Item(COleVariant(TEXT("Counties"))));
		m_selection = counties.SearchShape(selectedHighways, 
				moEdgeTouchOrAreaIntersect, TEXT(""));
	//	m_map.Refresh(); // Redraw map
		VARIANT va;
VariantInit(&va);
va.vt = VT_NULL; 
CMoTrackingLayer m_trackLayer(m_map.GetTrackingLayer());
m_trackLayer.Refresh(true,va); 
	m_map.SetMousePointer(59);

	}	



	}

⌨️ 快捷键说明

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