通过Arcpy选择位置和CopyFeatures

614
6
跳到解决方案
06-21-2021 01:04 PM
ZoeChen
通过
新贡献者III

大家好,我在尝试在python中自动执行按位置选择和复制功能的过程时遇到了麻烦。我的代码如下:逻辑似乎是正确的,但一旦它运行,它永远运行,这绝对超过了我在Arcpro中运行的时间。任何想法都会很感激,谢谢!

进口arcpy
从arcpy导入环境
env。workspace = "D:/Backup/shapefile/NE_validation"
outworkspace = "D:/Backup/shapefile/NE_validation"
NEEEfishnet = "D:/Backup/shapefile/NE_validation/ ne_validate .gdb/NEEE_NewEngland_fishnet"

shplist = arcpy.ListFeatureClasses("*Point*")
对于shplist中的SHP:
# select by location
arcpy.management。SelectLayerByLocation(NEEEfishnet, "INTERSECT", shp, None, "NEW_SELECTION", "NOT_INVERT")
#导出选中的特性(使用复制特性工具)
outfeature = outworkspace + "/" + NEEEfishnet[52:75] + shp[37:40] + ".shp"
arcpy.management。CopyFeatures(NEEEfishnet, outfeature, ", None, None, None)
#清除选区
arcpy。SelectLayerByAttribute_management (NEEEfishnet“CLEAR_SELECTION”)

更新:我修改了代码,增加了两个功能:制作特征层和保存层到文件。代码可以运行,但不能生成可打开的shapefile。错误信息如下所示。我打算停止更新,也许有一天会有人找到解决这个问题的方法……

zoechen_0 - 1624471881198. - png

标签(3)
0荣誉
1解决方案

接受的解决方案
JoshuaBixby
通过 MVP尊敬贡献者
MVP尊敬贡献者

选择不适用于数据集,它们适用于图层或视图。虽然你现在可以将数据集直接传递给选择层工具(个人而言,我不同意几年前Esri做的这个改变),但选择并不是直接在数据集上进行的。相反,当数据集直接传递给选择图层工具时,将在幕后创建一个图层或视图,并将选择放置在其上。对于您的代码,您没有检索自动生成的层。

我个人仍然认为最好的做法是先创建一个图层,然后将其传递到选择图层工具。

在原帖子中查看解决方案

6个回答
DanPatterson
通过 MVP尊敬贡献者
MVP尊敬贡献者

它可以永远运行,这绝对超过了我在Arcpro中运行的时间

它能产生产出吗?


…有点退休了……
0荣誉
ZoeChen
通过
新贡献者III

谢谢,丹,它不产生任何输出。

0荣誉
DavidPike
通过 MVP常客
MVP常客

一定要添加一些打印语句来尝试跟踪发生了什么,我也会把你的输出目录分开,因为它要求问题。

0荣誉
ZoeChen
通过
新贡献者III

谢谢你,大卫。: thumbs_up:

0荣誉
JoshuaBixby
通过 MVP尊敬贡献者
MVP尊敬贡献者

选择不适用于数据集,它们适用于图层或视图。虽然你现在可以将数据集直接传递给选择层工具(个人而言,我不同意几年前Esri做的这个改变),但选择并不是直接在数据集上进行的。相反,当数据集直接传递给选择图层工具时,将在幕后创建一个图层或视图,并将选择放置在其上。对于您的代码,您没有检索自动生成的层。

我个人仍然认为最好的做法是先创建一个图层,然后将其传递到选择图层工具。

ZoeChen
通过
新贡献者III

哇,谢谢你的回答,约书亚!它真的解决了我的困惑: clapping_hands:

0荣誉