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,谢谢您的回复,我会花时间阅读并解决它。