- void CAOTestView::OnCartoLabel()
- {
- // TODO: Add your command handler code here
- HRESULT hr;
- IMapPtr pMap= m_ctrlMap.GetMap(); //m_ctrlMap是MapControl的控件变量
- ILayerPtr ipLayer=NULL;
- pMap->get_Layer(m_ctrlMap.GetLayerCount()-1,&ipLayer); //获取最后的图层
- ILabelEngineLayerPropertiesPtr pLBProp;
- IAnnotateLayerPropertiesPtr pALProp;
- IAnnotateLayerPropertiesCollectionPtr pALProps;
- IGeoFeatureLayerPtr pGeoFeatLyr= ipLayer;
- if(NULL==pGeoFeatLyr)
- return ;
- hr=pGeoFeatLyr->get_AnnotationProperties(&pALProps);
- hr=pALProps->QueryItem(0,&pALProp,NULL,NULL);
- if(NULL==(pLBProp=pALProp))
- return ;
- pLBProp->put_IsExpressionSimple(VARIANT_TRUE);
- pLBProp->put_Expression((_bstr_t)"[Height]");//设置标注字段,大家拷过去时要改下字段名
- //创建标注符号
- IFormattedTextSymbolPtr pFormatTxtSym(CLSID_TextSymbol);
- /自己设置符号的样式///
- // //设置标注的字体
- // IFontPtr pFont(__uuidof(StdFont));;
- // pFont->put_Name((_bstr_t) "Courier New");//字体集
- // CY cy;
- // cy.Hi = 10 * 72;
- // cy.Lo = 8 * 72;
- // pFont->put_Size(cy);
- // pFont->put_Bold(TRUE);
- // pFormatTxtSym->put_Font((IFontDispPtr)pFont) ;
- //
- // //设置标注的颜色
- // IColorPtr pColor;
- // pFormatTxtSym->get_Color(&pColor);
- // hr=pColor->put_RGB(RGB(0,120,0));//深绿色
- // if(FAILED(hr)) return;
- // hr=pFormatTxtSym->put_Color(pColor);
- /从样式库文件中获取符号的样式/
- IStyleGalleryItemPtr pSGitem=NULL;
- IEnumStyleGalleryItemPtr pEnumSGitem;
- IStyleGalleryPtr pStyleGall(CLSID_ServerStyleGallery);
- IStyleGalleryStoragePtr pSGstorage(pStyleGall);
- CString strStyleFile="C://Program Files//ArcGIS//Styles//ESRI.ServerStyle";
- CString strStyleClass="Text Symbols";
- //获取样式文件
- pSGstorage->put_TargetFile((_bstr_t)strStyleFile);
- pStyleGall->get_Items((_bstr_t)strStyleClass,(_bstr_t)strStyleFile,
- (_bstr_t)"",&pEnumSGitem);
- if (NULL==pEnumSGitem)
- {
- MessageBox("获取样式集失败!");
- return;
- }
- BSTR bsName;
- pEnumSGitem->Reset();
- pEnumSGitem->Next(&pSGitem);
- if (NULL==pSGitem)
- {
- MessageBox("获取样式项失败!");
- return;
- }
- IUnknownPtr pUnk;
- pSGitem->get_Item(&pUnk);
- if (NULL==(pFormatTxtSym=pUnk))
- {
- return;
- }
- pLBProp->putref_Symbol(pFormatTxtSym);
- pGeoFeatLyr->put_DisplayAnnotation(VARIANT_TRUE);//显示标注
- IActiveViewPtr pAV=m_ctrlMap.GetActiveView();
- pAV->Refresh();
- }
- 渲染图层
渲染前:
渲染后:
- void CAOTestView::OnCartoRender()
- {
- // TODO: Add your command handler code here
- HRESULT hr;
- IActiveViewPtr ipAV=m_ctrlMap.GetActiveView();
- IMapPtr ipMap=m_ctrlMap.GetMap();
- ILayerPtr ipLyr;
- hr=ipMap->get_Layer(0,&ipLyr);//图层要点状的
- if (FAILED(hr))
- return ;
- //简单渲染
- ISimpleRendererPtr ipSimpleRnder;
- IFeatureRendererPtr ipRnder;
- IGeoFeatureLayerPtr ipGeoFeaLyr;
- if ((ipGeoFeaLyr=ipLyr)==NULL)
- return ;
- hr=ipGeoFeaLyr->get_Renderer(&ipRnder);
- if ((ipSimpleRnder=ipRnder)==NULL)
- {
- hr=ipSimpleRnder.CreateInstance(CLSID_SimpleRenderer);
- if(FAILED(hr))
- return ;
- ipRnder=ipSimpleRnder;
- }
- //创建一个简单的点状符号
- ISimpleMarkerSymbolPtr ipSymbol(CLSID_SimpleMarkerSymbol);
- IColorPtr ipColor;
- hr=ipSymbol->get_Color(&ipColor);
- if(FAILED(hr))
- return ;
- hr=ipColor->put_RGB(RGB(255,0,0));//红色
- if(FAILED(hr))
- return ;
- hr=ipSymbol->put_Color(ipColor);
- if(FAILED(hr))
- return ;
- hr=ipSymbol->put_Style(esriSMSCircle);//圆形
- if(FAILED(hr))
- return ;
- //设置渲染
- hr=ipSimpleRnder->putref_Symbol((ISymbolPtr)ipSymbol);
- if(FAILED(hr)) return ;
- hr=ipSimpleRnder->put_Label((_bstr_t)"CSU_DXC");
- if(FAILED(hr)) return ;
- hr=ipGeoFeaLyr->putref_Renderer(ipRnder);
- if(FAILED(hr)) return ;
- hr=ipAV->ContentsChanged();
- hr=ipAV->Refresh();
- if(FAILED(hr)) return ;
- }