天天看點

《基于ArcGIS的Python程式設計秘笈(第2版)》——2.8 添加圖層到地圖文檔

本節書摘來自異步社群《基于arcgis的python程式設計秘笈(第2版)》一書中的第2章,第2.8節,作者: 【美】eric pimpler(派普勒) 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

在很多情況下都需要把圖層添加到地圖文檔中。制圖子產品提供了addlayer()函數來實作這一功能。本節将介紹如何使用addlayer()函數把圖層添加到地圖文檔中。

2.8.1 準備工作

arcpy.mapping子產品提供了在已有的地圖文檔中添加圖層或圖層組的功能。使用arcmap 的自動排序功能,可以自動将一個圖層添加到資料框中并顯示出來。這個功能本質上與arcmap中的“add data”按鈕實作的功能是一樣的,即根據幾何類型和圖層權重的規則,将圖層添加到資料框中的适當位置。

小技巧: 

圖層不能添加到圖層檔案(.lyr)中。

當把圖層添加到地圖文檔中時,該圖層必須引用一個已有的圖層,即能夠在磁盤上的圖層檔案、同一個地圖文檔和資料框、同一個地圖文檔但不相同的資料框或完全不同的地圖文檔中找到的圖層。引用的圖層可以是地圖文檔中的圖層,也可以是圖層檔案(.lyr)中的圖層。要将圖層添加到地圖文檔中,首先建立layer類的執行個體,然後調用addlayer()函數,傳入新的圖層、圖層要放置的資料框和圖層放置的規則等參數。

2.8.2 操作方法

下面按步驟介紹如何将圖層添加到地圖文檔中。

(1)在arcmap中打開c:arcpybookch2crime_ch2.mxd。

(2)單擊arcmap“标準”工具條上的“python”按鈕。

(3)導入arcpy.mapping子產品。

(4)引用目前活動的地圖文檔(crime_ch2.mxd),把該引用指派給變量。

(5)擷取對crime資料框的引用,它是listdataframes()函數傳回的資料框清單中的第1個資料框。在代碼的末尾指定[0]值,用來擷取listdataframes()函數傳回的資料框清單中的第1個資料框。因為清單的索引是從0開始的,是以需要使用索引值0來檢索清單的第1個資料框。

(6)建立layer對象,該對象引用一個圖層檔案(.lyr)。

(7)将圖層添加到資料框中。

(8)可以通過檢視c:arcpybookcodech2addlayersmapdocument.py解決方案檔案來檢查代碼。運作腳本,school_districts.lyr檔案即可加載在資料框中,如圖2-6所示。

《基于ArcGIS的Python程式設計秘笈(第2版)》——2.8 添加圖層到地圖文檔

https://yqfile.alicdn.com/526ccffe6b5495ffed7e11bdc8a0fe83c091268c.png" >

2.8.3 工作原理

首先,導入arcpy.mapping子產品,并擷取對目前活動地圖文檔的引用。接着,建立一個新變量df來存儲對crime資料框的引用,該引用是通過listdataframes()函數傳回資料框清單并使用[0]通路清單中的第1項元素(crime資料框)來擷取的。然後,建立一個 layer 類的執行個體 layer,layer 變量引用存儲在磁盤上的名為school_districts. lyr的圖層檔案。最後,調用addlayer()函數,傳入3個參數:圖層要添加到的資料框(df)、引用的圖層(layer)和自動排序方式(auto-arrange)。對于第3個可選參數,可以使用auto_arrange(預設值)自動地放置圖層在資料框中的位置,也可以使用bottom或top,指定圖層放置在資料框或圖層組的底層或頂層。

2.8.4 拓展

arcpy.mapping子產品提供的addlayertogroup()函數可以把圖層添加到圖層組中。使用該函數可以将圖層添加到圖層組的頂層或底層,也可以使用自動排序方式來放置圖層的位置,還可以将圖層添加到一個空的圖層組中。請讀者注意,跟圖層對象一樣,圖層組也不能添加到圖層檔案中。

圖層也可以從資料框或圖層組中移出。removelayer()函數用來移除指定資料框中的圖層或圖層組。如果有兩個圖層的名字相同,隻移除檢索到的第1個圖層。隻有在腳本中設定疊代,才可以将兩個圖層都移除。