在ArcGIS構建標注表達式,有時雖然可以在字段中調整好,但直接用表達式標注更方便,特別是格式化文本
字段值自動轉換為文本字符串。因此,如果想要使用算數運算中的數值或要進行比較時,需要將其轉換回數值數據類型。下面的實例添加了兩個整型字段:
Python
int([FIELD1]) + int([FIELD2])
VBScript
cint([FIELD1]) + cint([FIELD2])
JScript
parseInt([FIELD1]) + parseInt([FIELD2])
步驟:
- 單擊標注工具條上的標注管理器按鈕
。
- 單擊標注分類列表中的標注分類。
- 單擊表達式按鈕。
- 選擇解析程序菜單中的一種語言。
- 輸入 Python、VBScript 或 JScript 表達式。也可以創建一個表達式,方法是雙擊相應字段,將其添加到表達式中,或選擇相應字段並單擊追加按鈕將該字段追加到表達式的末尾,並用空格隔開。
字段用方括號 [ ] 括起來,無需考慮圖層數據源的數據類型。
或者,在表達式框中輸入 ArcGIS 文本格式化標簽,將格式設置應用到一部分標注文本上。
如果表達式要跨多個代碼行,請選中高級復選框,然后輸入標注表達式。
- 單擊驗證以確保沒有語法錯誤。
- 單擊每個對話框上的確定。
提示:
常規和高級的標注表達式可以標注表達式文件 (.lxp) 的形式保存,該文件可加載到其他圖層或地圖中。
表達式示例
以下是標注表達式示例:
- 將字符串串聯到字段的值上。例如,以下表達式將創建一個標注,其中 PARCELNO 字段值的前面會加上文本 "Parcel no:":
Python
"Parcel no: " + [PARCELNO]
VBScript
"Parcel no: " & [PARCELNO]
JScript
"Parcel no: " + [PARCELNO]
- 將小數四舍五入至設定的小數數位。例如,以下表達式可將“Area”字段的值四舍五入為保留一個小數位:
Python
round(float([AREA]), 1)
VBScript
Round ([AREA], 1)
JScript
function FindLabel ( [AREA] ) { var ss; var num= parseFloat([AREA]); ss = num.toFixed(1); return (ss); }
- 將文本注記全部轉換為大寫形式或小寫形式。例如,以下表達式可將“Name”字段中的文本全部轉換為小寫形式:
Python
def FindLabel ( [NAME] ): S = [NAME] S = S.lower() return S
VBScript
LCase ([NAME])
JScript
[NAME].toLowerCase()
- 將標注文本轉換為正確的大小寫形式。例如,以下表達式會處理全部以大寫字母顯示的“Name”字段並將其轉換為正確的大小寫形式:
Python
def FindLabel ( [NAME] ): S = [NAME] S = S.title() return S
VBScript
Function FindLabel ( [NAME] ) FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1)) End Function
JScript
function FindLabel ( [NAME] ) { var str = [NAME]; var iLen = String(str).length; var upper = (str.substring(0,1)).toUpperCase(); var lower = (str.substring(1, iLen)).toLowerCase() return upper + lower; }
- 創建堆疊文本。例如,以下表達式創建一個標注,該標注中的“名字”字段和兩個地址字段都在單獨的行上:
Python
"Name: " + [NAME] + '\n' + [ADDRESS_1] + '\n' + [ADDRESS_2]
VBScript
"Name: " & [NAME] & vbCrLf& [ADDRESS_1] & vbCrLf& [ADDRESS_2]
JScript
"Name: " + [NAME] + "\r" + [ADDRESS_1] + "\r" + [ADDRESS_2]
- 創建基於某字段文本的堆疊文本。例如,以下表達式用逗號來指定堆疊之處:
Python
def FindLabel ( [LABELFIELD] ): S = [LABELFIELD] S = S.replace(', ', '\n') return S
VBScript
Function FindLabel ( [LABELFIELD] ) FindLabel = replace([LABELFIELD], ", ", vbnewline) End Function
JScript
function FindLabel ( [LABELFIELD] ) { var r, re; var str = [LABELFIELD]; re = /,/g; r = str.replace(re, "\r"); return r; }
- 格式化標注。例如,以下表達式將以貨幣格式顯示標注:
Python
def FindLabel ( [MAXIMUM_OC], [RATE] ): import locale locale.setlocale(locale.LC_ALL, '') S = locale.currency(float([MAXIMUM_OC]) * float([RATE])) return S
VBScript
"Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
JScript
function FindLabel ( [MAXIMUM_OC], [RATE] ) { var ss; var num1 = parseFloat([MAXIMUM_OC]); var num2 = parseFloat([RATE]); var num3 = num1 * num2 ss = num3.toFixed(2); return ("$" + ss); }
- 指定 if-else 條件語句。如果城市人口等於或超過 25 萬,這些函數會用大的紅色字體標注該城市名稱,如果城市人口少於 25 萬,則用默認標注字體標注該城市名稱:
Python
def FindLabel ( [NAME], [POPULATION] ): if long([POPULATION]) >= 250000: return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else: return [NAME]
VBScript
Function FindLabel ([NAME], [POPULATION]) if (cLng([POPULATION]) >= 250000) then FindLabel = "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>" else FindLabel = [NAME] end if End Function
JScript
function FindLabel ( [NAME], [POPULATION] ) { if (parseFloat([POPULATION]) >= 250000){ return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"); } else return ([NAME]); }
格式化文本其他類型,摘自網上PHP一篇文檔,在ArcGIS同樣適用:
FormatCurrency 函數返回表達式,此表達式已被格式化為貨幣值(使用系統控制面板中定義的貨幣符號)。FormatCurrency(expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])參數Expression必選項。要被格式化的表達式。NumDigitsAfterDecimal可選項。指示小數點右側顯示位數的數值。默認值為 -1,指示使用的是計算機的區域設置。IncludeLeadingDigit可選項。三態常數,指示是否顯示小數值小數點前面的零。有關數值,請參閱“設置”部分。UseParensForNegativeNumbers可選項。三態常數,指示是否將負值置於括號中。有關數值,請參閱“設置”部分。GroupDigits可選項。三態常數,指示是否使用計算機區域設置中指定的數字分組符號將數字分組。有關數值,請參閱“設置”部分。設置IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 參數可以有以下值:常數 值 描述TristateTrue -1 TrueTristateFalse 0 FalseTristateUseDefault -2 使用計算機區域設置中的設置。說明當省略一個或多個可選項參數時,由計算機區域設置提供被省略參數的值。 與貨幣值相關的貨幣符號的位置由系統的區域設置決定。注意 除“顯示起始的零”設置來自區域設置的“數字”附簽外,所有其他設置信息均取自區域設置的“貨幣”附簽。下面例子利用 FormatCurrency 函數把 expression 格式化為 currency 並且賦值給 MyCurrency:Dim MyCurrencyMyCurrency = FormatCurrency(1000) 'MyCurrency包含$1000.00。FormatDateTime 函數返回表達式,此表達式已被格式化為日期或時間。FormatDateTime(Date[, NamedFormat])參數Date必選項。要被格式化的日期表達式。NamedFormat可選項。指示所使用的日期/時間格式的數值,如果省略,則使用 vbGeneralDate。設置NamedFormat 參數可以有以下值:常數 值 描述vbGeneralDate 0 顯示日期和/或時間。如果有日期部分,則將該部分顯示為短日期格式。如果有時間部分,則將該部分顯示為長時間格式。如果都存在,則顯示所有部分。vbLongDate 1 使用計算機區域設置中指定的長日期格式顯示日期。vbShortDate 2 使用計算機區域設置中指定的短日期格式顯示日期。vbLongTime 3 使用計算機區域設置中指定的時間格式顯示時間。vbShortTime 4 使用 24 小時格式 (hh:mm) 顯示時間。說明下面例子利用 FormatDateTime 函數把表達式格式化為長日期型並且把它賦給 MyDateTime:Function GetCurrentDate'FormatDateTime把日期型格式化為長日期型。GetCurrentDate = FormatDateTime(Date, 1)End FunctionFormatNumber 函數返回表達式,此表達式已被格式化為數值。FormatNumber(expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])ArgumentsExpression必選項。要被格式化的表達式。NumDigitsAfterDecimal可選項。指示小數點右側顯示位數的數值。默認值為 -1,指示使用的是計算機的區域設置。IncludeLeadingDigit可選項。三態常數,指示是否顯示小數值小數點前面的零。有關數值,請參閱“設置”部分。UseParensForNegativeNumbers可選項。三態常數,指示是否將負值置於括號中。有關數值,請參閱“設置”部分。GroupDigits可選項。三態常數,指示是否使用計算機區域設置中指定的數字分組符號將數字分組。有關數值,請參閱“設置”部分。設置IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 參數可以有以下值:常數 值 描述 TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 使用計算機區域設置中的設置。說明當省略一個或多個可選項參數時,由計算機區域設置提供被省略參數的值。注意 所有設置信息均取自區域設置的“數字”附簽。下面例子利用 FormatNumber 函數把數值格式化為帶四位小數點的數:Function FormatNumberDemoDim MyAngle, MySecant, MyNumberMyAngle = 1.3 ' 用弧度定義角。MySecant = 1 / Cos(MyAngle) ' 計算正割值。FormatNumberDemo = FormatNumber(MySecant,4) ' 把 MySecant 格式化為帶四位小數點的數。End FunctionFormatPercent 函數返回表達式,此表達式已被格式化為尾隨有 % 符號的百分比(乘以 100 )。FormatPercent(expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])FormatPercent 函數的語法有以下參數:參數Expression必選項。要被格式化的表達式。NumDigitsAfterDecimal可選項。指示小數點右側顯示位數的數值。默認值為 -1,指示使用的是計算機的區域設置。IncludeLeadingDigit可選項。三態常數,指示是否顯示小數值小數點前面的零。有關數值,請參閱“設置”部分。UseParensForNegativeNumbers可選項。三態常數,指示是否將負值置於括號中。有關數值,請參閱“設置”部分。GroupDigits可選項。三態常數,指示是否使用計算機區域設置中指定的數字分組符號將數字分組。有關數值,請參閱“設置”部分。設置IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 參數可以有以下值:常數 值 描述 TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 使用計算機區域設置中的設置。說明當省略一個或多個可選項參數時,由計算機區域設置提供被省略參數的值。注意 所有設置信息均取自區域設置的“數字”附簽。下面例子利用 FormatPercent 函數把表達式格式化為百分數:Dim MyPercentMyPercent = FormatPercent(2/32) 'MyPercent 包含 6.25%。
------------恢復內容結束------------