我需要一行代码,根据我为数据规定的顺序发出新的顺序ID。基本上,在按照我的喜好对数据进行排序后,原始的Object_Id对我来说不再是有意义的顺序。在我的表中,我创建了一个新字段(短整数)。在现场计算器的预逻辑脚本框中,我尝试了以下内容:
counter = 0
def uniqueID():
global counter
counter += 1
return counter
但它似乎不起作用..我的表看起来像的一个小样本如下:(用于可视化目的)
Object_ID / MMSI / TIME / VESSEL / NEW_ID
1210 4444 01/10/10 01 NuLL
1801 4444 02/10/10 01 NuLL
303 4444 03/10/10 01 NuLL
2839 4444 03/10/10 01 NuLL
32100 5555 01/10/10 03 NuLL
34 5555 02/10/10 03 NuLL
本质上我需要那些NuLL现在是1,2,3,4 ......等等,因为我的数据现在按照我的喜好排序(首先按MMSI编号/按日期在MMSI内)
因此,它会在以下情况后显示如下:(请注意现在已填充New_ID字段)
Object_ID / MMSI / TIME / VESSEL / NEW_ID
1210 4444 01/10/10 01 1
1801 4444 02/10/10 01 2
303 4444 03/10/10 01 3
2839 4444 03/10/10 01 4
32100 5555 01/10/10 03 5
34 5555 02/10/10 03 6
我将如何实现这一目标?感谢
答案 0 :(得分:2)
ArcGIS帮助中有一个字段计算器示例,可以完全按照您的要求进行操作。
http://resources.arcgis.com/en/help/main/10.1/index.html#//00170000004s000000
(如果该链接不起作用,只需在ArcGIS帮助中搜索“计算字段示例”。)
向下滚动到“累积和连续计算”。
答案 1 :(得分:0)
您可以使用arcpy库中的updatecursor
rows = arcpy.UpdateCursor("your attriubute table")
counter = 1
for row in rows:
row.NEW_ID = counter
rows.updateRow(row)
counter += 1
请确保正确的数据类型
答案 2 :(得分:0)
我已经尝试过代码(见下文),但只是将FID值加1,而不是按排序顺序添加序列...
rows = arcpy.UpdateCursor("your attribute table")
counter = 1
for row in rows:
row.NEW_ID = counter
rows.updateRow(row)
counter += 1
答案 3 :(得分:0)
我尝试过了,
我创建了一个新的字段短整数 将数据排序到我想要的安排中 将dbf导出为excel数据,请注意它将以属性表中的导出方式导出 在excel中填写编号(由于它是dbf文件,因此您将无法保存它) 复制Excel中序列字段的列 返回到属性表,然后将编号粘贴到此处。
它有效,因为在线没有python代码
答案 4 :(得分:0)
此快速解决方案仅使用Excel在排序后的数据上创建顺序编号,然后使用ArcGIS将结果表重新加入:
将属性表导出为“文本文件”,请确保在文件名中添加.csv扩展名。
在MS Excel中打开.csv文件。
根据需要排序。
在Excel的新列中,在第一行中键入数字1。
在第二行中,输入数字2。
选择该列中的两行,然后双击所选内容右下角的小框,以使编号顺序从该列开始向下连续到填充行的末尾。
保存.csv。
返回ArcGIS并使用“添加数据”导入刚刚创建的.csv。
右键单击功能,选择“联接和关联”->“联接...”。
选择“从表中加入属性”。
选择适当的字段和正确的.csv文件(您刚刚导入的文件)
单击“确定”。
最后,将特征导出到新特征以使联接永久化。