一、判断GraphicsLayer层【地块注记】是否存在,如果不存在则新建、如果存在则删除所有要素
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() '获取当前map对象中的GetLayer图层
Await QueuedTask.Run(Sub()
If GraphicsLayer Is Nothing = True Then
'创建 GraphicsLayer
If pmap.MapType <> MapType.Map Then Exit Sub ' Not 2D
Dim gl_param = New GraphicsLayerCreationParams
gl_param.Name = "地块注记"
'默认情况下会添加到目录的顶部
GraphicsLayer = LayerFactory.Instance.CreateLayer(Of ArcGIS.Desktop.Mapping.GraphicsLayer)(gl_param, pmap)
Else
'全选文本
Dim zj_zdmane As String = ""
zj_zdmane = "地块注记"
Dim elements = GraphicsLayer.GetElementsAsFlattenedList().Where(Function(gele As GraphicElement) gele.Name.StartsWith(zj_zdmane)) ’获取GetLayer图层中定义的元素(本例为text)
'删除选择text
GraphicsLayer.SelectElements(elements)
GraphicsLayer.RemoveElements(GraphicsLayer.GetSelectedElements())
End If
MapView.Active.Redraw(True) '视图刷新
End Sub)
二、CreateTextGraphicElement 方法
GraphicElement CreateTextGraphicElement(
IElementContainer elementContainer,
TextType textType,
Geometry geometry,
CIMTextSymbol textSymbol,
string text,
string elementName,
bool select, 【可选】
ElementInfo elementInfo 【可选】
)
textType:要创建的文本图形的类型
成员 | 描述 |
CircleParagraph | 圆文本 |
EllipseParagraph | 椭圆文本 |
None | None- 默认 |
PointText | 点文本 |
PolygonParagraph | 多边形文本 |
RectangleParagraph | 矩形文本 |
SplinedText | 沿直线或曲线样条的文本 |
三、检查应用程序中是否有特定字体可用于 Pro 会话。 必须在 MCT 上调用此方法。IsFontAvailable 方法 (SymbolFactory)
public bool IsFontAvailable(
string fontName,
string fontStyle,
FontType fontType,
List<CIMFontVariation> fontVariationSettings
)
fontName:字体簇的名称。
fontStyle :字体样式的名称。
fontType:字体类型。
fontVariationSettings:要应用的任何字体变体设置。可以为 null。
返回值:一个布尔值,表示字体是否可用。例如:
Dim BOOT=SymbolFactory.Instance.IsFontAvailable("Arial", "Bold", FontType.Unspecified, null)
四、创建文本
1、创建简单的文本符号(Creates a simple text symbol)创建一个大小为8.5、字体系列为“Corbel”、字体样式为“Regular”的简单黑色文本符号。
Await QueuedTask.Run(Sub()
pmap = MapView.Active.Map ‘获取激活的map对象
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() ‘获取的GraphicsLayer对象
Dim TextSymbol =SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 8.5, "Corbel", "Regular")
'文本的偏移量
TextSymbol.OffsetX = 0.5
TextSymbol.OffsetY = 0.5
Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
Dim text As String = "Forest Grove"
Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
End Sub)
效果:
2、创建创建带有光晕环的文本符号(Creates a text symbol with a halo)
Await QueuedTask.Run(Sub()
pmap = MapView.Active.Map ‘获取激活的map对象
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() ‘获取的GraphicsLayer对象
Dim haloPoly = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.RedRGB, SimpleFillStyle.Solid)
Dim TextSymbol = SymbolFactory.Instance.ConstructTextSymbol(haloPoly, 10, "Arial", "Bold")
'文本的偏移量
TextSymbol.OffsetX = 0.5
TextSymbol.OffsetY = 0.5
Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
Dim text As String = "Portland"
Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
End Sub)
效果:
3、创建简单的牵引文本符号(Creates a text symbol with a halo)
Await QueuedTask.Run(Sub()
pmap = MapView.Active.Map ‘获取激活的map对象
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() ‘获取的GraphicsLayer对象
Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 10, "Verdana", "Regular")
Dim lineCalloutSymbol = new CIMSimpleLineCallout()
Dim lineSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 1, SimpleLineStyle.DashDotDot)
lineCalloutSymbol.LineSymbol = lineSymbol
'文本的偏移量
TextSymbol.OffsetX = 10
TextSymbol.OffsetY = 10
textSymbol.Callout = lineCalloutSymbol
Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
Dim text As String = "Forest Grove"
Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
End Sub)
效果:
4、创建圆角矩形的牵引文本框符号(Creates a balloon callout text symbol)
Await QueuedTask.Run(Sub()
pmap = MapView.Active.Map ‘获取激活的map对象
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() ‘获取的GraphicsLayer对象
Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.WhiteRGB, 11, "Corbel", "Regular")
Dim balloonCallout = new CIMBalloonCallout()
BalloonCallout.BalloonStyle = BalloonCalloutStyle.RoundedRectangle
Dim polySymbol = SymbolFactory.Instance.ConstructPolygonSymbol(ColorFactory.Instance.BlackRGB, SimpleFillStyle.Solid)
BalloonCallout.BackgroundSymbol = polySymbol
BalloonCallout.Margin = new CIMTextMargin
With BalloonCallout.Margin
.Left = 5
.Right = 5
.Bottom = 5
.Top = 5
End With
TextSymbol.Callout = balloonCallout
Dim text As String = "Forest Grove"
Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.RectangleParagraph, Location, TextSymbol, text, "地块注记")
End Sub)
效果:
5、创建点符号的文本符号(Creates a point callout text symbol)
Await QueuedTask.Run(Sub()
pmap = MapView.Active.Map ‘获取激活的map对象
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() ‘获取的GraphicsLayer对象
Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.WhiteRGB, 6, "Tahoma", "Bold")
Dim shieldCalloutSymbol = new CIMPointSymbolCallout()
Dim symbolStyleItem = GetPointSymbol("ArcGIS 2D", "Shield 1")
ShieldCalloutSymbol.PointSymbol = symbolStyleItem.Symbol as CIMPointSymbol
ShieldCalloutSymbol.PointSymbol.SetSize(18.0)
TextSymbol.Callout = shieldCalloutSymbol
Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
Dim text As String = "I5"
Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer, TextType.PointText, Location, TextSymbol, text, "地块注记")
End Sub)
效果:
6、创建设置矩形背景色的牵引文本框符号(Creates a background callout text symbol)
Await QueuedTask.Run(Sub()
pmap = MapView.Active.Map ‘获取激活的map对象
Dim GraphicsLayer = pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() ‘获取的GraphicsLayer对象
Dim Location As MapPoint = MapPointBuilderEx.CreateMapPoint(PX,PY)
Dim textSymbol = SymbolFactory.Instance.ConstructTextSymbol(ColorFactory.Instance.BlackRGB, 8, "Tahoma", "Bold")
Dim backgroundCalloutSymbol = new CIMBackgroundCallout()
Dim lineSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 1, SimpleLineStyle.DashDotDot)
Dim aquaBackground = ColorFactory.Instance.CreateRGBColor(190, 255, 232, 100)
Dim polySymbol = SymbolFactory.Instance.ConstructPolygonSymbol(aquaBackground, SimpleFillStyle.Solid)
BackgroundCalloutSymbol.LeaderLineSymbol = lineSymbol
TextSymbol.OffsetX = 10
TextSymbol.OffsetY = 10
BackgroundCalloutSymbol.BackgroundSymbol = polySymbol
Dim accentSymbol = SymbolFactory.Instance.ConstructLineSymbol(ColorFactory.Instance.BlackRGB, 2, SimpleLineStyle.Solid)
BackgroundCalloutSymbol.AccentBarSymbol = accentSymbol
BackgroundCalloutSymbol.Margin = new CIMTextMargin
With BalloonCallout.Margin
.Left = 5
.Right = 5
.Bottom = 5
.Top = 5
End With
TextSymbol.Callout = backgroundCalloutSymbol
Dim text As String = "Forest Grove"
Dim polyTxtElm As GraphicElement = ElementFactory.Instance.CreateTextGraphicElement(GraphicsLayer,TextType.RectangleParagraph, poly, TextSymbol, text, "地块注记")
End Sub)
效果: