arcpy를 사용하면 파일 GDB에서 관계 클래스를 어떻게 감지합니까?


10

파일 GDB에서 관계 클래스를 감지하고 싶습니다. 내 스크립트 사용자는 ArcView 레벨 라이센스 만 가질 수 있으므로 관계 클래스가있는 작업 공간에있는 피처 클래스 (특히 필드 추가)의 스키마를 조작 할 수 없습니다. 관계 클래스의 존재를 감지하여이를 문서화하고 프로그래밍 방식으로 피하고 스크립트를 계속할 수 있도록하려면 어떻게해야합니까?

답변:


6

relationshipClassNames속성이되는 가정 이 일을하지만 나를 위해 작동하지 않는 것 (파일 지오 데이터베이스에서 테스트,이 개 기능 클래스 사이에 관계 클래스, 속성을 확인, 반환 된 목록이 모두 비어 있습니다). 아마 당신을 위해 일할 것입니다.


감사. 처음에 관계 수업에가는 방법이 없었지만, 실마리를 주셨습니다. relationClassNames 속성을 확인하고 어떻게 작동하는지 알려줍니다.
celticflute

3

@ blah238 제안에 따라이 파이썬 코드는 지오 데이터베이스의 모든 관계 클래스를 나열하고 고유 목록 (relClasses)에 넣습니다.

inGDB = r"D:\mygeodatabase.gdb"
env.workspace = inGDB
#################Getting all Tables and Feature Classes###########
fcs = []
#root of workspace
for item in arcpy.ListFeatureClasses("*"):    fcs.append(item)
for item in arcpy.ListTables("*"):    fcs.append(item)

fds = arcpy.ListDatasets("*","Feature")
for fd in fds:
    env.workspace = inGDB +'\\'+fd
    for fc in arcpy.ListFeatureClasses("*"):
        fcs.append(fd+'/'+fc)
    for tb in arcpy.ListTables("*"):
        fcs.append(fd+'/'+tb)

env.workspace = inGDB
relClasses = set()
for i,fc in enumerate(fcs): 
    desc = arcpy.Describe(fc)
    for j,rel in enumerate(desc.relationshipClassNames):
        relDesc = arcpy.Describe(rel)
        if relDesc.isAttachmentRelationship:
            continue
        relClasses.add(rel)

print relClasses

1

나는 arcpy가 관계형 테이블을 통해 관계 클래스를 볼 때 까지이 문제로 어려움을 겪었습니다. 길이가 30보다 큰 관계 클래스 이름을 확인하는 코드는 다음과 같습니다.

arcpy.env.workspace = 'C:/workspace'

# Local variables
tables = arcpy.ListTables()

# Iterate through tables in file geodatabase (workspace)
for t in tables:
    # Get relationship class(es) associated with table
    desc = arcpy.Describe(t)
    rcs = desc.relationshipClassNames
# Iterate through any relationship classes associated with current table in loop
    for r in rcs:
        if len(r) > 30:
            print 'Relationship class ' + r + ' has ' + str(len(r)) + ' characters.'

0

나는 10.5.1에 ​​있고 relationClassNames 가 나와 같은 관계 클래스 이름 목록을 제공 하는 것처럼 보입니다.

layer = "C:\\Geodatabases\\somegeodatabase.gdb\\my_layer"
desc = arcpy.Describe(layer)
print desc.relationshipClassNames
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.