顺序ID生成器Python ArcGI

2024-06-07 06:48:59 发布

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

你好,stackoverflow社区

我只有2个月的python经验,但我决定用一个类的项目来挑战自己,并最终将它融入到我的工作中。你知道吗

我和ArcGIS一起工作,我想创建一个循环脚本,根据“系统”字段更新字段上的ID。示例:如果系统字段为“Chaparral”,则我希望ID字段以字母“CH-HY”开头,然后设置一个计数器+1,将1添加到字段中已有的ID中,如“CH-HY0006”。这是我现在拥有的。你知道吗

填充消防栓ID字段

with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:
    for row in cursor:
        if (row[0] == '<Null>' and row[1] == 'Chaparral'):
            row [0] = 'CH-HY{}'.format(int1) 
        elif (row[0] == '<Null>' and row[1] == 'SunCity'): 
            row [0] = 'SC-HY{}'.format(int2) 
    cursor.updateRow(row)

这就是我被困的地方。如何检索字段中已经存在的ID并获取最大的数字,以便向其中添加1。我真的想不惜一切代价避免在同一个系统中创建重复项。你知道吗


Tags: and项目idformat系统经验chstackoverflow
2条回答

为了检索现有的最后一个ID搜索.光标类似于查帕拉体系:

CHvalues = [row[0] for row in arcpy.da.SearchCursor("Hydrants.shp", "FACILITYID", "SYSTEM = 'Chaparral'")]

CHuniqueValues = max(CHvalues)

CHintLastVal = int(CHuniqueValues[-4:])

下面是我如何将其实现到循环中的:

with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:
for row in cursor:
    if ((row[0] == None or  row[0] == '<Null>' or row[0] == '') and row[1] == 'Chaparral'):
        CHintLastVal = CHintLastVal + 1
        CHstr099 = str(CHintLastVal)
        print('CH-HY{}'.format(CHstr099))
        row [0] = 'CH-HY{}'.format(CHstr099)

我得调查一下检索尽管如此,我可以看到这个方法在整数变为9999,int[-4]需要更改为[-5]以容纳10000时会产生问题。你知道吗

谢谢你们的反馈!你知道吗

如果只是为了填充字段而写,而不是读写-可以在循环外创建一个状态变量来跟踪索引。你知道吗

with arcpy.da.UpdateCursor("Hydrants.shp", ["FACILITYID", "SYSTEM"]) as cursor:
    chaparral_index = 0
    Suncity_index = 0
    for row in cursor:
        if (row[0] == '<Null>' and row[1] == 'Chaparral'):
            row [0] = 'CH-HY{}'.format(chaparral_index)
            chaparral_index += 1 
        elif (row[0] == '<Null>' and row[1] == 'SunCity'): 
            row [0] = 'SC-HY{}'.format(Suncity_index)
            Suncity_index += 1 
    cursor.updateRow(row)

如果您计划从预先存在的数据中读取数据,那么可能需要引入regex来解析FACILITYID并找到最高的索引。你知道吗

相关问题 更多 >