ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Help
  • Sign Out
ArcGIS Desktop

ArcGIS Online

The mapping platform for your organization

ArcGIS Desktop

A complete professional GIS

ArcGIS Enterprise

GIS in your enterprise

ArcGIS for Developers

Tools to build location-aware apps

ArcGIS Solutions

Free template maps and apps for your industry

ArcGIS Marketplace

Get apps and data for your organization

  • Documentation
  • Support
Esri
  • Sign In
user
  • My Profile
  • Sign Out

Help

  • Home
  • Get Started
  • Map
  • Analyze
  • Manage Data
  • Tools
  • More...

Code example: Original VST expression

    This is an example of an original VST expression that can be modified to abbreviate advanced/callout annotation.

    Function Generate([OBJECTID], [OBJECTID_arr], [LABELSTATUS_CODE], [LABELSTATUS_CODE_arr], [PRIMARYNAVAID_CODE], [PRIMARYNAVAID_CODE_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr], [LAT_TXT], [LAT_TXT_arr], [LONG_TXT], [LONG_TXT_arr], [ROLEFIX_CODE], [ROLEFIX_CODE_arr])
    
    Generate = "<MultipleTextElement>" & TextBackground ([PRIMARYNAVAID_CODE], [PRIMARYNAVAID_CODE_arr]) & TextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr],
    [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr],
    [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr], [LAT_TXT], [LAT_TXT_arr], [LONG_TXT],
    [LONG_TXT_arr], [ROLEFIX_CODE], [ROLEFIX_CODE_arr], [LABELSTATUS_CODE], [LABELSTATUS_CODE_arr]) & "</MultipleTextElement>" 
    End Function
    
    Function TextBackground ([PRIMARYNAVAID_CODE], [PRIMARYNAVAID_CODE_arr]) TextBackground = "<TextBackground
    Units = 'Points'>" & Background ([PRIMARYNAVAID_CODE], [PRIMARYNAVAID_CODE_arr]) & Callout & Shadow & Margins
    & Placement & "</TextBackground>" 
    End Function
    
    Function Background ([PRIMARYNAVAID_CODE], [PRIMARYNAVAID_CODE_arr]) 
    If [PRIMARYNAVAID_CODE_arr](0) = "1" Then
       Width = "0.7" 
    Else 
       Width = "0.2" 
    End If 
    Background = "<Background Roundness='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
    
    Function Placement 
    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], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr], [LAT_TXT], [LAT_TXT_arr], [LONG_TXT], [LONG_TXT_arr], [ROLEFIX_CODE], [ROLEFIX_CODE_arr], [LABELSTATUS_CODE], [LABELSTATUS_CODE_arr])
    
    TextElement = TopTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], 
                        [Voice_Code],[Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr], [ROLEFIX_CODE], [ROLEFIX_CODE_arr], [LABELSTATUS_CODE], [LABELSTATUS_CODE_arr]) _ 
                      & MiddleTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], 
                        [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr],[LAT_TXT], [LAT_TXT_arr], [LONG_TXT], [LONG_TXT_arr], [LABELSTATUS_CODE], 
                        [LABELSTATUS_CODE_arr])_ 
                      & BottomTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt],[Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr],
                        [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt],
                        [Name_Txt_arr]) _ 
                      & RightTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr],
                        [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr],
                        [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr]) _ 
                      & LeftTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr],
                       [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr]) 
    End Function
    
    Function TopTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt],
    [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr], [ROLEFIX_CODE], [ROLEFIX_CODE_arr], [LABELSTATUS_CODE], [LABELSTATUS_CODE_arr]) 
    SFONT = "<fnt name='Tw Cen MT' size='7'>" 
    EFONT = "</fnt>" 
    strRole = [ROLEFIX_CODE_arr](0)
    
    If [LABELSTATUS_CODE_arr](0) = "1" Then 
        TopTextElement = "" 
    Else
        TopTextElement = "<TopTextElement>" & SFONT & strRole & vbnewline & EFONT & "</TopTextElement>" 
    End If
    
    End Function
    
    Function MiddleTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt],
    [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr], [LAT_TXT], [LAT_TXT_arr], [LONG_TXT], [LONG_TXT_arr], [LABELSTATUS_CODE], [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
    
    '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) = "2" 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 & "'" 
    elseif NOT dmsLatDeg < 10 AND dmsLatMin < 10 then
             strLat = latHemi & dmsLatDeg & chr(176) & "0" & dmsLatMin & "'" 
    elseif 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) = "2" 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) = "3" 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], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr]) 
    BottomTextElement = "" 
    End Function
    
    Function LeftTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr]) 
    LeftTextElement = "" 
    End Function
    
    Function RightTextElement ([OBJECTID], [OBJECTID_arr], [SystemSubtype], [SystemSubtype_arr], [Ident_Txt], [Ident_Txt_arr], [Frequency_Val], [Frequency_Val_arr], [Channel_Txt], [Channel_Txt_arr], [Voice_Code], [Voice_Code_arr], [ComponentSubtype], [ComponentSubtype_arr], [Name_Txt], [Name_Txt_arr]) 
    RightTextElement = "" 
    End Function
    
    Function VerticalMorseCode 
    VerticalMorseCode = "<VMC><fnt
    name='PLTS Aeronautical VMC' size ='6'>" 
    
    End Function
    

    ArcGIS Desktop

    • Home
    • Documentation
    • Support

    ArcGIS Platform

    • ArcGIS Online
    • ArcGIS Desktop
    • ArcGIS Enterprise
    • ArcGIS for Developers
    • ArcGIS Solutions
    • ArcGIS Marketplace

    About Esri

    • About Us
    • Careers
    • Esri Blog
    • User Conference
    • Developer Summit
    Esri
    Tell us what you think.
    Copyright © 2020 Esri. | Privacy | Legal