
python下多字段換行堆疊不同字體顏色顯示:
def FindLabel ( [bz], [Id] ):
return "<CLR red='255'><FNT size='20'>"+[bz]+"</FNT></CLR>"+'\n'+"<CLR green='255'><FNT size='16'>"+ [Id] +"</FNT></CLR>"
構建標注表達式
可以使用標注表達式來調整標注的格式。除了插入字符和腳本函數以外,您還可以使用標注表達式中的 ArcGIS 格式化標簽。這些是用來更改全部或部分標注外觀的特殊字符。例如,您可能使用粗體格式化標簽使第一條線在一個堆疊、多行的標注中顯示為粗體。
如果未選中標注表達式 對話框上的高級框,則標注表達式將限制為單行代碼。如果選中高級框,您可以輸入包含編程邏輯並跨多個代碼行的函數。
字段值自動轉換為文本字符串。因此,如果想要使用算數運算中的數值或要進行比較時,需要將其轉換回數值數據類型。下面的實例添加了兩個整型字段:
int([FIELD1]) + int([FIELD2])
cint([FIELD1]) + cint([FIELD2])
parseInt([FIELD1]) + parseInt([FIELD2])
步驟:
- 單擊標注 工具條上的標注管理器按鈕 。
- 單擊標注分類列表中的標注分類。
- 單擊表達式按鈕。
- 選擇解析程序菜單中的一種語言。
- 輸入 Python、VBScript 或 JScript 表達式。也可以創建一個表達式,方法是雙擊相應字段,將其添加到表達式中,或選擇相應字段並單擊追加按鈕將該字段追加到表達式的末尾,並用空格隔開。
字段用方括號 [ ] 括起來,無需考慮圖層數據源的數據類型。
或者,在表達式框中輸入 ArcGIS 文本格式化標簽,將格式設置應用到一部分標注文本上。
如果表達式要跨多個代碼行,請選中高級復選框,然后輸入標注表達式。
- 單擊驗證以確保沒有語法錯誤。
- 單擊每個對話框上的確定。
表達式示例
以下是標注表達式示例:
- 將字符串串聯到字段的值上。例如,以下表達式將創建一個標注,其中 PARCELNO 字段值的前面會加上文本 "Parcel no:":
Python
"Parcel no: " + [PARCELNO]VBScript"Parcel no: " & [PARCELNO]JScript"Parcel no: " + [PARCELNO] - 將小數四舍五入至設定的小數數位。例如,以下表達式可將“Area”字段的值四舍五入為保留一個小數位:
Python
round(float([AREA]), 1)VBScriptRound ([AREA], 1)JScriptfunction 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 SVBScriptLCase ([NAME])JScript[NAME].toLowerCase() - 將標注文本轉換為正確的大小寫形式。例如,以下表達式會處理全部以大寫字母顯示的“Name”字段並將其轉換為正確的大小寫形式:
Python
def FindLabel ( [NAME] ): S = [NAME] S = S.title() return SVBScriptFunction FindLabel ( [NAME] ) FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1)) End FunctionJScriptfunction 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 SVBScriptFunction FindLabel ( [LABELFIELD] ) FindLabel = replace([LABELFIELD], ", ", vbnewline) End FunctionJScriptfunction 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 SVBScript"Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])JScriptfunction 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 萬,則用默認標注字體標注該城市名稱:
def FindLabel ( [NAME], [POPULATION] ):
if long([POPULATION]) >= 250000:
return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"
else:
return [NAME]
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
function FindLabel ( [NAME], [POPULATION] )
{
if (parseFloat([POPULATION]) >= 250000){
return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>");
}
else
return ([NAME]);
}
使用文本格式化標簽
ArcGIS 文本格式化標簽可用於修改部分文本的格式。這樣,您就可以創建具有混合格式的文本,例如,為句子中的一個詞語添加下划線。在 ArcMap 中,地圖中或地圖周圍任何放置文本的位置幾乎都可以使用文本格式化標簽。也就是說,在任何可以指定文本字符串和文本符號的位置都可以使用標簽。例如,您可以在動態標注表達式、 注記、 圖例文本、 地圖標題以及用於標注要素的字段值中使用標簽。ArcMap 的內容列表、表 窗口、或識別結果 窗口並不對標簽進行解析,因此,在這些窗口中,添加到字段值的標簽將顯示為純文本。
請查看 ArcMap 中可用的文本格式化標簽列表以獲取詳細信息。
動態文本是另一種類型的格式化標簽,可根據圖形文本各個屬性的當前值動態更改圖形文本。它僅用於布局視圖。動態文本標簽可以和文本格式化標簽一起使用,從而在頁面布局上創建動態混合格式文本。
格式化標簽語法
格式化標簽具有不同的語法,這取決於是在注記還是在標注表達式中使用它們。在注記中,標簽直接與文本字符串串聯而不使用任何特殊字符:
<BOL>Text</BOL>
在標注表達式中,格式化標簽必須用雙引號括起並使用 & 運算符將其串連到表達式的其他部分:
"<BOL>" & "Text" & "</BOL>"
"<BOL>" & [LABELFIELD] & "</BOL>"
以下語法規則適用於 ArcMap 中的格式化標簽:
- ArcMap 文本格式化標簽遵守 XML 語法規則。每個起始標簽必須有對應的結束標簽。標簽可以嵌套,但必須先結束內部標簽,然后再結束外部標簽:
注記
<BOL><UND>Text</UND></BOL>標注表達式"<BOL><UND>" & [LABELFIELD] & "</UND></BOL>" - 標簽屬性可使用單引號或雙引號括起。以下語句是等效的:
注記
<FNT name='Arial' size='18'>My text</FNT> <FNT name="Arial" size="18">My text</FNT>標注表達式"<FNT name=""Arial"" size=""18"">" & [LABELFIELD] & "</FNT>" "<FNT name='Arial' size='18'>" & [LABELFIELD] & "</FNT>" - 標簽對的大小寫必須完全一致。所以,<BOL>...</BOL> 是有效的,<bol>...</bol> 也有效,而 <Bol>...</bol> 是無效的。
- 解析程序將忽略任何無法識別的對應標簽對。例如,盡管 <notag> 不是 ArcGIS 的有效格式化標簽,但以下字符串是有效的,並且可以正確顯示:
注記
<notag><BOL>State College<BOL></notag>標注表達式"<notag><BOL>" & "State College" & "<BOL></notag>" - “與”號 (&) 和尖括號 (<) 為特殊字符,在使用格式化標簽時,不能在文本中使用這些字符。可改用相應的字符代碼 & 和 <。 注記
不要使用 <ITA>John & Paul</ITA>,而應該使用:
<ITA>John & Paul</ITA>標注表達式此表達式顯示位於 < > 字符之間的標注字段的值:
"<ITA><" & [LABELFIELD] & "></ITA>"標注表達式如果標注字段值中嵌入了特殊字符,您可以使用一個簡單的標注腳本動態替換這些特殊字符:
Function FindLabel ([LABELFIELD]) NewString = Replace([LABELFIELD],"&","&") FindLabel = "<ITA>" & NewString & "</ITA>" End Function - 地圖中的每段文本都包含一個繪制時使用的符號。格式化標簽的工作原理是:臨時修改該基礎文本符號並按照標簽中指定的格式化設置繪制文本的指定部分。繪圖 工具條和符號選擇器 中的按鈕和命令始終反映所選文本段的基礎文本符號的屬性,不會反映使用格式化標簽所做的修改。例如,如果使用 <FNT> 標簽更改某段文本的字體,則在地圖中選中該文本時,繪圖 工具條中的字體菜單不會反映此更改,它會顯示文本基礎符號的字體。
- 如果標簽只是重復基礎文本符號的現有屬性,則標簽對文本段不起作用。一般說來,這種行為很好理解;例如,如果文本字符串中包含一個 <BOL> 標簽,但基礎文本符號已經為粗體,此時字符串中的 <BOL> 標簽將不起作用。此外,由於標簽遵守 XML 規則,因此嘗試使用 </BOL> 標簽“關閉”基礎文本符號的粗體屬性為非法操作。但可以使用 <_BOL> 標簽進行此操作。
注記
This is bold if the base text symbol is bold <_BOL>, but this is not: </_BOL>標注表達式"This is bold if the base text symbol is bold<_BOL>, but this is not: </_BOL>"
構建標注表達式的其他提示
以下提示將有助於構建標注表達式:
- 要檢查包含文本格式化標簽的表達式是否有效,請單擊檢驗按鈕或應用更改並在地圖中查看標注。如果格式化標簽或語法無效,則標簽會在檢驗 窗口和地圖標注中顯示為純文本。
- 標簽的解析不是由 Python/VBScript/JScript 來完成,而是作為純文本傳遞到 ArcMap 框架,從而在繪制時動態設置格式。對於包含在加引號的字符串中的標簽,不必再加引號:
"Current <BOL>status</BOL> of parcel: " & [LABELFIELD] - 無論是否使用標注表達式,您都可以將格式化標簽嵌入到用於標注圖層要素的字段值中。這樣一來,對於標注字段中的特定值,您可以更改其任意部分的格式。只有字符串類型的標注字段支持嵌入格式化標簽。字段值中使用的標簽和標簽屬性不必用引號括起,因此以下標簽字段值有效:
<ITA>Rochester</ITA> <FNT size='14'>C</FNT>olorado可在 ArcMap 中使用的格式化標簽
ArcGIS 文本格式化標簽可用於修改部分文本的格式。這樣,您就可以創建具有混合格式的文本,例如,為句子中的一個詞語加下划線。在 ArcMap 中,地圖中或地圖周圍任何放置文本的位置幾乎都可以使用文本格式化標簽。也就是說,在任何可以指定文本字符串和文本符號的位置都可以使用標簽。例如,您可以在動態標注表達式、 注記、 圖例文本、 地圖標題、 動態文本以及用於標注要素的字段值中使用標簽。
ArcMap 支持以下格式化元素和標簽。該表提供了注記和標注的語法示例。注記語法適用於數據框和頁面布局中所使用的所有文本,以及用於標注要素和注記的字段值。標記語法適用於動態的標注表達式。在所有標注語法示例中,格式化文本均可使用標注字段進行替代。
有關其他語法示例,請參閱使用文本格式化標簽。
可在 ArcMap 中使用的格式化標簽元素描述
起始標簽
結束標簽
有效的屬性/值
注
示例語法
示例輸出
字體名稱和/或字號
<FNT>
</FNT>
name = {TrueType font} size = {1} scale = {1-}
設置名稱、大小和比例,或全部設置。
注記
<FNT name = "Arial" size = "12">Text size = 12</FNT> <FNT name = "Arial" scale="200">Text scale = 200</FNT>
標注
"<FNT name = 'Arial' size = '12'>" & "Text size = 12" & "</FNT>" & "<FNT name = 'Arial' scale='200'>" & "Text scale = 200" & "</FNT>"

顏色 (RGB)
<CLR>
</CLR>
red, green, blue = {0-255}
缺失的顏色屬性假定為 0
注記
<CLR red = "255">Text</CLR>
標注
"<CLR red = '255'>" & "Text" & "</CLR>"

顏色 (CMYK)
<CLR>
</CLR>
cyan, magenta, yellow, black = {0-100}
缺失的顏色屬性假定為 0
注記
<CLR magenta = "100">Text</CLR>
標注
"<CLR magenta = '100'>" & "Text" & "</CLR>"

粗體
<BOL>
</BOL>
無
注記
<BOL>Text</BOL>
標注
"<BOL>" & "Text" & "</BOL>"

斜體
<ITA>
</ITA>
無
注記
<ITA>Text</ITA>
標注
"<ITA>" & "Text" & "</ITA>"

下划線
<UND>
</UND>
無
注記
<UND>Text</UND>
標注
"<UND>" & "Text" & "</UND>"

全部大寫
<ACP>
</ACP>
無
注記
<ACP>Text</ACP>
標注
"<ACP>" & "Text" & "</ACP>"

小型大寫字母
<SCP>
</SCP>
無
注記
<SCP>Text</SCP>
標注
"<SCP>" & "Text" & "</SCP>"

上標
<SUP>
</SUP>
無
注記
E = mc<SUP>2</SUP>
標注
"E = mc" & "<SUP>" & "2" & "</SUP>"

下標
<SUB>
</SUB>
無
注記
H<SUB>2</SUB>O
標注
"H" & "<SUB>" & "2</SUB>" & "O"

字符間距
<CHR>
</CHR>
spacing = {1-}
表示相對於常規字符間距的調整百分比;0% 表示沒有調整。
注記
<CHR spacing = "200">Text</CHR>
標注
"<CHR spacing = '200'>" & "Text" & "</CHR>"

字符寬度
<CHR>
</CHR>
表示相對於常規字符寬度的調整百分比;0% 表示沒有調整。
注記
<CHR width="150">Text</CHR>
標注
"<CHR width='150'>" & "Text" & "</CHR>"

詞間距
<WRD>
</WRD>
spacing = {1-}
表示詞間的間距百分比;100% 表示常規間距。
注記
<WRD spacing = "200">Extra Word Spacing</WRD>
標注
"<WRD spacing = '200'>" & "Extra Word Spacing" & "</WRD>"

行間距
<LIN>
</LIN>
leading = {1-}
表示相對於常規行間距的調整(單位為磅);0 磅表示沒有調整。
注記
<LIN leading = "25">Text with a leading value of 25 points</LIN>
標注
"<LIN leading = '25'>" & "Text with a leading value of 25 points" & "</LIN>"

不加粗
<_BOL>
</_BOL>
無
注記
The base text symbol is bold, <_BOL> but this part is not.</_BOL>
標注
"The base text symbol is bold, " & "<_BOL>" & " but this part is not."& "</_BOL>"

不傾斜
<_ITA>
</_ITA>
無
注記
The base text symbol is italic, <_ITA> but this part is not.</_ITA>
標注
"The base text symbol is italic, " & "<_ITA>" & " but this part is not."& "</_ITA>"

不加下划線
<_UND>
</_UND>
無
注記
The base text symbol is underlined, <_UND> but this part is not.</_UND>
標注
"The base text symbol is underlined, " & "<_UND>" & " but this part is not."& "</_UND>"

不加上標
<_SUP>
</_SUP>
無
注記
<SUP><_SUP> This text is regular, but </_SUP> this text is superscript.</SUP>
標注
"<SUP><_SUP>" & "This text is regular, but" & "</_SUP>" & " this text is superscript."& "</SUP>"

不加下標
<_SUB>
</_SUB>
無
注記
<SUB><_SUB>This text is regular, but </_SUB> this text is subscript.</SUB>
標注
"<SUB><_SUB>" & "This text is regular, but" & "</_SUB>" & " this text is subscript."& "</SUB>"

