首先,我是Python的新手,我在Arc GIS 9.3上工作。
我想在"Select_Analysis"工具上实现一个循环。事实上,我有一层"车站",由一个城市的所有公交车站组成。该层有一个字段"rte_id",用于解释车站位于哪条线上。
我想在不同的层中保存所有"rte_id"=1的站,"rte_id"=2的站等等。因此使用了工具select_analysis。
所以,我决定做一个循环(我有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"
这是错误信息:
gp.Select_Analysis (stations, "d:/Travaux/NantesMetropole/Traitements/SIG/stations_" + i + ".shp", field + "=" + i)
TypeError: can only concatenate list (not "str") to list
你有什么办法解决我的问题吗?
提前感谢!朱利安
这里的主要问题是字符串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"的所有唯一值的列表,以执行GROUP BY.
我认为实际上不可能用一个工具对SHP文件执行GROUP BY操作。
您可以使用SearchCursor,遍历所有功能,并生成字段的唯一值列表。但这是一项更为复杂的任务。
另一种方法是在ArcMap中的shapefile表上使用"汇总"选项(打开表,右键单击列标题)。您将获得具有唯一值的dbf表,您可以在脚本中读取这些值。
我希望它能帮助你开始!
现在没有ArcGIS,无法编写和检查任何脚本。
您需要对此代码进行实质性的更改,以便使其能够执行您想要的操作。您可能只想从ArcGIS在线下载"按属性代码拆分图层",它可以做完全相同的事情。