//**********************************************************************************

//有机会下载安装了mapwingis,试图利用MFC对其二次开发利用,可惜网上能够查到的资料多为C#,VC资料太少。

//经过几天的研究,参考了网上网友的资料,利用VC实现了mapwingis部分功能的开发,为了和我有相同需求的码农们着想,

//少走弯路,特开发部分示例代码,以抛砖引玉。

// 禾呈 &&  博士  2019-5-30

//**********************************************************************************

  1. MapWinGIS5.0.1.0-Win32安装
  2. 创建单文档,采用CFormView

Mapwingis添加图层,实现label

Mapwingis添加图层,实现label

Mapwingis添加图层,实现label

  1. 添加控件和变量

Mapwingis添加图层,实现label

Mapwingis添加图层,实现label

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")

  1. 启动运行发现窗体不能最大化,添加

 Mapwingis添加图层,实现label

    m_pMainWnd->ShowWindow(SW_SHOWDEFAULT);//解决窗体最大化问题

    m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

    m_pMainWnd->UpdateWindow();

  1. 实现控件随着窗体大小变化

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();

 

    }

Mapwingis添加图层,实现label

  1. 添加图层

Mapwingis添加图层,实现label

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;

}

 Mapwingis添加图层,实现label

Mapwingis添加图层,实现label

  1. 实现放大,缩小,漫游,复位等功能

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();

}

 

  1. 实现图像添加label

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;

}

Mapwingis添加图层,实现label

  1. 实现shape图层添加label

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

相关文章: