Python 开关选择不适用于SelectLayerByLocation\u管理
所以我补充说Python 开关选择不适用于SelectLayerByLocation\u管理,python,arcgis,arcpy,arcmap,Python,Arcgis,Arcpy,Arcmap,所以我补充说 import arcpy,sys sdeConn = r"Database Connections\\Test.sde" muniLoc = "Municipalities" luLoc = "Land_Use" tempLoc = "tempMuniLuRatio" arcpy.env.workspace = sdeConn try: print "MakeFeatureLayer_management lu_lyr" arcpy.MakeFeat
import arcpy,sys
sdeConn = r"Database Connections\\Test.sde"
muniLoc = "Municipalities"
luLoc = "Land_Use"
tempLoc = "tempMuniLuRatio"
arcpy.env.workspace = sdeConn
try:
print "MakeFeatureLayer_management lu_lyr"
arcpy.MakeFeatureLayer_management(luLoc, "lu_lyr")
prematchcount = int(arcpy.GetCount_management("lu_lyr").getOutput(0))
print "MakeFeatureLayer_management muni_lyr"
#arcpy.MakeFeatureLayer_management(muniLoc, "muni_lyr")
print "SelectLayerByLocation_management COMPLETELY_WITHIN"
arcpy.SelectLayerByLocation_management("lu_lyr", "COMPLETELY_CONTAINS",muniLoc,"","SWITCH_SELECTION")
postmatchcount = int(arcpy.GetCount_management("lu_lyr").getOutput(0))
if prematchcount == postmatchcount:
print "SelectLayerByLocation_management DID NOT WORK"
else:
print "SelectLayerByLocation_management LOOKS GOOD"
if arcpy.Exists(tempLoc):
print "Delete_management "
arcpy.Delete_management(tempLoc)
print "CopyFeatures_management "
arcpy.CopyFeatures_management('lu_lyr',tempLoc)
except Exception:
e = sys.exc_info()[1]
print(e.args[0])
查看开关选择是否工作
每次它都返回与源要素类
相同的结果
我的代码中有什么遗漏吗?TL;DR
更改此项:
if prematchcount == postmatchcount:
为此:
arcpy.SelectLayerByLocation_management("lu_lyr", "COMPLETELY_CONTAINS",muniLoc,"","SWITCH_SELECTION")
详细信息
GetCount\u management
和SelectLayerByLocation\u management
正在按文档化的方式工作
发件人:
如果在输入上定义了选择,则返回所选行的计数
发件人:
切换选择-切换选择。选定的所有记录将从选择中删除,未选定的所有记录将添加到选择中。选择此选项时,将忽略选择特征和重叠类型参数
arcpy.SelectLayerByLocation_management("lu_lyr", "COMPLETELY_CONTAINS",muniLoc,"","SWITCH_SELECTION")
让我解释一下你的代码在做什么以及为什么它是正确的
arcpy.SelectLayerByLocation_management("lu_lyr", "COMPLETELY_CONTAINS",muniLoc)
arcpy.SelectLayerByLocation_management("lu_lyr", None, None, "", "SWITCH_SELECTION")
您可以创建一个没有选择的要素图层。假设土地利用
要素类中有42个要素
arcpy.MakeFeatureLayer_management(luLoc, "lu_lyr")
由于未在lu_-lyr
上定义任何选择,因此将计算要素类中的所有要素,并且prematchcount
现在等于42
prematchcount = int(arcpy.GetCount_management("lu_lyr").getOutput(0))
postmatchcount = int(arcpy.GetCount_management("lu_lyr").getOutput(0))
由于使用的是SWITCH\u选择
,完全包含
和muniLoc
被忽略,选择被简单地切换。在此调用之前,未选择任何功能。此调用将切换选择,以便选择所有42个功能
arcpy.SelectLayerByLocation_management("lu_lyr", "COMPLETELY_CONTAINS",muniLoc,"","SWITCH_SELECTION")
由于选择是在lu_lyr
上定义的,因此仅对所选特征进行计数。前一行选择了所有42个功能,因此postmatchcount
现在等于42
prematchcount = int(arcpy.GetCount_management("lu_lyr").getOutput(0))
postmatchcount = int(arcpy.GetCount_management("lu_lyr").getOutput(0))
对。他们都是42岁
你的解决方案取决于你想做什么,而你没有说。我猜您希望选择
土地使用
中的所有要素,这些要素不完全包含市政
中的要素,并将这些选定要素复制到临时市政
。如果是,请进行此答案顶部所述的更改。如果没有,请编辑您的问题以解释您想做什么。Gary,谢谢您的回复,我会花时间阅读并解决它。