阅读:5850回复:20
如何用vb实现用属性字段标注?急!!!
我想用属性字段的内容对地图标注,如何实现?
|
|
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> |
|
|
2楼#
发布于:2004-06-10 14:00
斑竹,不行啊,没有反映,怎么回事?
|
|
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> |
|
|
4楼#
发布于:2004-06-11 08:08
<b>问题解决了,谢谢斑竹!:)</b>
|
|
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" /> |
|
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>
|
|
|
7楼#
发布于:2004-06-13 12:10
<P>改了还是没效果啊!!!</P><P>怎么回事啊!!!!</P>
|
|
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> |
|
|
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" />
|
|
上一页
下一页