ArcGIS構建標注表達式


在ArcGIS構建標注表達式,有時雖然可以在字段中調整好,但直接用表達式標注更方便,特別是格式化文本

字段值自動轉換為文本字符串。因此,如果想要使用算數運算中的數值或要進行比較時,需要將其轉換回數值數據類型。下面的實例添加了兩個整型字段:

Python
int([FIELD1]) + int([FIELD2])
VBScript
cint([FIELD1]) + cint([FIELD2])
JScript
parseInt([FIELD1]) + parseInt([FIELD2])

 

步驟:

  1. 單擊標注工具條上的標注管理器按鈕 標注管理器
  2. 單擊標注分類列表中的標注分類。
  3. 單擊表達式按鈕。
  4. 選擇解析程序菜單中的一種語言。
  5. 輸入 Python、VBScript 或 JScript 表達式。也可以創建一個表達式,方法是雙擊相應字段,將其添加到表達式中,或選擇相應字段並單擊追加按鈕將該字段追加到表達式的末尾,並用空格隔開。

    字段用方括號 [ ] 括起來,無需考慮圖層數據源的數據類型。

    或者,在表達式框中輸入 ArcGIS 文本格式化標簽,將格式設置應用到一部分標注文本上。

    如果表達式要跨多個代碼行,請選中高級復選框,然后輸入標注表達式。

  6. 單擊驗證以確保沒有語法錯誤。
  7. 單擊每個對話框上的確定。
提示:
常規和高級的標注表達式可以標注表達式文件 (.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 True
    TristateFalse 0 False
    TristateUseDefault -2 使用計算機區域設置中的設置。
     
    說明
    當省略一個或多個可選項參數時,由計算機區域設置提供被省略參數的值。 與貨幣值相關的貨幣符號的位置由系統的區域設置決定。
     
    注意 除“顯示起始的零”設置來自區域設置的“數字”附簽外,所有其他設置信息均取自區域設置的“貨幣”附簽。
     
    下面例子利用 FormatCurrency 函數把 expression 格式化為 currency 並且賦值給 MyCurrency:
     
    Dim MyCurrency
    MyCurrency = 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 Function
     
    FormatNumber 函數
    返回表達式,此表達式已被格式化為數值。
     
    FormatNumber(
    expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]]
    )
     
    Arguments
    Expression
     
    必選項。要被格式化的表達式。
     
    NumDigitsAfterDecimal
     
    可選項。指示小數點右側顯示位數的數值。默認值為 -1,指示使用的是計算機的區域設置。
     
    IncludeLeadingDigit
     
    可選項。三態常數,指示是否顯示小數值小數點前面的零。有關數值,請參閱“設置”部分。
     
    UseParensForNegativeNumbers
     
    可選項。三態常數,指示是否將負值置於括號中。有關數值,請參閱“設置”部分。
     
    GroupDigits
     
    可選項。三態常數,指示是否使用計算機區域設置中指定的數字分組符號將數字分組。有關數值,請參閱“設置”部分。
     
    設置
    IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 參數可以有以下值:
     
    常數 值 描述 TristateTrue -1 True TristateFalse 0 False TristateUseDefault -2 使用計算機區域設置中的設置。
    說明
    當省略一個或多個可選項參數時,由計算機區域設置提供被省略參數的值。
     
    注意 所有設置信息均取自區域設置的“數字”附簽。
     
    下面例子利用 FormatNumber 函數把數值格式化為帶四位小數點的數:
     
     Function FormatNumberDemo 
      Dim MyAngle, MySecant, MyNumber
      MyAngle = 1.3                ' 用弧度定義角。
      MySecant = 1 / Cos(MyAngle)  ' 計算正割值。
      FormatNumberDemo = FormatNumber(MySecant,4) ' 把 MySecant 格式化為帶四位小數點的數。
    End Function
     
    FormatPercent 函數
    返回表達式,此表達式已被格式化為尾隨有 % 符號的百分比(乘以 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 MyPercent
    MyPercent = FormatPercent(2/32) 'MyPercent 包含 6.25%。
     
     

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM