VC+AO 下载本文

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. } 复制代码

?

渲染图层

渲染前:

渲染后: