添加函数列表关系类

1195
7
06-03-2021上午10:25
状态:开放
LukeSavage
通过
偶然的因素

添加一个名为ListRelationshipClasses()的函数。这样,我们可以比使用一堆desc语言更容易地获取这些对象。

标签(3)
7评论
JoeBorgione
通过 MVP尊敬贡献者

很棒的主意!

JohannesLindner
  1. 好主意,赞。
  2. 同时,你可以这样做:

def listRelationshipClasses(database): """返回一个字典列表,该列表描述给定数据库中的关系类。测试钻和FGDB数据库:str,路径数据库”“”desc = arcpy.da.Describe(数据库)的父母= (desc) + (c c desc(“孩子”)如果c(“dataElementType”)= = " DEFeatureDataset "] rs = [] p的父母:rs + = (c c p(“孩子”)如果c(“dataElementType”)= = " DERelationshipClass "]返回rs listRelationshipClasses(路径\ \你\ database.gdb) listRelationshipClasses(“路径\ \ \ database.sde”)

JoeBorgione
通过 MVP尊敬贡献者

不错的@JohannesLindner

LukeSavage
通过

谢谢你!@JohannesLindner为了获取信息。我很难使用您提供的脚本遍历数据集,因为我在其他博客中看到过类似的示例。我发布这篇文章是为了更好地控制在数据集中搜索,或者独立地循环搜索所有数据集,或者指定要选择的特定关键字。这也是帮助管理公用事业网络的任何更改的关键,因为关系存储在特征数据集中。我开始将我们的数据切换到一些新的模型,当模式发生巨大变化时,这个功能将通过重新创建关系来帮助管理它们。最终,我希望只要我们符合一定的标准,联合国就不会那么严格地管理它的模式。此外,分支版本控制在发布之前有非常严格的规则,所以这个函数有助于删除和重新创建,以防globalid没有正确填充,即使ArcGIS Pro或Python说,成功。我在准备分支版本地理数据库时遇到了很大的问题,因为当操作没有成功完成时,会出现大量的问题。这只是一个让人感觉良好的信息。希望esri能在未来的版本中修复这些问题,因为当我运行例程时,我希望成功的消息是准确的。

JohannesLindner

更新了我上面评论中的代码:现在它还可以在特征数据集中找到关系类,并且它返回字典列表而不是旧的描述对象,因此更容易阅读输出。

不确定这是否涵盖了你正在寻找的一些内容:

进口操作系统,pprint all_rs = listRelationshipClasses(路径/ /你/ database.sde) #见上图pprint.pprint (all_rs[0]) #过滤器的名字rs = (r, r all_rs如果r(“名字”)= = " FilterName "] rs = (r, r all_rs如果“PartOfTheName”rs[“name”]]#过滤器由基数rs = (r, r all_rs如果r(“基数”)= = " OneToOne "] #过滤由出发地或目的地表rs = [r r all_rs如果“OriginTableName”[“originClassNames”]]rs = (r, r all_rs如果“DestinationTableName”rs = r[“destinationClassNames”]](r, r all_rs如果“OriginTableName”r“originClassNames”和“DestinationTableName”r[“destinationClassNames”]]#过滤器由数据集rs = (r, r all_rs如果os.path.basename (r(“路径”))= = " DatasetName "] #过滤器的旗帜rs = (r, r all_rs如果r[“isComposite”]]rs = [r r all_rs如果不是[“isComposite”]]#其他旗帜:isAttachmentRelationship, isAttributed, isReflexive, isVersioned, canVersion changeTracked

LukeSavage
通过

@JohannesLindner谢谢你,我会去看看的。

HannesZiegler
通过 Esri贡献者

大家好!

感谢您的想法和围绕替代方案的讨论!

我想强调的是,这也可以用arcpy.da.Walk

import os ws = r"C:\" rlclass = [] walk = arcpy.da。Walk(ws, "RelationshipClass")在Walk中查找dirpath, dirnames,文件名;加入(dirpath文件名)

看到arcpy.da.Walk了解更多信息。