ArcGIS—基於Python的腳本編程(6)

這篇文章主要是講述ArcGIS中基於Python的製圖模塊——arcpy.mapping相關使用方法。

目錄


1. 地圖文檔對象

  • 通常通過地圖文檔對象對地圖文檔進行一些基礎的管理,它可以訪問地圖文檔的許多屬性和方法,因此,在使用腳本製圖時,第一步往往也是先創建地圖文檔對象,具體語法是:
## 通過指定的路徑創建地圖文檔對象
mxd = arcpy.mapping.MapDocument(地圖文檔路徑) 

## 表示使用當前ArcMap中的地圖文檔,CURRENT必須大寫;
## 需要注意的是,當我們CURRENT關鍵字不可用時,
## 可以檢查我們的腳本工具創建時“Always run in foreground”是否勾選,
## 因爲後臺運行時CURRENT不可用。
mxd = arcpy.mapping.MapDocument("CURRENT") 
  • 在對地圖文檔進行修改後,並不會實時進行更新,因此需要調用RefreshActiveViewRefreshTOC函數用來刷新:
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
  • 在腳本中,MapDocument對象只有save和saveACopy方法:
mxd.save()
mxd.saveACopy(另存爲的路徑)
  • 在使用完地圖文檔後,需要刪除地圖文檔對象引用:
del mxd

2. 數據框

  • 一個地圖文檔中可以有多個數據框,一個數據框中又可以有多個圖層。訪問數據框常用的函數有:
數據框對象列表=arcpy.mapping.ListDataFrames(地圖文檔對象)
  • 數據框對象有以下屬性:
數據框.name
數據框.scale
數據框.spatialReference
...
  • 數據框對象方法:
## 保持在數據框比例尺下,根據輸入的Extent對象的範圍屬性,將數據框範圍劇中顯示;
## 其中Extent對象是一個矩形。
數據框.panToExtent(一個Extent範圍對象) 

## 縮放至所選要素
數據框.zoomToSelectedFeatures({某一要素})

3. 圖層

  • arcpy中兩種訪問Layer對象的方法:
圖層對象lyr = arcpy.mapping.Layer(圖層具體路徑)
圖層對象列表lyrList = arcpy.mapping.ListLayers(地圖文檔對象, {通配符參數}, {指定數據框})
  • 圖層的一些常用屬性:
圖層對象.showLabels = True/False  //顯示或者關閉圖層的標註
圖層對象.name                     //注意,圖層名稱區分大小寫
圖層對象.datasetName              //返回工作空間中圖層數據集名稱
圖層對象.dataSource               //返回圖層數據集的完整路徑
  • 圖層的一些常用方法:
圖層對象.getExtent()
圖層對象.save()
圖層對象.saveACopy(另存爲的完整路徑)

## 判斷此圖層對象是否支持指定的屬性,返回boolean值。
圖層對象.supports(屬性名)         
    # 舉個栗子,判斷lyr圖層是否支持顯示標註屬性
    lyr.supports("SHOWLABELS")
  • arcpy.mapping模塊中對圖層的操作函數:
arcpy.mapping.AddLayer(待添加的數據框,待添加的圖層對象,{添加位置如BOTTOM、TOP})
arcpy.mapping.InsertLayer(參數們)
arcpy.mapping.RemoveLayer(參數們)
arcpy.MoveLayer(參數們)
...
## 上述函數的具體參數可以去help中查看,描述得很清楚,
## 我們知道有這個就可以了,具體用的時候自己去看看哈。
  • arcpy中常用的圖層類型有三種:
    • 要素圖層
    • 柵格圖層
    • 圖層組

4. 修復數據鏈接

有時候當我們打開一個已有的地圖文檔時,由於地圖文檔源數據的移動或者本身.mxd文檔的移動,導致數據連接錯誤。我們可以用腳本實現數據連接的修復。

  • 首先在使用地圖文檔之前,使用函數來檢測數據連接是否斷開:
## 檢測數據連接是否斷開,返回指定地圖文檔中斷開連接的圖層列表
brokenlist = arcpy.mapping.ListBrokenDataSources(地圖文檔對象)
  • 查找和替換工作空間路徑1:
地圖對象/圖層對象/表視圖對象.findAndReplaceWorkspacePaths(查找的工作空間路徑,替換的工作空間路徑,{是否驗證有效性})
// 在是否驗證有效性參數爲boolean型,當爲True時,則將驗證替換的工作空間路徑或者輸入的數據集是否有效,
// 如果有效則被更新,如果無效則使用原來的數據源。
// 需要注意的是,我們在修改工作空間路徑時,可以修改全部路徑,也可以只修改部分路徑。
  • 查找和替換工作空間路徑2:
地圖對象/圖層對象/表視圖對象.replaceWorkspaces(舊工作空間,舊工作空間類型,新工作空間,新工作空間類型,{是否驗證有效性}) 

// 可以實現工作空間路徑的修改,類似findAndReplaceWorkspacePaths函數,
// 但是需要注意的是,這裏改變的是工作空間而不是數據集;
// 也可以修改工作空間類型,比如說一個shapefile要素移動到一個地理數據庫下:
mxd.replaceWorkspaces("C:/shapes", "SHAPEFILE_WORKSPACE", "C:/database.gdb", "FILEGDB_WORKSPACE")
  • arcpy中支持的工作空間類型:
    這裏寫圖片描述

5. 頁面佈局元素

佈局元素(如指北針、比例尺等)不能用腳本創建,但是可以用腳本進行相關修改。因此首先我們必須要創建頁面佈局元素對象。可以通過ListLayoutElements函數確定地圖文檔中已經存在了哪些元素:

地圖元素對象列表 = arcpy.mapping.ListLayoutElements(地圖文檔對象,{元素類型}, {名稱通配符})

其中,元素類型有以下:

  • DATAFRAME_ELEMENT
    • 研究區域
  • GRAPHIC_ELEMENT
  • LEGEND_ELEMENT
    • 圖例。此對象有atuoAdd屬性,設置此屬性爲True時,我們將一個圖層加入到一個地圖文檔中時將自動地把這個圖層的圖例也加入到圖例中。
## 讀取地圖文檔中的圖例元素對象
legend = arcpy.mapping.ListLayoutElements(地圖文檔, "LEGEND_ELEMENT")[0]    
legend.autoAdd = True
arcpy,mapping.AddLayer(數據框,待添加的圖層,添加位置)
  • MAPSURROUND_ELEMENT:
    • 比例尺、指北針、標註
  • PICTURE_ELEMENT
    • 該對象有一個sourceImage屬性,用來表示圖像數據源的路徑。
  • TEXT_ELEMENT
    • 標題等。此元素對象具有text屬性
elem.text

元素對象屬性:

## 需要注意的是,並不是所有元素都有默認的名稱,因此腳本中使用元素時需要先在地圖文檔中設置元素名稱。
元素對象.name   

元素對象.type

6. 輸出地圖

arcpy.mapping中提供了很多輸出地圖的函數,具體使用可以見help:
這裏寫圖片描述


7. 處理PDF文檔

  • arcpy.mapping中還提供了PDFDocument類,用來處理PDF文件。
## 在內存中創建一個空的PDFDocument對象
pdf對象 = arcpy.mapping.PDFDocumentCreate(pdf路徑) 

## 從現有的pdf文件中返回一個PDFDocument對象
pdf對象 = arcpy.mapping.PDFDocumentOpen(現有pdf路徑)
  • pdf對象方法:
pdf對象.appendPages(待添加的pdf路徑)
pdf對象.insertPages(參數們)
pdf對象.updateDocProperties(參數們)
pdf對象.updateDocSecurity(參數們)
pdf對象.saveAndClose()  //對pdf對象進行編輯後一定要關閉
## tips:參數不清楚的去看help文檔
  • 使用pdf對象結束後需要刪除pdf對象的引用
del pdf對象

8. 製圖腳本樣例

如果需要實例腳本工具,訪問 ArcGIS資源網站,在輸入框中輸入 arcpy.mapping sample script tools即可。


–原創文章,轉載必須註明出處–

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章