1 [VC+AE 系列] 实现对图层的标注、简单渲染
?
标注图层:
1. void CAOTestView::OnCartoLabel() 2. {
3. // TODO: Add your command handler code here 4.
5. HRESULT hr;
6. IMapPtr pMap= m_ctrlMap.GetMap(); //m_ctrlMap是MapControl的控件变量 7. ILayerPtr ipLayer=NULL;
8. pMap->get_Layer(m_ctrlMap.GetLayerCount()-1,&ipLayer); //获取最后的图层 9.
10. ILabelEngineLayerPropertiesPtr pLBProp; 11. IAnnotateLayerPropertiesPtr pALProp;
12. IAnnotateLayerPropertiesCollectionPtr pALProps; 13. IGeoFeatureLayerPtr pGeoFeatLyr= ipLayer; 14.
15. if(NULL==pGeoFeatLyr)
16. return ;
17. hr=pGeoFeatLyr->get_AnnotationProperties(&pALProps); 18. hr=pALProps->QueryItem(0,&pALProp,NULL,NULL); 19. if(NULL==(pLBProp=pALProp)) 20. return ;
21. pLBProp->put_IsExpressionSimple(VARIANT_TRUE);
22. pLBProp->put_Expression((_bstr_t)\设置标注字段,大家拷过去时要改下字段名 23.
24. //创建标注符号
25. IFormattedTextSymbolPtr pFormatTxtSym(CLSID_TextSymbol); 26. 27.
28. /////////////////自己设置符号的样式/////////////////////// 29. // //设置标注的字体
30. // IFontPtr pFont(__uuidof(StdFont));;
31. // pFont->put_Name((_bstr_t) \字体集 32. // CY cy;
33. // cy.Hi = 10 * 72; 34. // cy.Lo = 8 * 72; 35. // pFont->put_Size(cy); 36. // pFont->put_Bold(TRUE);
37. // pFormatTxtSym->put_Font((IFontDispPtr)pFont) ; 38. //
39. // //设置标注的颜色 40. // IColorPtr pColor;
41. // pFormatTxtSym->get_Color(&pColor); 42. // hr=pColor->put_RGB(RGB(0,120,0));//深绿色 43. // if(FAILED(hr)) return;
44. // hr=pFormatTxtSym->put_Color(pColor); 45.
46. /////////////////从样式库文件中获取符号的样式///////////////////////// 47. IStyleGalleryItemPtr pSGitem=NULL;
48. IEnumStyleGalleryItemPtr pEnumSGitem;
49. IStyleGalleryPtr pStyleGall(CLSID_ServerStyleGallery); 50. IStyleGalleryStoragePtr pSGstorage(pStyleGall);
51. CString strStyleFile=\52. CString strStyleClass=\53.
54. //获取样式文件
55. pSGstorage->put_TargetFile((_bstr_t)strStyleFile);
56. pStyleGall->get_Items((_bstr_t)strStyleClass,(_bstr_t)strStyleFile, 57. (_bstr_t)\58. if (NULL==pEnumSGitem) 59. {
60. MessageBox(\获取样式集失败!\61. return; 62. } 63.
64. BSTR bsName;
65. pEnumSGitem->Reset(); 66. pEnumSGitem->Next(&pSGitem); 67.
68. if (NULL==pSGitem) 69. {
70. MessageBox(\获取样式项失败!\71. return; 72. }
73. IUnknownPtr pUnk;
74. pSGitem->get_Item(&pUnk); 75. if (NULL==(pFormatTxtSym=pUnk)) 76. { 77. return; 78. } 79.
80. pLBProp->putref_Symbol(pFormatTxtSym);
81. pGeoFeatLyr->put_DisplayAnnotation(VARIANT_TRUE);//显示标注 82.
83. IActiveViewPtr pAV=m_ctrlMap.GetActiveView(); 84. pAV->Refresh(); 85. } 复制代码
?
渲染图层
渲染前:
渲染后: