天天看點

《基于ArcGIS的Python程式設計秘笈(第2版)》——2.5 限制圖層清單

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

上節已經學習了如何使用listlayers()函數擷取圖層清單。有時候并不需要地圖文檔中全部圖層的清單,而僅僅需要圖層的子集。listlayers()函數可以限制傳回的圖層清單。本節将介紹如何使用通配符和在arcmap的内容清單中指定的資料框來限制傳回的圖層。

2.5.1 準備工作

預設情況下,如果隻傳入對地圖文檔或圖層檔案的引用作為參數,listlayers()函數會傳回檔案中所有圖層的清單。如果使用通配符參數或對指定資料框的引用作為參數,則可以限制傳回的圖層清單。通配符是一種字元,進行搜尋時用來比對字元或字元序列。本節後述内容将會解釋這一概念。

小技巧: 

如果要處理圖層檔案(.lyr),則不能使用資料框限制圖層,因為圖層檔案不支援資料框。

2.5.2 操作方法

下面按步驟介紹如何限制地圖文檔中的圖層清單。

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

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

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

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

(5)擷取地圖文檔的資料框清單,搜尋名稱為crime的指定資料框(注意,文本字元串用英文單引号或雙引号引起來)。

(6)調用listlayers()函數,傳入3個參數,分别為對地圖文檔的引用(mxd)、限制搜尋的通配符(burg*)和進一步限制搜尋的資料框(df)。listlayers()函數應縮進在上一步寫入的if語句下。

(7)使用for循環,輸出地圖文檔中每個圖層的名稱。

(8)完整的代碼如圖2-1所示。也可以檢視 c:arcpybookcodech2restrict layers.py解決方案檔案。

《基于ArcGIS的Python程式設計秘笈(第2版)》——2.5 限制圖層清單

https://yqfile.alicdn.com/888928bf8545435b62709ed5c2ecc2a386410345.png" >

(9)運作腳本,輸出結果如下所示。

2.5.3 工作原理

listdataframes()函數是 arcpy.mapping 子產品提供的另一種清單函數,該函數傳回地圖文檔中所有資料框的清單。使用該函數循環周遊每個傳回的資料框,查找名為crime 的資料框。如果找到這個資料框,就調用 listlayers()函數。該函數的第 2 個參數是值為“burg”的通配符參數,通配符參數是可選參數,它的值由任意長度的字元和一個可選字元()組成;第3個參數則是對crime資料框的引用。

在本節中,首先在crime資料框中搜尋名稱以“burg”開頭的所有圖層,然後輸出搜尋到的所有與限制條件相比對的圖層。請注意兩點:一是本節案例中執行的處理僅僅是輸出圖層的名稱,但是在大多數情況下,需要使用更多的工具或函數來執行其他地理處理;二是簡短的清單可以加快腳本運作的速度,也可以使腳本更整齊。