现场计算器与Python或SQL

738
5
06-26-2021 08:25
MDBaky
通过
新的因素

嗨朋友,

我想计算/填充字段-“河”的值“是”或“否”,取决于字段名为“AdjRiverLe”和字段名为“ID”的最大值。请看这里的图片。

规则如下:

是=字段'AdjRiverLe'组中'ID'字段的最大值

No= 'AdjRiverLe'字段中的其余值

例如,ID 1有三个单独的行,字段中有三个不同的值——'AdjRiverLe '。我想选择属于字段最大值的行- 'AdjRiverLe',并将字段'River'填充为'Yes'。

我认为代码块选项是可行的。

0荣誉
5回复
Waffle_House
通过
临时贡献者II

是的,代码块适合你的情况。

0荣誉
MDBaky
通过
新的因素

谢谢华夫你的回复。但是你能帮我弄清楚写出来的代码块吗?

0荣誉
JoshuaBixby
通过 尊敬的贡献者
尊敬的贡献者

类似的问题在Esri社区经常被问到,大概每4-6个月。188金宝博复式188金宝搏网址导航虽然可以使用Field Calculator来回答你的问题,但在我看来,这是一种相当笨拙的方法。这类问题最适合ArcPy游标:

lyr = #数据集的层名或路径flds = ["ID", "AdjRiverLe", "River"] sql = "ORDER BY ID, AdjRiverLe DESC" with arcpy.da。UpdateCursor(lyr, flds, sql_clause=(None, sql)) as cur: rid, adj_river, river = next(cur) river = "YES" cur. updaterow ([rid, adj_river, river]) prev_rid = rid for rid, adj_river, _ in cur: if rid == prev_rid: river = "NO" else: river = "YES" cur. updaterow ([rid, adj_river, river]) prev_rid = rid

jcarlson
通过 MVP荣誉贡献者
MVP荣誉贡献者

既然您提到了SQL,那么您所讨论的层是在企业GeoDatabase中,还是一个特性服务?有几种方法可以解决这个问题,但这可能取决于功能的来源。

——乔什·卡尔森
肯德尔县GIS
0荣誉
jcarlson
通过 MVP荣誉贡献者
MVP荣誉贡献者

此外,尽管你没有提到Arcade,但值得指出的是,这可以在Arcade中简单地完成。

//获取匹配ID的特性var ID = $feature。ID var id_feat = Filter(FeatureSetByName($datastore, ' polypolyon -layer-name'), 'ID =@ id') //获取AdjRiverLe字段的最大值var max_le = Max(id_壮举,'AdjRiverLe') //将'Yes'分配给最大值,'No'分配给其他if($feature. ')AdjRiverLe == max_le){返回'Yes'}其他{返回'No'}
——乔什·卡尔森
肯德尔县GIS
0荣誉