源层更新以及输出层

时间:2016-04-13 21:53:06

标签: gis shapefile arcpy arcmap

源图层是图层,输出图层输出。该脚本使用新字段及其计数器以及输出层更新源图层。我试过在最后从图层中删除字段;将fc设置为不同的输出,将fc复制到最后的输出,然后在fc / layer之后删除字段;并且复制蝙蝠右侧的源层(从概念上讲,这对我来说最有意义......也许我做错了)......没有骰子。

任何可以保留源图层的想法,但是让这个脚本在输出上运行和计算?谢谢你的任何输入!!

#workspace
arcpy.env.workspace = wspace = arcpy.GetParameterAsText(0)

#buildings
layer = arcpy.GetParameterAsText(1)

#trees
trees = arcpy.GetParameterAsText(2)

#buffer building to search
buffer = arcpy.GetParameterAsText(3)

#tree field interested in - tree condition, tree location, or tree pit
tf = arcpy.GetParameterAsText(4)

#output file
output = arcpy.GetParameterAsText(5)

#make feature layers to reference
treelayer = arcpy.MakeFeatureLayer_management(trees, trees + ".shp")
fc = arcpy.MakeFeatureLayer_management(layer, output)

pit = ["Sidewalk", "Continuous", "Lawn"]


if tf == "Tree Pit":
for a in pit:
    arcpy.AddField_management(fc, a, "SHORT")

with arcpy.da.SearchCursor(fc, ["OBJECTID"]) as fcrows:
    for a in fcrows:

        arcpy.SelectLayerByAttribute_management(fc, "NEW_SELECTION", "OBJECTID={}".format(a[0]))
        arcpy.SelectLayerByLocation_management(treelayer, "WITHIN_A_DISTANCE", fc, buffer, "NEW_SELECTION")

        tlrows = arcpy.da.SearchCursor(treelayer, "SITE")
        list1 = []
        for tlrow in tlrows:

            list1.append(int(tlrow[0]))     

        fcrows1 = arcpy.da.UpdateCursor(fc, pit)
        for fcrow1 in fcrows1:
            if list1.count(1) > 0:
                fcrow1[0] = list1.count(1)
            else:
                fcrow1[0] = 0
            if list1.count(2) > 0:
                fcrow1[1] = list1.count(2)
            else:
                fcrow1[1] = 0
            if list1.count(3) > 0:
                fcrow1[2] = list1.count(3)
            else:
                fcrow1[2] = 0
            fcrows1.updateRow(fcrow1)

1 个答案:

答案 0 :(得分:0)

您不希望变量等于函数 - 只需创建要素图层。

arcpy.MakeFeatureLayer_management(layer, output)

然后,后续步骤应仅影响output图层并忽略来源layer,例如:

for a in pit:
    arcpy.AddField_management(output, a, "SHORT")

with arcpy.da.SearchCursor(output, ["OBJECTID"]) as fcrows: