Vairāk

Izmantojot Arpy, kā noteikt attiecību klases failā GDB (vai nevaru)?


Es gribētu, lai varētu noteikt attiecību klases failā GDB. Tā kā mana skripta lietotājiem var būt tikai ArcView līmeņa licence, viņi nevarēs manipulēt ar funkciju klases shēmu (īpaši, lai pievienotu lauku), kas atrodas darbvietā, kurai ir attiecību klases. Kā noteikt attiecību klašu klātbūtni, lai tās varētu dokumentēt, programmiski izvairīties un ļaut skriptam turpināties?


relationshipClassNames īpašums ir domājams lai to izdarītu, bet man šķiet, ka tas nedarbojas (pārbaudīts faila ģeodatubāzē, izveidota attiecību klase starp divām funkciju klasēm, pārbaudīts īpašums, atgrieztais saraksts abiem ir tukšs). Varbūt tas jums noderēs.


Saskaņā ar @blah238 ieteikumu šajā pitona kodā ir uzskaitītas visas ģeodatubāzes attiecību klases un ievietotas tās unikālā sarakstā (relClasses):

inGDB = r "D:  mygeodatabase.gdb" env.workspace = inGDB ################# Visu tabulu un funkciju klašu iegūšana ########### fcs = [] #darbvietas sakne vienumam arpy.ListFeatureClasses ("*"): fcs.append (item) vienumam arcpy.ListTables ("*"): fcs.append (item) fds = arcpy.ListDatasets ( "*", "Feature") fd fds: env.workspace = inGDB+''+fd fc arcpy.ListFeatureClasses ("*"): fcs.append (fd+'/'+fc) tb in arcpy.ListTables ("*"): fcs.append (fd+'/'+tb) env.workspace = inGDB relClasses = set () i, fc uzskaitīt (fcs): desc = arcpy.Describe (fc) for j, rel uzskaitīt (desc.relationshipClassNames): relDesc = arcpy. Aprakstiet (rel), ja relDesc.isAttachmentRelationship: turpināt relClasses.add (rel) drukāt relClasses

Es cīnījos ar to, līdz sapratu, ka arkijs redz attiecību klases caur tabulām, ar kurām tās ir saistītas. Šeit ir neliels koda gabals, lai pārbaudītu attiecību klašu nosaukumus, kuru garums pārsniedz 30:

arcpy.env.workspace = 'C:/workspace' # Vietējo mainīgo tabulas = arcpy.ListTables () # Atkārtojiet tabulas faila ģeodatubāzē (darbvietā) tabulās t: # Iegūstiet attiecību klasi (-es), kas saistītas ar tabulu desc = arcpy .Describe (t) rcs = desc.relationshipClassNames # Atkārtojiet visas attiecību klases, kas saistītas ar pašreizējo tabulu cilnē r in rcs: ja len (r)> 30: drukājiet 'Attiecību klase' + r + 'ir' + str (len) (r)) + "rakstzīmes".

Man ir 10.5.1, un izskatās, ka relationshipClassNames sniedz man attiecību klašu nosaukumu sarakstu, kā tam vajadzētu būt

layer = "C:  Geodatabases  somegeodatabase.gdb  my_layer" desc = arcpy.Describe (layer) print desc.relationshipClassNames


Skatīties video: Vidusskola. Procentu un attiecību uzdevumi. (Oktobris 2021).