Modifier / mettre à jour les métadonnées par programme dans ArcGIS?

10

Quelqu'un a-t-il réussi à mettre à jour par programme les métadonnées dans ArcGIS 10? Envisager d'utiliser Python / arcpy mais ArcObjects (C # ou Python / comtypes) est également une possibilité.

Je dois mettre à jour les métadonnées au format FGDC et ArcGIS-ISO, et quelle que soit la solution utilisée, elle doit pouvoir conserver les éléments existants (non vides) avec les éléments ajoutés, sauf en cas de conflit, auquel cas le les éléments ajoutés écrasent les éléments existants.

blah238
la source

Réponses:

9

La façon la plus simple de le faire à partir d'ArcPy est de créer un fichier XML à l'aide de Python, puis d'appeler Importer des métadonnées (conversion) . Cependant, cela écrasera tout.

Une alternative consiste à utiliser ArcObjects pour obtenir un IName dans l'ensemble de données, convertir en IMetadata et modifier l'IPropertyset.

James Schek
la source
11

Nous avions un grand besoin d'une capacité similaire et nous avons fini par construire une bibliothèque Python générale, gratuite et open source à cet effet. Vous pouvez le trouver sur https://github.com/ucd-cws/arcpy_metadata ou en exécutant un "pip install arcpy_metadata". Il y a une documentation des fonctionnalités et comment l'utiliser, avec quelques contributions supplémentaires du World Resources Institute. Nous avons essayé de garder les choses relativement Pythonic afin qu'il s'intègre bien et puisse être appris rapidement. Voici un exemple:

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!

Il a encore beaucoup à ajouter, mais il est assez extensible si vous sous-classe les éléments qui sont déjà là, ou les configurez correctement. Il s'agit toujours d'un logiciel de qualité alpha, mais cela fonctionne et nous en sommes satisfaits.


Pour ceux qui recherchent cette capacité dans ArcGIS Pro, à partir de la version 2.5, ils incluent désormais une API de métadonnées de Python. Il y a plus de détails dans la documentation de la classe Metadata .

nicksan
la source
9

Nous avons lutté avec cela et l'avons résolu en ayant une bibliothèque python simple construite autour des fonctions de métadonnées arcobjects. Il est basé sur un fichier xml où les valeurs des métadonnées ont été remplacées par des mots clés. Vous pouvez utiliser ces mots clés dans votre code python pour obtenir ou définir la valeur d'un champ de métadonnées. Le code ressemblerait à quelque chose comme ceci:

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")

L'outil peut être trouvé ici: http://www.aris.nl/dataprocessing_arcgis et est disponible gratuitement. La version sur le site Web est pour arcgis 9.3. Une version arcgis 10 sera disponible mais elle ne sera plus gratuite.

(Divulgation complète: je travaille pour une agence gouvernementale néerlandaise où nous avons fait construire la version actuelle de cet outil en partie à partir de l'argent des contribuables et en partie à partir du temps donné par le programmeur. C'est pourquoi il est disponible gratuitement mais pas open source. À partir de 2013, nous le ferons ne pas financer de nouvelles versions. Je n'en gagne aucun argent. J'espère juste que cela sera utilisé plus.)

Arjan vd Put
la source
1

Une troisième option que j'examine maintenant consiste à utiliser un fichier XSLT avec l' outil de transformation (conversion) XSLT . Je dois à peu près apprendre la langue au fur et à mesure, et ils ne vous facilitent pas la tâche en utilisant l'implémentation .NET qui utilise les anciennes normes XSLT / XPath 1.0.

blah238
la source
1

J'ai du code qui utilise ArcPy et DOM pour la conversion de MD existants, la création à partir de zéro (s'il n'en existe pas) et la mise à jour de certains éléments à l'aide de DOM. C'est un peu maladroit, avec pas mal de chemins d'accès codés en dur et ainsi de suite.

Steve Peedell
la source