Modificare / aggiornare a livello di codice i metadati in ArcGIS?


10

Qualcuno è riuscito ad aggiornare a livello di codice i metadati in ArcGIS 10? Considerare l'utilizzo di Python / arcpy ma anche ArcObjects (C # o Python / comtypes) è una possibilità.

Devo aggiornare sia i metadati in formato FGDC che ArcGIS-ISO, e qualunque soluzione venga utilizzata deve essere in grado di conservare gli elementi esistenti (non vuoti) insieme agli elementi aggiunti, tranne in caso di conflitto nel qual caso il gli elementi aggiunti sovrascrivono gli elementi esistenti.

Risposte:


9

Il modo più semplice per farlo da ArcPy è creare un file XML usando Python e quindi invocare Import Metadata (Conversion) . Tuttavia, questo sovrascriverà tutto.

Un'alternativa è utilizzare ArcObjects per ottenere un IName nel set di dati, trasmettere a IMetadata e modificare IPropertyset.


11

Avevamo un grande bisogno di una capacità simile e alla fine abbiamo creato una libreria Python generale, gratuita e open source. Puoi trovarlo su https://github.com/ucd-cws/arcpy_metadata o eseguendo un "pip install arcpy_metadata". C'è una documentazione delle caratteristiche e di come usarla, con alcuni contributi aggiuntivi del World Resources Institute. Abbiamo cercato di mantenere le cose relativamente Pythonic in modo che si integrino bene e possano essere apprese rapidamente. Ecco un esempio:

import arcpy_metadata as md
import datetime

metadata = md.MetadataEditor(path_to_some_feature_class)  # also has a feature_layer parameter if you're working with one, but edits get saved back to the source feature class
metadata.title = "The metadata title!"

generated_time = "This layer was generated on {0:s}".format(datetime.datetime.now().strftime("%m/%d/%Y %I:%M %p"))

metadata.purpose = "Layer represents locations of the rare Snipe."

metadata.abstract.append("generated by ___ software")
metadata.abstract.append(generated_time)  # .prepend also exists
metadata.tags.add(["foo", "bar", "baz"])  # tags.extend is equivalent to maintain list semantics

metadata.finish()  # save the metadata back to the original source feature class and cleanup. Without calling finish(), your edits are NOT saved!

Ha ancora molte cose che potrebbero essere aggiunte, ma è abbastanza estensibile se si esegue la sottoclasse degli elementi che sono già presenti o si configurano correttamente. Si tratta ancora di software di qualità alfa, ma funziona e ne siamo contenti.


Per chiunque sia alla ricerca di questa funzionalità in ArcGIS Pro, a partire dalla versione 2.5, ora include un'API per metadati di Python. Ci sono maggiori dettagli nella documentazione della classe Metadata .


9

Abbiamo lottato con questo e lo abbiamo risolto avendo una semplice libreria Python costruita attorno alle funzioni dei metadati di arcobjects. Si basa su un file xml in cui i valori dei metadati sono stati sostituiti con parole chiave. Puoi usare queste parole chiave nel tuo codice Python per ottenere o impostare il valore di un campo di metadati. Il codice apparirà simile al seguente:

import dataprocessing
DP = dataprocessing.create()

md = DP.OpenMetadata("C:/MyShapefile.shp") # Works also on geodatabases
myKeyword = "%FGDC.abstract" # Keywords have to start with '%' but the rest is up to you

if md.GetValue(myKeyword) == "Not what I want":
    md.SetValue(myKeyword, "New value that suits me better")

Lo strumento è disponibile qui: http://www.aris.nl/dataprocessing_arcgis ed è disponibile gratuitamente. La versione sul sito Web è per arcgis 9.3. Una versione di arcgis 10 sarà disponibile ma non sarà più gratuita.

(Informativa completa: lavoro per un'agenzia governativa olandese in cui la versione attuale di questo strumento è stata costruita in parte dal denaro dei contribuenti e in parte dal tempo donato dal programmatore. Ecco perché è disponibile gratuitamente ma non open source. A partire dal 2013 lo faremo non finanzierò nessuna nuova versione. Non ne sto guadagnando in alcun modo. Spero solo che venga sfruttato meglio.)


1

Una terza opzione che sto esaminando ora è l'uso di un file XSLT insieme allo strumento di trasformazione (conversione) XSLT . Devo praticamente imparare la lingua mentre vado, e non ti facilitano l'utilizzo dell'implementazione .NET che utilizza i precedenti standard XSLT / XPath 1.0.


1

Ho un po 'di codice che utilizza ArcPy e DOM per la conversione di MD esistenti, la creazione da zero (se non esiste) e l'aggiornamento di alcuni elementi tramite DOM. È un po 'goffo, con un sacco di percorsi codificati e così via.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.