yingerren
路人甲
路人甲
  • 注册日期2004-04-08
  • 发帖数27
  • QQ
  • 铜币248枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:5850回复:20

如何用vb实现用属性字段标注?急!!!

楼主#
更多 发布于:2004-06-10 11:25
我想用属性字段的内容对地图标注,如何实现?
喜欢0 评分0
kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-06-10 13:29
<P>Public Sub addlabel()
Dim mxdoc As IMxDocument
Dim mymap As IMap
Dim pGFeatureLayer As IGeoFeatureLayer
Dim pa As IActiveView
Dim pdis As IScreenDisplay
Set mxdoc = Application.Document
Set mymap = mxdoc.FocusMap
Set pa = mxdoc.FocusMap
Set pdis = pa.ScreenDisplay
Set pGFeatureLayer = mymap.Layer(1)           '标注图层</P><P>Dim pAnnProCol As IAnnotateLayerPropertiesCollection
Dim pLabelEngin As ILabelEngineLayerProperties
Set pAnnProCol = pGFeatureLayer.AnnotationProperties</P><P>Dim pBasicOverposterLayerProps As IBasicOverposterLayerProperties
Set pBasicOverposterLayerProps = New BasicOverposterLayerProperties
pBasicOverposterLayerProps.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape</P><P>For i = 0 To pAnnProCol.Count - 1
    pAnnProCol.QueryItem i, pLabelEngin
    pLabelEngin.Expression = "[STATE_NAME]"               '标注的字段名</P><P>    'Set pLabelEngin.Symbol = pTextSymbol
    Set pLabelEngin.BasicOverposterLayerProperties = pBasicOverposterLayerProps
Next i
'Dim pCon As ITrackCancel
'Set pCon = New CancelTracker
'pCon.Continue
'pGFeatureLayer.Draw esriDrawPhase.esriDPAnnotation, pdis, pCon</P><P>
pa.Refresh</P><P>End Sub
</P><P>这是VBA的,自己稍微改一下就Ok了</P>
个人专栏: https://zhuanlan.zhihu.com/c_165676639
举报 回复(0) 喜欢(0)     评分
yingerren
路人甲
路人甲
  • 注册日期2004-04-08
  • 发帖数27
  • QQ
  • 铜币248枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-06-10 14:00
斑竹,不行啊,没有反映,怎么回事?
举报 回复(0) 喜欢(0)     评分
kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-06-10 16:17
<P>不知道你有没有改对啊</P><P>Public Sub addlabel()

Dim pGFeatureLayer As IGeoFeatureLayer

<FONT color=#ff0000>Set pGFeatureLayer = Mapcontrol1.Layer(0)           '自己要标注图层</FONT></P><P>Dim pAnnProCol As IAnnotateLayerPropertiesCollection
Dim pLabelEngin As ILabelEngineLayerProperties
Set pAnnProCol = pGFeatureLayer.AnnotationProperties</P><P>Dim pBasicOverposterLayerProps As IBasicOverposterLayerProperties
Set pBasicOverposterLayerProps = New BasicOverposterLayerProperties
pBasicOverposterLayerProps.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape</P><P>For i = 0 To pAnnProCol.Count - 1
    pAnnProCol.QueryItem i, pLabelEngin
    <FONT color=#f70909>pLabelEngin.Expression = "[STATE_NAME]"               '<FONT color=#ff0000>自己要</FONT>标注的字段名</FONT>
    Set pLabelEngin.BasicOverposterLayerProperties = pBasicOverposterLayerProps
Next i</P><P>Mapcontrol1.ActiveView.Refresh
</P><P>End Sub
</P><P>GOoDLuck</P>
个人专栏: https://zhuanlan.zhihu.com/c_165676639
举报 回复(0) 喜欢(0)     评分
yingerren
路人甲
路人甲
  • 注册日期2004-04-08
  • 发帖数27
  • QQ
  • 铜币248枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-06-11 08:08
<b>问题解决了,谢谢斑竹!:)</b>
举报 回复(0) 喜欢(0)     评分
yejian8109
路人甲
路人甲
  • 注册日期2004-05-20
  • 发帖数36
  • QQ
  • 铜币251枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-06-12 19:51
<P>版主的例子我用了没反映啊!!是不是我的程序有问题啊??怎么无法实现啊???</P><P>我的全部程序如下:</P><P>Private Sub Command1_Click()(<FONT color=#ff0033>我添加的图层states——esri自带的shp文件</FONT>)
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pWorkspace As IWorkspace
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
Set pWorkspace = pWorkspaceFactory.OpenFromFile("c:\usa", 0)
Dim pFeatureWorkspace As IFeatureWorkspace
Set pFeatureWorkspace = pWorkspace
Dim pFeatureClass As IFeatureClass
Set pFeatureClass = pFeatureWorkspace.OpenFeatureClass("states")
Dim pFLayer As IFeatureLayer
Set pFLayer = New FeatureLayer
Set pFLayer.FeatureClass = pFeatureClass
Dim pLayer As ILayer
Set pLayer = New FeatureLayer
Set pLayer = pFLayer
MapControl1.AddLayer pLayer
End Sub</P><P>Private Sub Command2_Click()
addlabel   ‘调用方法
End Sub</P><P>
Public Sub addlabel()
Dim pGFeatureLayer As IGeoFeatureLayer
Set pGFeatureLayer = MapControl1.Layer(<FONT color=#ff0033>0</FONT>)           'MapControl1中只有states一个图层
Dim pAnnProCol As IAnnotateLayerPropertiesCollection
Dim pLabelEngin As ILabelEngineLayerProperties
Set pAnnProCol = pGFeatureLayer.AnnotationProperties
Dim pBasicOverposterLayerProps As IBasicOverposterLayerProperties
Set pBasicOverposterLayerProps = New BasicOverposterLayerProperties
pBasicOverposterLayerProps.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape
Dim pTextSymbol As ITextSymbol
For i = 0 To pAnnProCol.Count - 1<FONT color=#f70968>’pAnnProCol.Count =1</FONT>
    pAnnProCol.QueryItem i, pLabelEngin
    pLabelEngin.Expression = "<FONT color=#ff0033>state_name</FONT>"               'states中的字段名
        Set pTextSymbol = New TextSymbol                  ‘定义字体
        Dim strFontName As String
        Dim pFont As stdole.StdFont
        'Create a font symbol and grab hold of the stdole.stdFont interface
        Set pFont = New stdole.StdFont
        'Set font and text symbol properties
        strFontName = "Arial"
        pFont.Name = strFontName
        pFont.Bold = True
        pFont.Size = 3
        pTextSymbol.Font = pFont
        Dim pcolor As IColor
        Set pcolor = New RgbColor
        pcolor.RGB = 255
        pTextSymbol.Color = pcolor
    Set pLabelEngin.Symbol = pTextSymbol      
    Set pLabelEngin.BasicOverposterLayerProperties = pBasicOverposterLayerProps
Next i
MapControl1.ActiveView.Refresh
End Sub
这是为什么啊!!!!!我是想了一天也不明白啊!!!</P><img src="images/post/smile/dvbbs/em18.gif" /><img src="images/post/smile/dvbbs/em18.gif" /><img src="images/post/smile/dvbbs/em18.gif" /><img src="images/post/smile/dvbbs/em18.gif" />
举报 回复(0) 喜欢(0)     评分
kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-06-12 22:10
<P>pLabelEngin.Expression = "<FONT color=#ff0033>state_name</FONT>" </P><P>加上方括号</P><P>pLabelEngin.Expression = "[<FONT color=#ff0033>state_name</FONT><FONT color=#000000>]"</FONT></P>
个人专栏: https://zhuanlan.zhihu.com/c_165676639
举报 回复(0) 喜欢(0)     评分
yejian8109
路人甲
路人甲
  • 注册日期2004-05-20
  • 发帖数36
  • QQ
  • 铜币251枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-06-13 12:10
<P>改了还是没效果啊!!!</P><P>怎么回事啊!!!!</P>
举报 回复(0) 喜欢(0)     评分
kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2004-06-13 16:12
<P>请再加一行代码试试</P><P>Dim pGFeatureLayer As IGeoFeatureLayer
Set pGFeatureLayer = MapControl1.Layer(<FONT color=#ff0033>0</FONT>)           'MapControl1中只有states一个图层
加上:</P><P>pGFeatureLayer.DisplayAnnotation = True</P>
个人专栏: https://zhuanlan.zhihu.com/c_165676639
举报 回复(0) 喜欢(0)     评分
yejian8109
路人甲
路人甲
  • 注册日期2004-05-20
  • 发帖数36
  • QQ
  • 铜币251枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2004-06-13 16:39
<P>有了!!!</P><P>好啊!!真是高啊!!!</P><P>我看帮助看了半天,把我弄的头都晕了</P><P>真是太感谢了!!</P><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部