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.
- Start 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.
- Cliquez sur Terminer.
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.
- Dans l'arborescence du catalogue, cliquez avec le bouton droit de la souris sur le jeu de classes d'entités dans lequel vous souhaitez créer la nouvelle classe d'entités annotations.
- Sélectionnez Nouveau > Classe d'entités.
- Saisissez le Nom.
- Cliquez sur la flèche de liste déroulante Type, puis sur Entité annotation ESRI.
- Cochez la case pour lier les annotations à une classe d'entités.
- Cliquez sur la flèche de la liste déroulante, puis sélectionnez la classe d'entités à laquelle vous souhaitez lier la nouvelle classe d'entités annotations. La classe d'entités doit figurer dans le même jeu de données d'entité que la classe d'entités annotations en cours de création. Vous ne pouvez pas changer cette propriété par la suite.
- Cliquez sur Suivant.
- Recherchez et sélectionnez un système de coordonnées dans la fenêtre des systèmes de coordonnées, ou cliquez sur Importer ou sur Nouveau pour spécifier un système de coordonnées.
- Cliquez sur Suivant.
- Cliquez sur Suivant.
- Tapez une échelle de référence.
- 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.
- Cliquez sur Suivant.
- Spécifiez les champs de la classe d'entités liée contenant du texte pour la première classe d'annotations. Vous pouvez choisir un champ d'étiquette ou cliquer sur Expression pour spécifier plusieurs champs.
- 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.
- Cliquez sur Suivant.
- If your geodatabase is a file or géodatabase d'entreprise, the Configuration Keyword area appears. Set up a configuration keyword if necessary.
- Cliquez sur Suivant.
- 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.
- Cliquez sur Terminer.
- Close ArcCatalog.
Le bouton Importer permet d'importer un système de coordonnées à partir d'une classe d'entités existante ou d'un jeu de classes d'entités existant.
Le bouton Nouveau permet de créer un nouveau système de coordonnées.
Dès lors que vous avez choisi un système de coordonnées, vous pouvez cliquer sur Modifier pour l'ajuster.
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.
- Start 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.
- Cliquez sur OK.
- 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.
- Cliquez sur OK.
- 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.
- Cliquez sur OK.
- 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.
- Cliquez sur OK.
- Check the Update Feature Class(es) check box to calculate the field in the cartographic feature class.
- Cliquez sur Appliquer.
- Cliquez sur OK.
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.
- Cliquez sur Fermer.
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.