基于排序数据添加新的顺序ID号(ArcGIS)

2024-06-11 16:24:51 发布

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

我需要一行代码,根据我对数据指定的顺序来发布新的序列id。基本上,在按照我的喜好对数据进行排序之后,原始对象的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

本质上我需要那些零的现在是1,2,3,4。。。等,因为我的数据现在按我的喜好排序(首先按MMSI号码/在MMSI内按日期排序)

因此,它将如下所示:(请注意,新的“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

我该怎么做?谢谢


Tags: 数据对象代码idnewobjecttime排序
3条回答

我试过代码(见下文),但只是在FID值上加1,而不是按排序顺序的序列。。。

rows = arcpy.UpdateCursor("your attribute table") 

counter = 1
for row in rows:
    row.NEW_ID = counter
    rows.updateRow(row)
    counter += 1

ArcGIS帮助中有一个字段计算器示例,它可以完全满足您的需要。

http://resources.arcgis.com/en/help/main/10.1/index.html#//00170000004s000000

(如果该链接不起作用,只需在ArcGIS帮助中搜索“计算字段示例”)。

向下滚动至“累计和顺序计算”。

您可以使用arcpy库中的updatecorsor

rows = arcpy.UpdateCursor("your attriubute table") 

counter = 1
for row in rows:
    row.NEW_ID = counter
    rows.updateRow(row)
    counter += 1

请确保数据类型正确

相关问题 更多 >