ArcMap 字段计算器程序生成唯一ID

0 投票
2 回答
1066 浏览
提问于 2025-04-18 11:05

我在ArcMap中使用字段计算器,想为我所在县的每个雨水排放口创建一个独特的ID。
这个ID应该像这样:16-I-003

第一个数字是市政编号,存放在名为“Munic”的列/字段中。

字母是来自名为“Point”的列/字段中的字母。

最后一个数字就是从1开始,直到这个市政区有多少个排水口。

到目前为止,我已经有了:

rec=0
def autoIncrement()
pStart=1 
pInterval=1
 if(rec==0):
  rec=pStart
else:
 rec=rec+pInterval
return "16-I-" '{0:03}'.format(rec)

你可以看到,我一直在手动输入市政编号、字母和连字符。但我希望能使用“Munic”和“Point”这两个字段,这样每次它们变化时,我就不需要手动输入了。

我在python和ArcMap方面还是个新手,所以请把事情说得简单一点。

2 个回答

0

我觉得你可以用下面的代码来实现这个功能。

def autoIncrement(a,b):
  global rec
  pStart=1 
  pInterval=1
  if(rec==0):
    rec=pStart
  else:
    rec=rec+pInterval
  r = "{1}-{2}-{0:03}".format(a,b,rec)
  return r

然后调用

autoIncrement( !Munic! , !Point! )

这里的 r = "{1}-{2}-{0:03}".format(a,b,rec) 这段代码是把大括号 {} 里的内容替换成变量 a 和 b 的值,实际上这些值就是传给这个函数的 Munic 和 Point 的值。

0

我对ArcMap不太熟悉,所以不能直接帮你,但你可以把你的函数改成一个生成器,像这样:

def StormDrainIDGenerator(): rec = 0 while (rec < 99): rec += 1 yield "16-I-" '{0:03}'.format(rec)

如果你觉得这样可以,那就把生成器改成可以接受Munic和Point值的,这样你就能在格式字符串中使用它们了。你可能还需要把结束值也变成参数。

使用生成器的好处是,你可以把它放到任何需要可迭代对象的地方,所以你可以简单地通过说list(StormDrainIDGenerator())来创建这样一个列表。

你是想问怎么把Munic和Point值放进字符串ID里吗?用.format()来实现吗?

撰写回答