在Arcgis python(Arcpy)中选择具有指定名称的要素类

2024-09-27 19:26:56 发布

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

我使用的是arcpy,我想提取一个名为“building”的特定要素类,嵌套在我工作区内的许多地理数据库中。在

代码如下:

import arcpy
import os

workspace = "C:/Wiley/P1/gis"
search = "Building"
outdir = "C:/Wiley/P1/gis/HK80.gdb"
fc = []

walk = arcpy.da.Walk(workspace, datatype="FeatureClass", type="Polygon")

for dirpath, dirnames, filenames in walk:
          for filename in filenames:
             if search == filename:
                     fc.append(os.path.join(dirpath, filename))
if fc:
     output = os.path.join(outdir, os.path.basename(search) + "_merge")
     arcpy.Merge_management(fc, output)

此代码成功。在

但是除了“Building”之外,geodatabase中还有许多其他featureclass,因此我稍微扩展了代码,并尝试在所有这些要素类中循环使用merge命令:

^{pr2}$

这就是我碰壁的地方。这个代码有什么问题吗?我是Python新手,所以对于一个训练有素的人来说,你们可以立即发现逻辑中的错误。f变量似乎根本没有循环。在


Tags: path代码importsearchosfilenameworkspace要素
1条回答
网友
1楼 · 发布于 2024-09-27 19:26:56

试着整理你的缩进-例如,你不需要缩进你导入arcpy的第一行。另外,在您的第一个脚本(正在运行的脚本)中arcpy.Merge_管理工具不在循环中。在第二个(不工作)脚本中,它在fc_list循环中,如果我正确地理解了脚本的逻辑,就不需要了。在

您也可以尝试在fc_list循环中添加print语句,以查看它是否正在运行—如下所示:

for f in fc_list: #Loop through the list   
    for dirpath, dirnames, filenames in walk:        
        for filename in filenames:
            print filename
            if f == filename:
                fc.append(os.path.join(dirpath, filename))
                print 'appended'
            else:
                print 'nope!'
    print 'done with walk'

if fc:
    output = os.path.join(outdir, os.path.basename(search) + "_merge")
    arcpy.Merge_management(fc, output)

相关问题 更多 >

    热门问题