📄 firstmapview.cpp
字号:
void CFirstMapView::OnSetNavigationViewMapLayer()
{
/*CMoLayers m_Layers;
if(m_Layers.CreateDispatch(TEXT("MapObjects2.MoLayers")))
return;
m_Layers = m_map.GetLayers();*/
int layersCount = layers.GetCount();
CMoMapLayer m_MapLayer;
for(int i = layersCount-1;i>=0;i--)
{
VARIANT va;
VariantInit(&va);
va.vt = VT_I4;
va.lVal = i;
m_MapLayer = layers.Item(va);
Layers = m_map2.GetLayers();
Layers.Add(m_MapLayer);
}
CMoRectangle rect(m_map2.GetFullExtent());
if(LPDISPATCH(rect))
m_map2.SetExtent(rect);
rect.ReleaseDispatch();
}
void CFirstMapView::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class
if(m_firstStart)
{
OnSetNavigationViewMapLayer();
this->m_firstStart = FALSE;
}
}
void CFirstMapView::OnMapSearch()
{
// TODO: Add your control notification handler code here
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
CString searchText = pMainFrame->GetSearchText();
/*CComboBox *pComboBox1 = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
ASSERT_VALID(pComboBox1);
pComboBox1->GetWindowText(m_comboxEdit); */
CComboBox *pComboBox2 = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_FIELDS);
ASSERT_VALID(pComboBox2);
pComboBox2->GetWindowText(m_comboxEdit1);
if(m_comboxEdit1 =="")
{
MessageBox("没有选择图层!",NULL,MB_ICONEXCLAMATION | MB_ICONWARNING);
}
else
{
CString expression;
expression.Format("(%s Like '%%%s%%')",m_comboxEdit1,searchText);
CMoMapLayer layer(this->layers.Item(COleVariant(m_comboxEdit)));
CMoRecordset recs(layer.SearchExpression(expression));
if(recs.GetEof())
MessageBox("没有找到匹配的结果",NULL,MB_ICONEXCLAMATION | MB_ICONWARNING);
else
{
CMoFields fields(recs.GetFields());
CMoField shapeField(fields.Item(COleVariant(TEXT("Shape"))));
CMoPolygon shape(shapeField.Get_Value().pdispVal);
CMoRectangle r(shape.GetExtent());
r.ScaleRectangle(2);
m_map.SetExtent(r);
m_map.Refresh();
OnRefreshNavigationWindow();
m_map.FlashShape(shape,3);
}
}
}
void CFirstMapView::OnCloseupCombo()
{
// TODO: Add your control notification handler code here
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
CComboBox *pComboBox1 = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
ASSERT_VALID(pComboBox1);
CComboBox *pComboBox2 = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_FIELDS);
ASSERT_VALID(pComboBox2);
pComboBox1->GetWindowText(m_comboxEdit);
if(m_comboxEdit != "")
{
CMoMapLayer layer(this->layers.Item(COleVariant(m_comboxEdit)));
CMoRecordset rset=layer.GetRecords();
CMoTableDesc table(rset.GetTableDesc());
while(pComboBox2->GetCount()!=0)
pComboBox2->DeleteString(0);
for(int i=0;i<table.GetFieldCount();i++)
{
CString name=table.GetFieldName(i);
pComboBox2->AddString(name);
}
pComboBox2->SetCurSel(0);
}
}
void CFirstMapView::OnMapFullextent()
{
// TODO: Add your command handler code here
m_map.SetMousePointer(4);
OnRefreshNavigationWindow();
CMoRectangle r(m_map.GetFullExtent());
if(LPDISPATCH(r))
m_map.SetExtent(r);
}
///////////////////////////////////////////////////////////////
//函数功能 : 选择地图要素
//处理过程 : 先得到鼠标点击的要素的Recordset,将鼠标点击的要素加入到Track层
//返 回 值 : void
//参数说明 : short Shift, //是否按下了Shift键
// long X, long Y
///////////////////////////////////////////////////////////////
void CFirstMapView::SelectFeatToSelection(CMoMap &m_Map, short Shift, long X, long Y)
{
/* if(Shift==0)
{
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
tLayer = m_map.GetTrackingLayer();
tLayer.Refresh(true,va);//清除所有Track层数据
}
long ShapeType;*/
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
CComboBox *pComboBox1 = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
ASSERT_VALID(pComboBox1);
pComboBox1->GetWindowText(m_comboxEdit);
if(m_comboxEdit=="")
{
MessageBox("请选择图层!");
}
else
{
CMoPoint pt(m_map.ToMapPoint(float(X),float(Y)));
CMoRectangle rc;
rc.CreateDispatch("MapObjects2.Rectangle");
double x,y;
x=pt.GetX();
y=pt.GetY();
double x_scale;
double y_scale;
CMoRectangle rExtent(m_Map.GetExtent());
x_scale=rExtent.GetWidth()/m_Map.GetFullExtent().GetWidth();
y_scale=rExtent.GetHeight()/m_Map.GetFullExtent().GetHeight();
double scale=x_scale;
if(x_scale>y_scale)
scale=y_scale;
rc.SetTop(y-200*scale);
rc.SetBottom(y+200*scale);
rc.SetLeft(x-200*scale);
rc.SetRight(x+200*scale);
//* * 2 由查询范围选择目标
CMoMapLayer seletedMapLayer(layers.Item(COleVariant(m_comboxEdit)));
m_SelectedRecSet = seletedMapLayer.SearchShape(rc,5,"");
VARIANT va;
VariantInit(&va);
va.vt=VT_NULL;
CMoTrackingLayer tracklayer(m_Map.GetTrackingLayer());
tracklayer.Refresh(true,va);
}
/* if(SelectFeatureOnMap(m_Map,X,Y,6,m_SelectedRecSet,ShapeType))
// SelectFeatureOnMap函数参考如下
{
CMoSymbol symbol;
symbol.CreateDispatch(TEXT("MapObjects2.Symbol"));
symbol.SetColor(0x00FF00);
symbol.SetStyle(8);
CMoFields MoFields = m_SelectedRecSet.GetFields();
CMoField shapeField(MoFields.Item(COleVariant(TEXT("Shape"))));
if(ShapeType == 23)
{
symbol.SetSymbolType(1);
CMoPolygon shape(shapeField.Get_Value().pdispVal);
m_Map.DrawShape(shape,symbol);
}
if(ShapeType == 22)
{
symbol.SetSymbolType(0);
CMoLine shape(shapeField.Get_Value().pdispVal);
m_Map.DrawShape(shape,symbol);
}
if(ShapeType == 21)
{
symbol.SetSymbolType(0);
CMoPoint shape(shapeField.Get_Value().pdispVal);
m_Map.DrawShape(shape,symbol);
}
symbol.ReleaseDispatch();
}
*/
}
///////////////////////////////////////////////////////////////
//函数功能 : 选择地图要素,自动判断该要素属于那一层,返回该要素的Recordset和
// 要素所在图层的类型(点、线、面)
//返 回 值 : BOOL
//参数说明 : CMap1& map,
//long X, long Y,
//double ptSize, 选择范围
//CMoRecordset& set, 要素的Recordset(返回参数)
//long& ShapeType 要素所在图层的类型(返回参数)
///////////////////////////////////////////////////////////////
BOOL CFirstMapView::SelectFeatureOnMap(CMoMap &map, long X, long Y,double ptSize,CMoRecordset& set,long& ShapeType)
{
/* double tolerance = map.ToMapDistance((float)ptSize);
CMoPoint mapPt(map.ToMapPoint((float)X, (float)Y));
CMoLayers layers(map.GetLayers());
for(long i=0;i<layers.GetCount();i++)
{
CMoMapLayer Itemlayer(layers.Item(COleVariant(i)));
if(!Itemlayer.GetVisible()) continue;
ShapeType = Itemlayer.GetShapeType();
if(Itemlayer.GetShapeType()==23)
{
set = Itemlayer.SearchShape(mapPt,6, TEXT(""));
if(!set.GetEof()) return TRUE;
}
if(Itemlayer.GetShapeType()==21||Itemlayer.GetShapeType()==22)
{
set = Itemlayer.SearchByDistance(mapPt,tolerance, TEXT(""));
if(!set.GetEof()) return TRUE;
}
}*/
return FALSE;
}
void CFirstMapView::OnAfterTrackingLayerDrawMap1(long hDC)
{
// TODO: Add your control notification handler code here
CMoSymbol sym;
sym.CreateDispatch(TEXT("MapObjects2.Symbol"));
sym.SetColor(0x0000FF);
sym.SetSymbolType(2);
sym.SetStyle(8);
if(LPDISPATCH(m_SelectedRecSet))
{
m_SelectedRecSet.MoveFirst();
CMoFields fields(m_SelectedRecSet.GetFields());
CMoField shapefield(fields.Item(COleVariant(TEXT("Shape"))));
CMoPolygon shape;
while(! m_SelectedRecSet.GetEof())
{
shape.AttachDispatch(shapefield.Get_Value().pdispVal);
m_map.DrawShape(shape,sym);
// m_map.FlashShape(shape,3);
m_SelectedRecSet.MoveNext();
}
}
sym.ReleaseDispatch();
/*比例尺控件的实现*/
C_sbExtent MapExt;
C_sbExtent Pageext;
MapExt = m_scaleBar.GetMapExtent();
Pageext = m_scaleBar.GetPageExtent();
MapExt.SetMinX(m_map.GetExtent().GetLeft());
MapExt.SetMinY(m_map.GetExtent().GetBottom());
MapExt.SetMaxX(m_map.GetExtent().GetRight());
MapExt.SetMaxY(m_map.GetExtent().GetTop());
CRect rect;
m_map.GetClientRect(rect);
CDC* pDC =m_map.GetDC();
Pageext.SetMinX(rect.TopLeft().x/ GetDeviceCaps(pDC->m_hDC,LOGPIXELSX));
Pageext.SetMinY(rect.TopLeft().y / GetDeviceCaps(pDC->m_hDC,LOGPIXELSY));
Pageext.SetMaxX((rect.TopLeft().x + rect.Width()) / GetDeviceCaps(pDC->m_hDC,LOGPIXELSX));
Pageext.SetMaxY((rect.TopLeft().y + rect.Height())/ GetDeviceCaps(pDC->m_hDC,LOGPIXELSY));
m_scaleBar.Refresh();
}
void CFirstMapView::OnBtnScale()
{
// TODO: Add your control notification handler code here
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
CComboBox *pComboBox = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_SCALE);
ASSERT_VALID(pComboBox);
CString str;
pComboBox->GetWindowText(str);
if(str!="" )
{
str = str.Mid(2);
double scale;
scale = atof(str);
SetMapScale(m_map, scale);
}
}
void CFirstMapView::OnShowPropery()
{
// TODO: Add your command handler code here
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
CComboBox *pComboBox = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
ASSERT_VALID(pComboBox);
pComboBox->GetWindowText(m_comboxEdit);
CComboBox *pComboBox2 = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_FIELDS);
ASSERT_VALID(pComboBox2);
pComboBox2->GetWindowText(m_comboxEdit1);
if(m_comboxEdit1 =="")
MessageBox("请选择要显示的属性字段!",NULL,MB_ICONEXCLAMATION | MB_ICONWARNING);
else
{
CMoMapLayer layer(layers.Item(COleVariant(m_comboxEdit)));
// TODO: Add your command handler code here
//新建一个标注对象
CMoLabelPlacer labelPlacer;
labelPlacer.CreateDispatch("MapObjects2.LabelPlacer");
//选择将Name这个字段做为标注
labelPlacer.SetField(m_comboxEdit1);
labelPlacer.SetDrawBackground(TRUE);
labelPlacer.SetAllowDuplicates(false);
labelPlacer.SetPlaceAbove(false);
labelPlacer.SetPlaceBelow(false);
labelPlacer.SetPlaceOn(true);
labelPlacer.SetSymbolHeight((short)m_map.GetFullExtent().GetHeight());
//为这个标注对象设置字体
// CMoTextSymbol textSymbol(labelPlacer.GetDefaultSymbol());
// CMoFont fnt;
// fnt.SetName(TEXT("宋体"));
// fnt.SetSize(10);
// textSymbol.SetFont(fnt);
// 将标注对象与图层对象关连
layer.SetRenderer(labelPlacer);
m_map.Refresh ();
}
}
void CFirstMapView::OnDblClickScalebar()
{
// TODO: Add your control notification handler code here
if(dlgscale.DoModal()==IDOK)
{
scale_index = dlgscale.m_index;
m_scaleBar.SetScaleBarUnits(scale_index);
m_scaleBar.Refresh();
}
}
void CFirstMapView::OnDeleteLabal()
{
// TODO: Add your command handler code here
CMoMapLayer layer(layers.Item(COleVariant(m_comboxEdit)));
CMoGroupRenderer re(layer.GetRenderer());
re.Remove(0);
m_map.Refresh();
}
void CFirstMapView::OnProTable()
{
// TODO: Add your command handler code here
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
CComboBox *pComboBox = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
ASSERT_VALID(pComboBox);
pComboBox->GetWindowText(m_comboxEdit);
if(m_comboxEdit =="")
{
MessageBox("没有选择图层!",NULL,MB_ICONEXCLAMATION | MB_ICONWARNING);
}
else
{
CMoMapLayer layer(layers.Item(COleVariant(m_comboxEdit)));
CMoRecordset m_SelectedRecSet(layer.GetRecords());
delete this->m_multList;
m_multList = new CDlgMultList;
m_multList->m_RecSet = m_SelectedRecSet;
m_multList->Create(IDD_DIALOG4,this);
m_multList->ShowWindow(SW_SHOW);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -