標注的具體步驟:
1. 打開ArcMap,添加需要標注的圖層。
2. 點擊該圖層屬性(layer properties)對話框中的標注(label)標簽,點擊Expression按鈕。
3. 在Label Expression對話框中,選中Advanced復選框,在Expression框里即可見FindLabel()函數的樁代碼。
4. 將光標移至FindLabel后面的括號里,在Label Fields中雙擊需要使用的字段的字段名。
5. 在Expression表達式里書寫VBScript代碼(如下)。
6. 通過給函數名賦值返回字符串(例如:FindLabel = aString)。
7.最后點擊Verify按鈕,驗證代碼是否正確,如果代碼無誤,ArcMap將顯示標注的樣例。
該方法的優點就是迅速,只需幾秒鍾就可以標注上百個多邊形(盡管標注的速度與PC機性能及網絡速度有關)。
該方法的缺點是它要創建、打開再關閉數據庫連接,並且為地圖上的每一個可見要素做查詢。需要做很多要素的標注時,這樣的動作會使處理速度減慢,增加網絡流量。解決此問題的一個方法就是設置可見比例尺(Scale Range)。在LayerProperties對話框的Label標簽里,點擊Scale Range按鈕,定義標注的可見比例尺范圍。
VBScript代碼如下:
Function FindLabel ( [OBJECTID] )
Dim strPrclQry, strInfostrPrclQry = "SELECT OWNER_NAME FROM aTABLE WHERE OBJECTID = ' " & [OBJECTID] & " ' "Dim ADOConnset ADOConn = createobject("ADODB.Connection")Dim rsPrcl
set rsPrcl = createObject("ADODB.Recordset")
ADOConn.Open "PROVIDER=MSDAORA;Data Source=aDatabaseService;
User ID=aUserName;Password=aPassword"
ADOConn.CursorLocation = 3
rsPrcl.Open strPrclQry, ADOConn, 3, 1, 1
'如果沒有找到記錄,則返回空字符串
'如果找到多於一條的記錄,則通過"<<More>>"來暗示含有多條業主信息
'可以做循環,直到標注出所有的業主信息
Select Case rsPrcl.RecordCount
Case -1, 0
strInfo = ""
Case 1
'只讀取第一條記錄
strInfo = trim(rsPrcl.Fields("OWNER_NAME").Value & " ") '在空值的情況下將出錯
Case Else
strInfo = rsPrcl.Fields("OWNER_NAME").Value & "<< More >>"
End Select
'關閉連接
rsPrcl.Close
ADOConn.Close
Set rsPrcl = Nothing
Set ADOConn = Nothing
'返回字符串用於標注
FindLabel = strInfo
End Function
注意:在VBScript中,創建任何對象都要使用CreateObject()函數,並且要含有正確庫名和對象名(例如:ADODB.Connection)。只要創建了Connection和RecordSet 對象,就可以使用正確的連接字符串打開數據庫連接,通過一個正確的SQL語句打開RecordSet,使用帶有字段名的RecordSet對象的Value屬性獲取數據。當獲取數據之后,必須確保RecordSet和Connection對象關閉並且置空。