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

📄 wycview.cpp

📁 基于MO+VC++开发的公交查询系统代码!实现公交线路的查询输入修改等操作
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		return;
	layer.SetGeoDataset(geoDataset);
	
	// Add a record for each pointgon to the GeoDataset
	CMoRecordset recs(layer.GetRecords());
	CMoFields fields(recs.GetFields());
	CString featureName;
	for (int i = 0; i < m_points.GetSize(); i++)
	{
		recs.AddNew();
		
		// "Shape" = m_point
		SetValue(fields, TEXT("Shape"), LPDISPATCH(*m_points[i]));
		
		// "Name" = featureName
		featureName.Format("%s%d", "point", i);
		SetValue(fields, TEXT("Name"), featureName);
		
		// "Area" = m_point.GetArea()
		SetValue(fields, TEXT("Area"), 0.0);
		
		// "Perimeter" = m_point.GetPerimeter()
		SetValue(fields, TEXT("Perimeter"), 0.0);
		
		recs.Update();
	}
	
	// Add new layer to map
	CMoLayers layers(m_map.GetLayers());
	layers.Add(layer);
	ReleasePoints();
}

void CWycView::SaveLines(CMoDataConnection &conn, CMoTableDesc &tableDesc)
{
	// Create a GeoDataset and associate it with a new layer
	// The VARIANT is needed now for the HasZ and HasM parameters for the AddGeoDataset
	// function which has changed since MapObjects 1.2
	VARIANT va;
	VariantInit(&va);
	va.vt = VT_BOOL;
	va.boolVal = false;
	
	CMoGeoDataset geoDataset(conn.AddGeoDataset(GetFileTitle(m_path), moLine, tableDesc, va ,va));
	ASSERT(LPDISPATCH(geoDataset));
	CMoMapLayer layer;
	if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))
		return;
	layer.SetGeoDataset(geoDataset);
	
	// Add a record for each line to the GeoDataset
	CMoRecordset recs(layer.GetRecords());
	CMoFields fields(recs.GetFields());
	CString featureName;
	for (int i = 0; i < m_lines.GetSize(); i++)
	{
		recs.AddNew();
		
		// "Shape" = m_line
		SetValue(fields, TEXT("Shape"), LPDISPATCH(*m_lines[i]));
		
		// "Name" = featureName
		featureName.Format("%s%d", "line", i);
		SetValue(fields, TEXT("Name"), featureName);
		
		// "Area" = m_point.GetArea()
		SetValue(fields, TEXT("Area"), 0.0);
		
		// "Perimeter" = m_point.GetPerimeter()
		SetValue(fields, TEXT("Perimeter"), m_lines[i]->GetLength());
		
		recs.Update();
	}
	
	// Add new layer to map
	CMoLayers layers(m_map.GetLayers());
	layers.Add(layer);
	ReleaseLines();
}

void CWycView::SaveRectangles(CMoDataConnection &conn, CMoTableDesc &tableDesc)
{
	// Create a GeoDataset and associate it with a new layer
	// The VARIANT is needed now for the HasZ and HasM parameters for the AddGeoDataset
	// function which has changed since MapObjects 1.2
	VARIANT va;
	VariantInit(&va);
	va.vt = VT_BOOL;
	va.boolVal = false;
	
	CMoGeoDataset geoDataset(conn.AddGeoDataset(GetFileTitle(m_path), moPolygon, tableDesc, va ,va));
	CMoMapLayer layer;
	if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))
		return;
	layer.SetGeoDataset(geoDataset);
	
	// Add a record for each polygon to the GeoDataset
	CMoRecordset recs(layer.GetRecords());
	CMoFields fields(recs.GetFields());
	CString featureName;
	
	// will be writing out the rectangle as a polygon as shape files don't know about Rectangles
	// Use Buffer(0,Extent) to create a polygon.
	//
	// need to set up a Variant for the Extent parameter
	CMoRectangle extent(m_map.GetFullExtent());
	VariantInit(&va);
	va.vt = VT_DISPATCH;
	va.pdispVal = extent.m_lpDispatch;
	
	for (int i = 0; i < m_rectangles.GetSize(); i++)
	{
		recs.AddNew();
		
		CMoRectangle rect(*m_rectangles[i]);
		CMoPolygon poly(rect.Buffer(0.0,va));
		
		// "Shape" = poly
		SetValue(fields, TEXT("Shape"), LPDISPATCH(poly.m_lpDispatch));
		
		// "Name" = featureName
		featureName.Format("%s%d", "Rectangle", i);
		SetValue(fields, TEXT("Name"), featureName);
		
		// "Area" = poly.GetArea()
		SetValue(fields, TEXT("Area"), poly.GetArea());
		
		// "Perimeter" = poly.GetPerimeter()
		SetValue(fields, TEXT("Perimeter"), poly.GetPerimeter());
		
		recs.Update();
	}
	
	// Add new layer to map
	CMoLayers layers(m_map.GetLayers());
	layers.Add(layer);
	ReleaseRectangles();
}

void CWycView::ReleaseLines()
{
	for (int i = 0; i < m_lines.GetSize(); i++)
	{
		m_lines[i]->ReleaseDispatch();
		delete m_lines[i];
	}
	m_lines.RemoveAll();
}



void CWycView::ReleaseRectangles()
{
	for (int i = 0; i < m_rectangles.GetSize(); i++)
	{
		m_rectangles[i]->ReleaseDispatch();
		delete m_rectangles[i];
	}
	m_rectangles.RemoveAll();
}

void CWycView::OnAddellipse() 
{
	m_curTool = ID_ADDELLIPSE;
	m_map.SetMousePointer(moArrow);
}

void CWycView::OnMapAddpoly() 
{
	m_curTool = ID_MAP_ADDPOLY;
	m_map.SetMousePointer(moArrow);
}

void CWycView::SavePolygons(CMoDataConnection &conn, CMoTableDesc &tableDesc)
{
		// Create a GeoDataset and associate it with a new layer
	// The VARIANT is needed now for the HasZ and HasM parameters for the AddGeoDataset
	// function which has changed since MapObjects 1.2
	VARIANT va;
	VariantInit(&va);
	va.vt = VT_BOOL;
	va.boolVal = false;

	CMoGeoDataset geoDataset(conn.AddGeoDataset(GetFileTitle(m_path), moPolygon, tableDesc, va ,va));
	CMoMapLayer layer;
	if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))
		return;
	layer.SetGeoDataset(geoDataset);
	
	// Add a record for each polygon to the GeoDataset
	CMoRecordset recs(layer.GetRecords());
	CMoFields fields(recs.GetFields());
	CString featureName;
	for (int i = 0; i < m_polys.GetSize(); i++)
	{
		recs.AddNew();
		
		// "Shape" = m_poly
		SetValue(fields, TEXT("Shape"), LPDISPATCH(*m_polys[i]));
		
		// "Name" = featureName
		featureName.Format("%s%d", "poly", i);
		SetValue(fields, TEXT("Name"), featureName);
		
		// "Area" = m_poly.GetArea()
		SetValue(fields, TEXT("Area"), m_polys[i]->GetArea());
		
		// "Perimeter" = m_poly.GetPerimeter()
		SetValue(fields, TEXT("Perimeter"), m_polys[i]->GetPerimeter());
		
		recs.Update();
	}
	
	// Add new layer to map
	CMoLayers layers(m_map.GetLayers());
	layers.Add(layer);
	ReleasePolygons();
}

void CWycView::SaveEllipses(CMoDataConnection &conn, CMoTableDesc &tableDesc)
{
	// Create a GeoDataset and associate it with a new layer
	// The VARIANT is needed now for the HasZ and HasM parameters for the AddGeoDataset
	// function which has changed since MapObjects 1.2
	VARIANT va;
	VariantInit(&va);
	va.vt = VT_BOOL;
	va.boolVal = false;
	
	CMoGeoDataset geoDataset(conn.AddGeoDataset(GetFileTitle(m_path), moPolygon, tableDesc, va ,va));
	CMoMapLayer layer;
	if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))
		return;
	layer.SetGeoDataset(geoDataset);
	
	// Add a record for each ellipses to the GeoDataset
	CMoRecordset recs(layer.GetRecords());
	CMoFields fields(recs.GetFields());
	CString featureName;
	
	// will be writing out the ellipse as a polygon as shape files don't know about Ellipses
	// Use Buffer(0,Extent) to create a polygon.
	//
	// need to set up a Variant for the Extent parameter
	CMoRectangle extent(m_map.GetFullExtent());
	VariantInit(&va);
	va.vt = VT_DISPATCH;
	va.pdispVal = extent.m_lpDispatch;
	
	for (int i = 0; i < m_ellipses.GetSize(); i++)
	{
		recs.AddNew();
		
		
		CMoEllipse ellipse(*m_ellipses[i]);
		CMoPolygon poly(ellipse.Buffer(0.0,va));
		
		// Shape = poly
		SetValue(fields,TEXT("Shape"),LPDISPATCH(poly.m_lpDispatch));
		
		// "Name" = featureName
		featureName.Format("%s%d", "ellipse", i);
		SetValue(fields, TEXT("Name"), featureName);
		
		// "Area" = poly.GetArea()
		SetValue(fields, TEXT("Area"), poly.GetArea());
		
		// "Perimeter" = poly.GetPerimeter()
		SetValue(fields, TEXT("Perimeter"), poly.GetPerimeter());
		
		recs.Update();
	}
	
	// Add new layer to map
	CMoLayers layers(m_map.GetLayers());
	layers.Add(layer);
	ReleaseEllipses();
}

void CWycView::ReleasePolygons()
{
	for (int i = 0; i < m_polys.GetSize(); i++)
	{
		m_polys[i]->ReleaseDispatch();
		delete m_polys[i];
	}
	m_polys.RemoveAll();
}

void CWycView::ReleaseEllipses()
{
	for (int i = 0; i < m_ellipses.GetSize(); i++)
	{
		m_ellipses[i]->ReleaseDispatch();
		delete m_ellipses[i];
	}
	m_ellipses.RemoveAll();
}

void CWycView::OnFileOpen() 
{	
	CString filter(TEXT("ESRI Shapefiles (*.shp)|*.shp|"));
	
	CFileDialog dlg(TRUE, TEXT(".shp"), 0, OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, filter);
	if (dlg.DoModal() == IDOK)
	{
		
		m_path = dlg.GetPathName();
		
		// call the map helper function AddLayer
		// should add functionality to allow user to select their own colour
		// an renderer
		//CDataDir dataDir;
		
		AddLayer(m_map, m_path, moWhite, NULL);	
		
		// if there are already map layers then do not reset the map extent
		CMoLayers layers = m_map.GetLayers();
		if (layers.GetCount() < 2) // the raster image plus this new layer
		{
			CMoRectangle extent(m_map.GetFullExtent());
			extent.ScaleRectangle(.1);
			m_map.SetExtent(extent);
		}
		m_map.Refresh();
	}
	
}

void CWycView::OnFileNew() 
{
	//Simply clear the current collection of shapes
	this->ReleaseLines();
	this->ReleasePoints();
	this->ReleasePolygons();
	this->ReleaseRectangles();
	this->ReleaseEllipses();

	// remove all layers
	CMoLayers layers(m_map.GetLayers());
	layers.Clear();

	// and add the raster image again
	CDataDir dataDir;
	AddImageLayer(m_map, dataDir.GetPath() + "\\washington\\wash.bmp");	
	CMoRectangle extent(m_map.GetFullExtent());
	extent.ScaleRectangle(.1);
	m_map.SetExtent(extent);

	m_curTool = ID_MAP_ADDPOLY;
	m_path = "untitled.shp";
	m_map.Invalidate(FALSE);

}

void CWycView::OnSelect() 
{
	m_curTool = ID_SELECT;
}

void CWycView::OnQueryPoint() 
{
	CLAYER layer;
	m_curTool = ID_QUERY_POINT;
	layer.m_layer = m_layer;
	if(layer.DoModal()==IDOK)
	{
		m_layer=layer.m_layer;	
		Invalidate ();
		
		
		CMoLayers	layers(m_map.GetLayers());
		selectedMaplayer=layers.Item(COleVariant(TEXT(m_layer)));
		if(!selectedMaplayer)
		{
			MessageBox("您查找的层不存在!");
			m_curTool = 0;
		}
		else
			MessageBox("请在地图上点击选择您想查询的目标!");
	}	
}


void CWycView::OnDeletelayer() 
{
	CDELETELAYER  deletedlg;
	deletedlg.DoModal();
	m_deletelayer = deletedlg.m_deletelayer;
	short SelectedMapLayerIndexforDelete;
	switch(m_deletelayer)
				{
				case 0:
					{
						SelectedMapLayerIndexforDelete = 0;
						CMoLayers m_Layers = m_map.GetLayers();
						if(m_Layers.GetCount() < SelectedMapLayerIndexforDelete + 1)
							return;
						else
							m_Layers.Remove(SelectedMapLayerIndexforDelete);
					}
					break;
				case 1:
					{
						SelectedMapLayerIndexforDelete = 2;
						CMoLayers m_Layers = m_map.GetLayers();
						if(m_Layers.GetCount() < SelectedMapLayerIndexforDelete + 1)
							return;
						else
							m_Layers.Remove(SelectedMapLayerIndexforDelete);
					}
					break;
				case 2:
					{
						SelectedMapLayerIndexforDelete = 1;
						CMoLayers m_Layers = m_map.GetLayers();
						if(m_Layers.GetCount() < SelectedMapLayerIndexforDelete + 1)
							return;
						else
							m_Layers.Remove(SelectedMapLayerIndexforDelete);
					}
					break;
				case 3:
					{
						CMoLayers m_Layers = m_map.GetLayers();
						m_Layers.Clear();
					}
					break;
				}
}

void CWycView::OnResetlayer() 
{
	CMoLayers m_Layers = m_map.GetLayers();
	m_Layers.Clear();
	
	CWycView::OnInitialUpdate();
}

⌨️ 快捷键说明

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