ARCGIS PRO DSK GraphicsLayer创建文本要素

一、判断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)

效果:

相关推荐
eWidget6 小时前
InfluxDB迁移至金仓数据库的同城容灾实践:性能显著提升、运维效率优化,某能源企业实现RPO_5秒的高可靠时序数据管理
运维·数据库·能源·时序数据库·kingbase·kingbasees·金仓数据库
小句7 小时前
MySQL慢查询日志详细使用指南
数据库·mysql·adb
老邓计算机毕设7 小时前
SSM医疗资源普查6qxol(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb开发·医疗资源管理
dyyx1117 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
码农水水8 小时前
中国邮政Java面试被问:容器镜像的多阶段构建和优化
java·linux·开发语言·数据库·mysql·面试·php
曹牧8 小时前
Oracle:NULL
数据库·oracle
龙之叶8 小时前
【Android Monkey源码解析五】- 异常处理
android·数据库
马克学长9 小时前
SSM医院门诊管理系统u4pw5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb 开发·门诊管理
TDengine (老段)9 小时前
使用安装包快速体验 TDengine TSDB
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
闻哥10 小时前
Redis 避坑指南:从命令到主从的全链路踩坑实录
java·数据库·redis·缓存·面试·springboot