The advanced callout functionality allows you to modify the background symbol, shape, margins, splits, and leader line of the callout. The multiple text element functionality allows you to have multiple and individual text elements, including a vertical Morse code element, whose placement and style can be edited. Several steps are involved in creating advanced callout annotation with multiple text elements: setting up cartographic feature classes, creating annotation feature classes, setting up calculated field specifications, and creating and editing advanced annotation.
Setting up cartographic feature classes
The cartographic feature class is where the initial text string is calculated to create annotation. This is typically done in a field such as Label_Txt. The text string produced by the XML script contains all the formatting and identification tags and is lengthy, meaning the field must be set to a high value to avoid any database conflicts.
Since the annotation is generated based on the text string field, it requires that the length of the field containing the label be long enough to accommodate the labels generated by the XML scripts.
- 启动 ArcCatalog。
- Navigate to the geodatabase that contains the cartographic feature class you want to use for generating annotation.
- Right-click the cartographic feature class and click Properties.
Learn more about cartographic features
The Feature Class Properties dialog box appears.
- In the Field Name column, select Label_Txt or a similar field.
- Verify that the Length property under Field Properties is set to a value greater than 2,000.
- If the value is less than 2,000, add a field by clicking in the blank row in the Field Name column and type a name.
- Click in the Data Type column next to the new field's name and choose Text.
- To create an alias for this field, click the field next to Alias and type the alias for this field.
- To allow null values to be stored in this field, click the field next to Allow NULL values, click the drop-down arrow, then click Yes.
- Set the Length property to 2000.
- 单击完成。
Creating an annotation feature class
An annotation feature class that uses the advanced callout/multiple text element functionality is not much different than any other annotation feature class within the database. However, annotation feature classes that have the advanced callout/multiple text element functionality need to be created with a few additional parameters that need to be set to ensure that the annotation is created correctly.
For additional information, see Creating aviation annotation feature classes.
In addition to creating feature-linked annotation, annotation feature classes with advanced callouts require defining properties for the background, shadow, arrowhead, margin, callout, and placement options.
- 在 Catalog 目录树中,右键单击要在其中创建新注记要素类的要素数据集。
- 指向新建 > 要素类。
- 输入名称。
- 单击类型下拉箭头,然后单击注记要素。
- 选中“将注记与以下要素类进行连接”复选框。
- 单击下拉箭头,然后单击要与新注记要素类关联的要素类。该要素类必须与要创建的注记要素类位于同一个要素数据集中。并且之后将无法更改此属性。
- 单击下一步。
- 在坐标系窗口中导航至某个坐标系并单击它,或者单击导入或新建来指定坐标系。
- 单击下一步。
- 单击下一步。
- 输入参考比例尺。
- Click the Map Units drop-down arrow and choose the units in which you want your annotation stored.
The units should match the units you specified for your coordinate system in step 8.
- Under Editing Behavior, uncheck the Create annotation when new features are added and Update annotation when feature's shape is modified check boxes.
For a description of each of these three options, see annotation feature class editing properties.
- Click the Label Engine drop-down arrow and choose Maplex Label Engine.
- 单击下一步。
- 指定包含第一个注记类文本的关联要素类字段。可选择一个“标注字段”或单击表达式来指定多个字段。
- Click Leader in the Text Symbol area.
- In the Properties area of the Editor dialog box that appears, click the Type drop-down arrow and choose Advanced Callout.
- Click OK.
- 单击下一步。
- If your geodatabase is a file or 企业级地理数据库, the Configuration Keyword area appears. Set up a configuration keyword if necessary.
- 单击下一步。
- Click the TextString field.
- Click the text box to the right of the Length field property and set it to 2000 or higher.
- To add the first field to the feature class, click the first blank row in the Field Name column and type MapId_Txt.
- Click in the Data Type column next to the new field's name and choose Text.
- To create an alias for this field, click the text box next to Alias and type the alias.
- Change the Length field property to 255.
- To add the second field to the feature class, click the next blank row in the Field Name column and type IsVisible.
- Click in the Data Type column next to the new field's name and choose Short Integer.
- Type 1 for the Default Value.
- To associate a domain with this field, click the field next to Domain and choose Code_Yes_No.
- To add the third field to the feature class, click the next blank row in the Field Name column and type AnnoSizeChange.
- Click in the Data Type column next to the new field's name and choose Double.
- Type 0 for the Default Value.
- 单击完成。
- Close ArcCatalog.
“导入”允许您从现有要素类或要素数据集中导入坐标系。
“新建”允许您创建新的坐标系。
选择坐标系之后,可以单击修改进行更改。
Setting up the calculated field specification
You must have previously set up visual specifications and specified the location of the visual specifications table in the database you are using. Visual specifications are used to calculate the individual values for each record in the database according to the XML script. The XML script must be configured for each individual annotation feature class to be able to create annotation.
Calculated fields allow you to determine the appearance of labels and annotation or basic data type values based on attributes you select. The fields are grouped based on the specification you choose.
- 启动 ArcMap。
- Click the Visual Specifications button on the Production Symbology toolbar.
The Visual Specifications dialog box appears.
- Make sure that you check the Display Calculated Representation and Calculated Fields tabs check box.
- 单击确定。
- Right-click the cartographic feature class for which you want to define the calculated fields and click Properties.
The Layer Properties dialog box appears.
- Click the Calculated Fields tab.
- Click the Specification drop-down arrow and choose the specification for which you want to create the field rule.
- Add a new calculated field rule by right-clicking anywhere in the white space where the rules are displayed and clicking New Rule.
A new row appears in the rule table.
- Double-click the Rule Description space for the new rule and type a description.
- Click the ellipsis (...) in the Field Name cell.
The Field Properties dialog box appears.
- Choose the appropriate field from the Name drop-down list and ensure that its length is at least 2000.
- 单击确定。
- Click the SQL Statement drop-down arrow and choose Edit SQL Statement.
- Type the SQL statement for the features you want to include with the rule.
For additional information about defining a SQL statement, see Defining SQL statements for visual specifications.
- 单击确定。
- Click the Expression drop-down arrow and choose Edit Expression.
The Expression Parser dialog box appears.
- Type, or copy and paste, the custom XML script into the Expression text box.
- If necessary, configure the XML script you want to use to refine the feature selection for the rule.
- Verify your script by clicking Verify.
- 单击确定。
- Check the Update Feature Class(es) check box to calculate the field in the cartographic feature class.
- 单击应用。
- 单击确定。
Creating advanced annotation
To generate annotation using the Create Feature-Linked Annotation tool, you must have the annotation feature class, as well as the linked source feature class, loaded into the Table Of Contents window. The data frame also needs to be associated with an instance from the product library for which annotation has to be created.
- Ensure that the correct product library and production database are set.
- Make sure that the Instances Maintained property is set correctly from the Configure context menu on the Product Library window.
- Verify that each annotation feature layer you are creating annotation for has its own matching source feature layer in the document.
- On the main menu, click View > Data Frame Properties.
- Click the General tab.
- Verify that the data frame's reference scale matches that of the given chart.
- Verify that the data frame's rotation matches that of the given chart.
- Verify that the Label Engine is set to Maplex Label Engine.
- Click the Coordinate System tab.
- Verify that the data frame's projection matches that of the given chart.
- Click OK.
- On the main menu, click Customize > Toolbars > Aviation Data Management.
- Click the Feature Display Settings button on the Aviation Data Management toolbar.
- On the main menu, click Customize > Toolbars > Aviation Annotation.
- Click the Create Feature-Linked Annotation button on the Aviation Annotation toolbar.
The Create Feature-Linked Annotation dialog box appears.
- Check the check boxes next to the instances you want to process.
The list displayed is built from the Instances Maintained set through the Product Library window.
- Check the check boxes next to the annotation classes in the Annotation Class(es) to Process list.
- Click OK.
For each feature class that is linked to the annotation feature classes, the tool determines which features do not have annotation in the selected chart. It then creates annotation for those features. It also gives the annotation a MAPID, ensures word spacing is set to 100, changes the color of the background symbol, and resizes arrowheads and accent bar gaps so they are correct for the map scale.
The Create Feature-Linked Annotation Results dialog box appears and shows the results of the annotation that has been generated, updated, or deleted.
- Click Close once you are finished viewing the results.
- 单击关闭。
Editing advanced annotation
Editing advanced annotation has all the customization ability that the XML provides but allows you to customize individual pieces of annotation and override the settings in the XML.
Advanced callout annotation can be edited and customized in an edit session by editing parameters on the Editor dialog box. You can set a variety of parameters and placement options for the appearance of an advanced callout annotation.
- On the main menu, click Customize > Toolbars > Aviation Editing.
- Click the Production Start Editing button on the Aviation Editing toolbar.
- Click the Edit Annotation tool on the Aviation Annotation toolbar.
- Click an advanced annotation feature to select it.
- Right-click the annotation piece and click Properties.
- Click Leader.
- Check the Use Custom check box.
- Modify the Background, Shadow, Callout, Arrowhead, and Margins parameters in the Editor dialog box to customize the annotation as necessary.
- Click Placement Options.
The Text Placement Properties dialog box appears.
- Check the Use Custom check box.
- Modify the placement properties of the Top, Middle, Bottom, Left, and Right text elements as necessary.
- Click OK.
The Editor dialog box appears.
- Click OK on the Editor dialog box.
The Attributes dialog box appears.
- Click Apply on the Attributes dialog box.
- Click OK to close the Attributes dialog box.
Creating a label expression (LXP)
A label expression is used to adjust the formatting of your annotation. This uses ArcGIS formatting tags to control how the annotation displays the font, size, color, orientation, or line weight. If you intend to use annotation abbreviation options, see the example LXP below.
The label expression below can be used to abbreviate advanced/callout annotation.
Function FindLabel ( [IAPNAVAID_LBL], [LABELSTATUS_CODE] )
ValueArray = Split([IAPNAVAID_LBL], "||")
LABELSTATUS_CODE_arr =Split( [LABELSTATUS_CODE] ,"<>")
OBJECTID= ValueArray(0)
OBJECTID_arr= Split(OBJECTID ,"<>")
PRIMARYNAVAID_CODE=ValueArray(2)
if IsNull(PRIMARYNAVAID_CODE) or PRIMARYNAVAID_CODE ="" Then
PRIMARYNAVAID_CODE_arr= Split(" " ,"<>")
else
PRIMARYNAVAID_CODE_arr= Split(PRIMARYNAVAID_CODE ,"<>")
end if
SystemSubtype= ValueArray(3)
SystemSubtype_arr= Split(SystemSubtype,"<>")
Ident_Txt= ValueArray(4)
Ident_Txt_arr=Split(Ident_Txt ,"<>")
Frequency_Val= ValueArray(5)
Frequency_Val_arr= Split( Frequency_Val,"<>")
Channel_Txt= ValueArray(6)
Channel_Txt_arr= Split( Channel_Txt,"<>")
Voice_Code= ValueArray(7)
Voice_Code_arr= Split(Voice_Code,"<>")
ComponentSubtype= ValueArray(8)
ComponentSubtype_arr=Split( ComponentSubtype,"<>")
Name_Txt= ValueArray(9)
Name_Txt_arr= Split(Name_Txt ,"<>")
LAT_TXT= ValueArray(10)
LAT_TXT_arr= Split(LAT_TXT ,"<>")
LONG_TXT= ValueArray(11)
LONG_TXT_arr= Split(LONG_TXT ,"<>")
ROLEFIX_CODE= ValueArray(12)
ROLEFIX_CODE_arr= Split(ROLEFIX_CODE ,"<>")
FindLabel = "<MultipleTextElement>" & TextBackground
(PRIMARYNAVAID_CODE_arr) & TextElement (OBJECTID_arr,
SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr,
Channel_Txt_arr, Voice_Code_arr, ComponentSubtype_arr,
Name_Txt_arr, LAT_TXT_arr, LONG_TXT_arr, ROLEFIX_CODE_arr,
LABELSTATUS_CODE_arr) & "</MultipleTextElement>"
End Function
Function TextBackground (PRIMARYNAVAID_CODE_arr)
TextBackground ="<TextBackground Units = 'Points'>" & Background
(PRIMARYNAVAID_CODE_arr) & Callout & Shadow & Margins
& Placement & "</TextBackground>"
End Function
Function Background (PRIMARYNAVAID_CODE_arr)
If PRIMARYNAVAID_CODE_arr(0) = "1" Then
Width = "0.7"
Else
Width ="0.2"
End If
Background = "<BackgroundRoundness='0'><Symbol><Outline Width='" & Width
& "'><CLR Red='0' Green='0' Blue
='0'></CLR></Outline></Symbol></Background>"
End Function
Function Callout
Callout = "<Callout Tolerance='10.0'Snap='True' Truncated='100'><Symbol><Outline
Width='0.2'><CLR Red='0' Green='0' Blue ='0'></CLR></Outline><Fill><CLR Red='0'
Green='0' Blue ='0'></CLR></Fill><Arrowhead Size='0'><CLR Red='0' Green='0' Blue
='87'></CLR></Arrowhead></Symbol></Callout>"
End Function
Function Shadow
Shadow = "<Shadow HorizontalOffset ='0' VerticalOffset ='0'><Symbol><Outline
Width='0.2'><CLR Red='0' Green='0' Blue ='0'></CLR></Outline><Fill><CLR Red='0'
Green='0' Blue ='0'></CLR></Fill></Symbol></Shadow>"
End Function
Function Margins
Margins = "<Margins Top='2.0' Bottom='2.0' Left='2.0' Right='2.0'></Margins>" End Function
FunctionPlacement
Placement = "<ElementPlacement><Top Style='Box' SplitOffset='0' HAlign='Center'
VAlign='Center'></Top><Middle Style='Outside' SplitOffset='0' HAlign='Center'
VAlign='Baseline'></Middle><Left Style='TopCorner' SplitOffset='2.0' HAlign='Center'
VAlign='Baseline'></Left><Right Style='Center' SplitOffset='0' HAlign='Center'
VAlign='Baseline'></Right><Bottom Style='Box' SplitOffset='0' HAlign='Center'
VAlign='Baseline'></Bottom></ElementPlacement>"
End Function
Function TextElement (OBJECTID_arr, SystemSubtype_arr,
Ident_Txt_arr, Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr, LAT_TXT_arr, LONG_TXT_arr,
ROLEFIX_CODE_arr, LABELSTATUS_CODE_arr)
TextElement = TopTextElement (OBJECTID_arr, SystemSubtype_arr, Ident_Txt_arr,
Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr, ROLEFIX_CODE_arr,
LABELSTATUS_CODE_arr) _
& MiddleTextElement (OBJECTID_arr,SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr,
Channel_Txt_arr, Voice_Code_arr, ComponentSubtype_arr,
Name_Txt_arr, LAT_TXT_arr, LONG_TXT_arr, LABELSTATUS_CODE_arr)_
& BottomTextElement (OBJECTID_arr, SystemSubtype_arr,
Ident_Txt_arr, Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr) _
& RightTextElement (OBJECTID_arr, SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr,
Channel_Txt_arr, Voice_Code_arr, ComponentSubtype_arr,
Name_Txt_arr) _
& LeftTextElement (OBJECTID_arr, SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr,
Channel_Txt_arr, Voice_Code_arr, ComponentSubtype_arr, Name_Txt_arr)
End Function
Function TopTextElement (OBJECTID_arr, SystemSubtype_arr,
Ident_Txt_arr, Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr, ROLEFIX_CODE_arr,
LABELSTATUS_CODE_arr)
SFONT = "<fnt name='Tw Cen MT' size='7'>"
EFONT = "</fnt>"
strRole = ROLEFIX_CODE_arr(0)
If LABELSTATUS_CODE_arr(0) = "Abbreviate IAF" Then
TopTextElement = ""
Else
TopTextElement = "<TopTextElement>" & SFONT & strRole & vbnewline & EFONT & "</TopTextElement>"
End If
End Function
Function MiddleTextElement (OBJECTID_arr, SystemSubtype_arr,
Ident_Txt_arr, Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr, LAT_TXT_arr, LONG_TXT_arr,
LABELSTATUS_CODE_arr)
SFONT = "<fnt name='Tw Cen MT' size='7'>"
EFONT = "</fnt>"
strFreqUnd = 0
select case SystemSubtype_arr(0)
case 1 'Marker
case 2 'LocatorMarker = Marker + NDB
case 3 'NDB
strName = Name_Txt_arr(0)
strIdent = Ident_Txt_arr(0)
strFreq = Frequency_Val_arr(0)
if Voice_Code_arr(0) = 0 then
strFreqUnd = 1
end if
case 4 'NDBDME = NDB + DME
i = 0
do while i <ubound(ComponentSubtype_arr) + 1
if ComponentSubtype_arr(i) = 2 then
strIdent = Ident_Txt_arr(i)
strName = Name_Txt_arr(i)
strChan= "Chan " & Channel_Txt_arr(i)
end if
if ComponentSubtype_arr(i) = 1 then
strFreq = Frequency_Val_arr(i)
end if
if Voice_Code_arr(i) = 0 then
strFreqUnd = 1
end if
i = i + 1
loop
case 5 'DME
strName = Name_Txt_arr(0)
strIdent = Ident_Txt_arr(0)
strFreq = ""
strChan = "Chan " & Channel_Txt_arr(0)
case 6 'VORDME = VOR + DME
i = 0
do while i < ubound(ComponentSubtype_arr) + 1
if ComponentSubtype_arr(i) = 2 then
strIdent = Ident_txt_arr(i)
strName = Name_Txt_arr(i)
strChan = "Chan " & Channel_txt_arr(i)
end if
if ComponentSubtype_arr(i) = 3 then
strFreq = Frequency_Val_arr(i)
end if
if Voice_Code_arr(i) = 0 then
strFreqUnd = 1
end if
i = i + 1
loop
case 7 'VOR
strIdent = Ident_Txt_arr(0)
strName = Name_Txt_arr(0)
strFreq = Frequency_Val_arr(0)
strChan = ""
case 8 'VORTAC = VOR + TACAN
do while i < ubound(ComponentSubtype_arr) + 1
if ComponentSubtype_arr(i) = 3 then
strIdent = Ident_Txt_arr(i)
strName = Name_Txt_arr(i)
strFreq = Frequency_Val_arr(i)
end if
if Voice_Code_arr(i) = 0 then
strFreqUnd = 1
end if
if ComponentSubtype_arr(i) = 4 then
strChan = "Chan " & Channel_Txt_arr(i)
end if
i = i + 1
loop
case 9 'TACAN
strIdent = Ident_Txt_arr(0)
strName = Name_Txt_arr(0)
strFreq = ""
strChan = "Chan " & Channel_Txt_arr(0)
case 10 'MLSElevation
case 11 'MLS
do while i < ubound(ComponentSubtype_arr) + 1
if ComponentSubtype_arr(i) = 2 then
strIdent = Ident_Txt_arr(i)
strName = Name_Txt_arr(i)
strChan = "Chan " & Channel_Txt_arr(i)
end if
if ComponentSubtype_arr(i) = 6 then
strFreq = Frequency_Val_arr(i)
end if
if Voice_Code_arr(i) = 0 then
strFreqUnd = 1
end if
i = i + 1
loop
case 12 'MLSAzimuth
case 13 'LocalizerApproachSystem
strIdent = Ident_Txt_arr(0)
strName = "LOCALIZER"
do while i < ubound(ComponentSubtype_arr) + 1
if ComponentSubtype_arr(i) = 7 then
strFreq = Frequency_Val_arr(i)
end if
if Voice_Code_arr(i) = 0 then
strFreqUnd = 1
end if
if ComponentSubtype_arr(i) = 2 then
strChan = "Chan " & Channel_Txt_arr(i)
end if
i = i + 1
loop
case 14 'ILS
strName = "LOCALIZER"
do while i < ubound(ComponentSubtype_arr) + 1
if ComponentSubtype_arr(i) = 7 then
strIdent = Ident_Txt_arr(i)
strFreq = Frequency_Val_arr(i)
end if
if Voice_Code_arr(i) = 0 then
strFreqUnd = 1
end if
if ComponentSubtype_arr(i) = 2 then
strChan = "Chan " & Channel_Txt_arr(i)
end if
i = i + 1
loop
'case 15 'GlidePath
end select
if strFreqUnd = 1 then
strFreq = "<und>" & strFreq & "</und>"
end if
'logic to determine whether to keep the name???
if strName = "" then
outStr = strIdent & VerticalMorseCode & strIdent & "</fnt></VMC>"
outStr = outStr & vbcrlf & strFreq
elseif strChan = "" or LABELSTATUS_CODE_arr(0) = "Abbreviate Channel" then
outStr = strName
outStr = outStr & vbcrlf & strFreq & " " & strIdent
outStr = outStr & VerticalMorseCode & strIdent & "</fnt></VMC>"
else
outStr = strName
outStr = outStr & vbcrlf & strFreq & " " & strIdent
outStr = outStr & VerticalMorseCode & strIdent & "</fnt></VMC>"
outStr = outStr & vbcrlf & strChan
end if
'determine hemisphere
if LAT_TXT_arr(0) < 0 then
latHemi = "S"
else
latHemi = "N"
end if
if LONG_TXT_arr(0) < 0 then
longHemi = "W"
else
longHemi = "E"
end if
'make decimal degree values positive
decLat = abs(LAT_TXT_arr(0))
decLong = abs(LONG_TXT_arr(0))
'get degree information from decimal
degree value dmsLatDeg = int(decLat)
dmsLongDeg = int(decLong)
'get decimal value
decLatMin = decLat - dmsLatDeg
decLongMin = decLong - dmsLongDeg
'turn decimal value into minutes
dmsLatMin = round(decLatMin * 60, 2)
dmsLongMin = round(decLongMin * 60, 2)
if dmsLatDeg < 10 AND NOT dmsLatMin < 10 then
strLat = latHemi & "0" & dmsLatDeg & chr(176) & dmsLatMin & "'"
else if NOT dmsLatDeg < 10 AND dmsLatMin < 10 then
strLat = latHemi & dmsLatDeg & chr(176) & "0" & dmsLatMin & "'"
else if dmsLatDeg < 10 AND dmsLatMin < 10 then
strLat = latHemi & "0" & dmsLatDeg & chr(176) & "0" & dmsLatMin & "'"
else
strLat = latHemi & dmsLatDeg & chr(176) & dmsLatMin & "'"
end if
if dmsLongDeg < 10 AND NOT dmslongMin < 10 then
strLong = longHemi & "0" & dmsLongDeg & chr(176) & dmsLongMin & "'"
elseif NOT dmsLongDeg < 10 AND dmsLongMin < 10 then
strLong = longHemi & dmsLongDeg & chr(176) & "0" & dmsLongMin & "'"
elseif dmsLongDeg < 10 AND dmsLongMin < 10 then
strLong = longHemi & "0" & dmsLongDeg & chr(176) & "0" & dmsLongMin & "'"
else
strLong = longHemi & dmsLongDeg & chr(176) & dmsLongMin & "'"
end if
strDesig = strLat & vbnewline & strLong
If LABELSTATUS_CODE_arr(0) = "Abbreviate Channel" Then
MiddleTextElement = "<MiddleTextElement>" & SFONT & outStr & vbnewline & strDesig & vbnewline & EFONT
& "</MiddleTextElement>" 'MiddleTextElement = "<MiddleTextElement>" & SFONT & strName & vbcrlf
& strFreq & " " & strIdent & VerticalMorseCode & strIdent & vbnewline & strDesig & 'vbnewline
& EFONT & "</MiddleTextElement>"
Elseif LABELSTATUS_CODE_arr(0) = "Abbreviate Coordinates" Then
MiddleTextElement = "<MiddleTextElement>" & SFONT &
outStr & EFONT & "</MiddleTextElement>"
Else
MiddleTextElement = "<MiddleTextElement>" & SFONT & outStr & vbnewline & strDesig & vbnewline & EFONT
& "</MiddleTextElement>"
End If 'MiddleTextElement = "<MultipleTextElement>" & TextBackground & MiddleText &
"</MultipleTextElement>"
End Function
Function BottomTextElement (OBJECTID_arr, SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr) BottomTextElement = ""
End Function
Function LeftTextElement (OBJECTID_arr, SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr, Channel_Txt_arr, Voice_Code_arr,
ComponentSubtype_arr, Name_Txt_arr) LeftTextElement = ""
End Function
Function RightTextElement (OBJECTID_arr, SystemSubtype_arr, Ident_Txt_arr, Frequency_Val_arr,
Channel_Txt_arr, Voice_Code_arr, ComponentSubtype_arr, Name_Txt_arr) RightTextElement = ""
End Function
Function VerticalMorseCode VerticalMorseCode = "<VMC><fnt
name='PLTS Aeronautical VMC' size ='6'>"
End Function
This workflow guided you through creating advanced callout annotation with multiple text elements by setting up cartographic feature classes, creating annotation feature classes, setting up calculated field specifications, and creating and editing advanced annotation. You should now have advanced annotation in your chart.