概念问题:可变缓冲区分析大小取决于文件类型?

2024-05-06 11:42:01 发布

您现在位置:Python中文网/ 问答频道 /正文

启发Python新手?我试图对一组文件执行大量缓冲区分析。我试图使它成为多段线和多点文件被选择为缓冲区。到目前为止,我已经准备好并描述了这些文件,因此我知道要选择哪些文件,但是对于如何让python只获取多段线和多点,有什么见解吗

import arcpy
arcpy.env.overwriteOutput = True
path = "Insert file folder path names here"
arcpy.env.workspace = z = path
allfc = []
for a,b,c in arcpy.da.Walk(x):
    for d in c:
        allfc.append(a+'/'+d)
print allfc
for fc in allfc:
    d = arcpy.Describe(fc)
    print "\n" + "\n" 
    print d.basename
    print d.shapeType
    print "\n"
for fc in allfic:
    if d.shapeType == "Polyline":
         d = "300 Meters"
    else d.shapeType == "Multipoint":
         d = "500 Meters"
    arcpy.Buffer_analysis(fc, fc+"_BUF", d, "FULL", "ROUND", "ALL")

这是给我带来悲伤的最后一部分,我知道我肯定错过了一些显而易见的东西


Tags: 文件pathinimportenvfor缓冲区fc
1条回答
网友
1楼 · 发布于 2024-05-06 11:42:01

有几种不同的方法可以处理逻辑如何通过这个过程结束,通过实验看看是否可以找到其他方法来解决它可能是有用的。但是,以下是我对代码哪里出错以及如何改进的建议


  1. 通常,描述性变量名称越多越好。当然,distdesc的键入时间要比d长,但您使用d实现了我在脚本中看到的三个独特功能,这导致了最后for循环中的一些问题

  2. 在最后一个循环中,您通过allfic而不是allfc进行循环,但这只是一个输入错误。但即使你解决了这个问题

  3. 您将在for fc in allfc中循环两次。这意味着您可以一直循环allfc,然后以d作为循环中最后一个要素类的Describe对象。假设它是一条多段线。然后从一开始再次循环allfc,并且d.shapeType == "Polyline"为真(即使循环中的第一个要素类实际上是多边形)。因此,循环尽职尽责地将d设置为300 Meters,然后执行缓冲区操作。然后循环转到第二个要素类,但是d现在是一个字符串(300 Meters),而不是一个描述对象,因此对于列表中的其余要素类将永远无法正常工作

  4. 在检查它是否是多点时,应该使用elif(“else-if”)而不是else。实际上,您可以只使用if,但是如果您在else区域中,您只希望跳过要素类,因此可以不使用它

  5. 最后:allfc中的每个fc都将通过Buffer工具发送。(只有多段线和多点可以设置缓冲区距离,但每个要素类都会尝试执行该操作。如果是多边形而不是多段线,则只需使用上次通过循环时的距离!)因此您也需要将该操作置于条件内


for fc in allfc:
    # describe the feature class
    d = arcpy.Describe(fc)
    print "\n" + "\n" 
    print d.basename
    print d.shapeType
    print "\n"

    # determine what buffer distance should be
    if d.shapeType == "Polyline":
         dist = "300 Meters"
    if d.shapeType == "Multipoint":
         dist = "500 Meters"

    # buffer the feature class only if it is the correct shapeType
    if d.shapeType == "Polyline" or d.shapeType == "Multipoint":
        arcpy.Buffer_analysis(fc, fc+"_BUF", dist, "FULL", "ROUND", "ALL")

相关问题 更多 >