实现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);

  

 

转载于:https://www.cnblogs.com/ly570/p/11491437.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值