Code example: New LXP (Aviation)
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
4/26/2014