Mapwingis添加图层,实现label
//**********************************************************************************
//有機會下載安裝了mapwingis,試圖利用MFC對其二次開發利用,可惜網上能夠查到的資料多為C#,VC資料太少。
//經過幾天的研究,參考了網上網友的資料,利用VC實現了mapwingis部分功能的開發,為了和我有相同需求的碼農們著想,
//少走彎路,特開發部分示例代碼,以拋磚引玉。
// 禾呈 &&? 博士? 2019-5-30
//**********************************************************************************
map1.h中添加:using namespace mapWindow;
stdafx.h中添加:#import "c:\dev\MapWinGIS\MapWinGIS.ocx"rename_namespace("mapWindow") rename("GetObject","GISGetObject") rename("max","mapMax") rename("min","mapMin")
?
??? m_pMainWnd->ShowWindow(SW_SHOWDEFAULT);//解決窗體最大化問題
??? m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
??? m_pMainWnd->UpdateWindow();
在onsize()中添加
if(m_map.m_hWnd == NULL)return;
??? if(IsWindow(m_map.m_hWnd))
??? {
??????? CRect rect;
??????? GetClientRect(&rect);
?
??????? m_map.MoveWindow(rect,FALSE);
??????? m_map.ZoomToPrev();
?
??? }
void CmapwingisTest2View::OnToolsAddLayer()
{
???????? TCHAR szFilters[]= _T("TIFF Files (*.tif)|*.tif|SHP Files (*.shp)|*.shp||");??
???????? CFileDialog fileDlg (TRUE,_T("tif"),_T("*.tif"),??
?????????????????? OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);??
???????? if( fileDlg.DoModal ()!=IDOK )?? return;
???????? CString m_strFilePath = fileDlg.GetPathName();??
???????? if (_T("")!=m_strFilePath)??
???????? {??
?????????????????? // 先刪除所有圖層??
?????????????????? //m_map.RemoveAllLayers();??
?????????????????? // 獲取后綴名判斷文件是tif圖像還是shp文件??
?????????????????? CString strExt = m_strFilePath.Right(3);??
?????????????????? if (_T("tif")==strExt)??
?????????????????? {??
??????????????????????????? // 創建圖像接口打開圖像加入地圖??
??????????????????????????? mapWindow::IImagePtr pImage;??
??????????????????????????? pImage.CreateInstance(__uuidof(mapWindow::Image));??
??????????????????????????? pImage->Open(_bstr_t(m_strFilePath),mapWindow::USE_FILE_EXTENSION,TRUE,NULL);??
??????????????????????????? m_map.AddLayer(pImage,true);???
?????????????????? }
???????? ???????? if (_T("shp")==strExt)??
?????????????????? {??
??????????????????????????? mapWindow::IShapefilePtr pshapefilebound;
??????????????????????????? pshapefilebound.CreateInstance(__uuidof(mapWindow::Shapefile));
??????????????????????????? pshapefilebound->Open(_bstr_t(m_strFilePath),false );
??????????????????????????? m_map.AddLayer( pshapefilebound,TRUE) ;
??????????????????????????? return;
?????????????????????????????????????????????? }
???????? }
???????? return;
}
?
void CmapwingisTest2View::OnWindowsZoomin()
{
???????? m_map.SetCursorMode(cmZoomIn); //放大
}
?
?
void CmapwingisTest2View::OnWindowsZoomout()//縮小
{
???????? m_map.SetCursorMode(cmZoomOut);
}
?
?
void CmapwingisTest2View::OnWindowsPan()//漫游
{
???????? m_map.SetCursorMode(cmPan);
}
?
?
void CmapwingisTest2View::OnWindowsReset()//缺省放大到首個圖層
{
???????? int numLayer=0;
???????? numLayer=m_map.GetNumLayers();
???????? if(numLayer<1)return;
???????? m_map.ZoomToLayer(0);
}
?
?
void CmapwingisTest2View::OnWindowsGlobal()//全球范圍
{
???????? m_map.ZoomToWorld();
}
?
void CmapwingisTest2View::OnToolsAddTiffLayer()
{
???????? TCHAR szFilters[]= _T("TIFF Files (*.tif)|*.tif||");??
?
?
???????? CFileDialog fileDlg (TRUE,_T("tif"),_T("*.tif"),??
?????????????????? OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);??
?
???????? if( fileDlg.DoModal ()!=IDOK )?? return;
???????? CString m_strFilePath = fileDlg.GetPathName();??
?
?
???????? if (_T("")!=m_strFilePath)??
???????? {??
?
?????????????????? // 先刪除所有圖層??
?????????????????? //m_map.RemoveAllLayers();??
?
?????????????????? // 獲取后綴名判斷文件是tif圖像還是shp文件??
?????????????????? CString strExt = m_strFilePath.Right(3);??
?????????????????? if (_T("tif")==strExt)??
?????????????????? {??
??????????????????????????? // 創建圖像接口打開圖像加入地圖??
??????????????????????????? mapWindow::IImagePtr pImage;??
??????????????????????????? pImage.CreateInstance(__uuidof(mapWindow::Image));??
??????????????????????????? pImage->Open(_bstr_t(m_strFilePath),mapWindow::USE_FILE_EXTENSION,TRUE,NULL);??
?
??????????????????????????? m_map.AddLayer(pImage,true);??
?
??????????????????????????? mapWindow::ILabelsPtr labels;
??????????????????????????? pImage->get_Labels( &labels );
??????????????????????????? labels->PutFontSize(12);
??????????????????????????? labels->PutFontBold(true);
??????????????????????????? labels->PutFontOutlineVisible(true);
??????????????????????????? labels->PutFontOutlineWidth(4);
?
??????????????????????????? mapWindow::ILabelCategoryPtr cat;
??????????????????????????? labels->AddCategory("Red");
??????????????????????????? //cat->PutFontColor(RGB(255,0,0));
?
??????????????????????????? mapWindow::IExtentsPtr ext = pImage->GetExtents();
??????????????????????????? double xmin,xmax,ymin,ymax;
??????????????????????????? ext->get_xMax(&xmax);
??????????????????????????? ext->get_xMin(&xmin);
??????????????????????????? ext->get_yMax(&ymax);
?????????????????? ???????? ext->get_yMin(&ymin);
?
??????????????????????????? double? xRange = xmax-xmin;
??????????????????????????? double? yRange = ymax-ymin;
??????????????????????????? CString str;
?
??????????????????????????? for (int i = 0; i < 100; i++)
??????????????????????????? {
???????????????????????????????????? double x=xRange*(rand()%9)*0.1;
???????????????????????????????????? double y=yRange* ( rand()%9 )/10.0;
???????????????????????????????????? int categoryIndex = i % 3;
???????????????????????????????????? str.Format("%d",i);
???????????????????????????????????? labels->AddLabel( _bstr_t(str ),xmin+x,ymin+y,i*3.6,categoryIndex);
??????????????????????????? }
???????????????? }
???????? }
???????? return;
}
void CmapwingisTest2View::OnToolsAdd32780()
{
???????? TCHAR szFilters[]= _T("SHP Files (*.shp)|*.shp||");??
?
?
???????? CFileDialog fileDlg (TRUE,_T("shp"),_T("*.shp"),??
?????????????????? OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);??
?
???????? if( fileDlg.DoModal ()!=IDOK )?? return;
???????? CString m_strFilePath = fileDlg.GetPathName();??
?
?
???????? if (_T("")!=m_strFilePath)??
???????? {??
?
?????????????????? // 先刪除所有圖層??
?????????????????? //m_map.RemoveAllLayers();??
?
?????????????????? // 獲取后綴名判斷文件是tif圖像還是shp文件??
?????????????????? CString strExt = m_strFilePath.Right(3);??
?????????????????? ?
?????????????????? if (_T("shp")==strExt)??
?????????????????? {??
??????????????????????????? mapWindow::IShapefilePtr pshapefilebound;
??????????????????????????? pshapefilebound.CreateInstance(__uuidof(mapWindow::Shapefile));
??????????????????????????? pshapefilebound->Open(_bstr_t(m_strFilePath),false );
??????????????????????????? m_map.AddLayer( pshapefilebound,TRUE) ;
??????????????????????????? mapWindow::ILabelsPtr labels=pshapefilebound->GetLabels( );//?
??????????????????????????? labels->PutFontSize(12);
??????????????????????????? labels->PutFontBold(true);
??????????????????????????? labels->PutFontOutlineVisible(true);
??????????????????????????? labels->PutFontOutlineWidth(4);
??????????????????????????? mapWindow::ILabelCategoryPtr cat;
??????????????????????????? labels->AddCategory("Red");
?
?
??????????????????????????? long fieldIndex = 1;//默認首個列
??????????????????????????? CString str;
??????????????????????????? IFieldPtr Fields;
??????????????????????????? //pshapefilebound->GetField(0);
??????????????????????????? _variant_t var;
??????????????????????????? for (long i = 0; i < pshapefilebound->GetNumShapes() ; i++)
??????????????????????????? {
???????????????????????????????????? IShapePtr shp =? pshapefilebound->GetShape(i);
???????????????????????????????????? IPointPtr pt= shp->GetCenter(?? );
???????????????????????????????????? var = pshapefilebound->GetCellValue(fieldIndex, i);
???????????????????????????????????? str = var.bstrVal; //需要判斷本列是否為文本,待解決
???????????????????????????????????? labels->AddLabel( _bstr_t(str ),pt->Getx(),pt->Gety(),0,laCenter);
??????????????????????????? }
??????????????????????????? labels->put_Synchronized(true);
???????????????????????????
?????????????????? }
???????? }
???????? return;
}
總結
以上是生活随笔為你收集整理的Mapwingis添加图层,实现label的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云南省计算机一级考试题7,计算机(一级B
- 下一篇: 学计算机怎么介绍自己的产品,商品基本描述