ArcPy批量選擇指定屬性的要素

我也是個傻瓜發表於2020-10-31

在GIS資料處理中,選擇資料是十分頻繁的操作,常用的是"按屬性選擇"和"按位置選擇",這兩個功能雖然比較強大,但有時也不能滿足實際需求。比如可能時常會遇到這樣一種情景:將指定OID(假設3和6)的要素選擇出來。

1、按屬性SQL選擇

最容易想到的是使用按屬性選擇構造WHERE子句("OBJECTID=3 OR OBJECTID=6")即可通過SQL選擇出來。

 

2、屬性連線

那麼問題來了,如果給定的ID有100個,而且它們沒有什麼規律,構造SQL語句會不會手軟呢?這也不難辦,使用屬性連線也可以選擇出來。

3、自定義選擇工具

有沒有簡便一點的、可重複使用的方式,不用連線、不用手動構造SQL子句,那就用程式碼自動來構造查詢語句吧。

很簡單很實用的工具,程式碼如下:

# -- coding:cp936 --
# ---------------------------------------------------------------------------
# Fun   : SelectFeatures
# Author: gisweis
# Date  : 2020.10.25
# Email : 
# Notes : 
# ---------------------------------------------------------------------------

import os
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import  arcpy
import  string
 
try:
    #引數1:輸入的圖層或表
    table=arcpy.GetParameterAsText(0)
    #引數2:輸入的欄位名稱
    field=arcpy.GetParameterAsText(1)
    #引數2:輸入的編號文字
    txt=arcpy.GetParameterAsText(2)

    oid_fieldname = arcpy.Describe(table).OIDFieldName
    L=[]
    
    with open(txt, "r") as f:
        for line in f.readlines():
            line = line.strip('\n')
            if len(line) >0:
                L.append(' '+field+'=' + line + ' OR')
        L.append(' '+ oid_fieldname +'<0')
        where=''.join(L)
        arcpy.AddMessage(where)
        arcpy.SelectLayerByAttribute_management(table,"NEW_SELECTION",where)
except arcpy.ExecuteError:
    arcpy.GetMessages()

 

相關文章