在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()