Select_分析工具上的循环(Python和ArcGIS 9.3)

2024-06-10 21:22:59 发布

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

首先,我是Python新手,我在arcgis9.3上工作。在

我想在“选择分析”工具上实现一个循环。事实上,我有一层“站”,由一个城市的所有公共汽车站组成。 该层有一个字段“rte_id”,用于说明站点位于哪条线上。在

我想把“rte_id”=1的所有电台,以及“rte_id”=2的电台都保存在不同的图层中,以此类推。因此使用工具select_进行分析。在

所以,我决定做一个循环(我有70个不同的“rte_id”。。。。所以要创建70个不同的层。但它不起作用,我完全迷路了!在

这是我的代码:

import arcgisscripting, os, sys, string
gp = arcgisscripting.create(9.3)
gp.AddToolbox("C:/Program Files (x86)/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")
stations = "d:/Travaux/NantesMetropole/Traitements/SIG/stations.shp" 
field = "rte_id"

for i in field:
    gp.Select_Analysis (stations, "d:/Travaux/NantesMetropole/Traitements/SIG/stations_" + i + ".shp", field + "=" + i)
    i = i+1
    print "ok"

错误信息如下:

^{pr2}$

你有什么办法解决我的问题吗?在

提前谢谢! 朱利安


Tags: 工具idfield站点电台gpsigstations
2条回答

这里的主要问题是字符串 for i in field: 您正在尝试迭代一个字符串字段名(“rte_id”)。在

这是不对的。 您需要迭代字段“rte”id的所有可能值。在

最简单的解决方案: 如果您知道“rte_id”字段的值为1-70(例如),那么您可以尝试

    for i in range(1, 71):
        shp_name = "d:/Travaux/NantesMetropole/Traitements/SIG/stations_" + str(i) + ".shp"
        expression = '{0} = {1}'.format(field, i)
        gp.Select_Analysis (stations, shp_name , expression)
        print "ok"

更复杂的解决方案: 您需要获得一个关于SQL的字段“rte_id”的所有唯一值的列表,以执行groupby。在

我认为用一个工具对SHP文件执行分组操作实际上是不可能的。在

您可以使用SearchCursor,遍历所有特性并生成字段的唯一值列表。但这是一项更复杂的任务。在

另一种方法是在ArcMap中的shapefile表上使用summary选项(打开表,右键单击列标题)。您将得到具有唯一值的dbf表,您可以在脚本中读取这些值。在

我希望它能帮助你开始!在

现在没有ArcGIS,无法编写和检查任何脚本。在

您需要对这段代码进行实质性的更改,才能使它执行您想要的操作。您可能只想从ArcGIS online下载Split Layer By Attribute代码,它做了完全相同的事情。在

相关问题 更多 >