ArcGIS中應用Expressions標注(Label)之二—使用外部數據庫中數據標注要素


標注的具體步驟:

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對象關閉並且置空。


免責聲明!

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



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