Programmgesteuertes Bearbeiten / Aktualisieren von Metadaten in ArcGIS?

10

Hat es jemand geschafft, Metadaten in ArcGIS 10 programmgesteuert zu aktualisieren? Die Verwendung von Python / arcpy, aber auch von ArcObjects (C # oder Python / comtypes) ist ebenfalls möglich.

Ich muss sowohl die Metadaten im FGDC- als auch im ArcGIS-ISO-Format aktualisieren, und jede verwendete Lösung muss in der Lage sein, die vorhandenen (nicht leeren) Elemente zusammen mit den hinzugefügten Elementen beizubehalten, es sei denn, sie stehen in Konflikt hinzugefügte Elemente überschreiben die vorhandenen Elemente.

blah238
quelle

Antworten:

9

Der einfachste Weg, dies in ArcPy zu tun, besteht darin, eine XML-Datei mit Python zu erstellen und dann Import Metadata (Conversion) aufzurufen . Dies wird jedoch alles überschreiben.

Eine Alternative besteht darin, ArcObjects zu verwenden, um einen IName für das Dataset abzurufen, in IMetadata umzuwandeln und das IPropertyset zu bearbeiten.

James Schek
quelle
11

Wir hatten einen großen Bedarf an ähnlichen Funktionen und bauten zu diesem Zweck eine allgemeine, kostenlose Open-Source-Python-Bibliothek auf. Sie finden es unter https://github.com/ucd-cws/arcpy_metadata oder indem Sie eine "pip install arcpy_metadata" ausführen. Es gibt einige Dokumentationen zu Funktionen und deren Verwendung sowie einige zusätzliche Beiträge des World Resources Institute. Wir haben versucht, die Dinge relativ pythonisch zu halten, damit sie sich gut integrieren und schnell erlernt werden können. Hier ist ein Beispiel:

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!

Es gibt noch viele, die hinzugefügt werden könnten, ist aber ziemlich erweiterbar, wenn Sie die bereits vorhandenen Elemente in Unterklassen unterteilen oder sie korrekt konfigurieren. Es geht immer noch um Software in Alpha-Qualität, aber es funktioniert und wir sind damit zufrieden.


Für alle, die diese Funktion in ArcGIS Pro ab Version 2.5 suchen, ist jetzt eine Metadaten-API von Python enthalten. Weitere Details finden Sie in der Dokumentation zur Metadatenklasse .

Nicksan
quelle
9

Wir haben damit zu kämpfen und es gelöst, indem wir eine einfache Python-Bibliothek erstellt haben, die auf den Metadatenfunktionen von arcobjects basiert. Es basiert auf einer XML-Datei, in der die Metadatenwerte durch Schlüsselwörter ersetzt wurden. Sie können diese Schlüsselwörter in Ihrem Python-Code verwenden, um den Wert eines Metadatenfelds abzurufen oder festzulegen. Code würde ungefähr so ​​aussehen:

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

Das Tool finden Sie hier: http://www.aris.nl/dataprocessing_arcgis und ist frei verfügbar. Die Version auf der Website ist für arcgis 9.3. Eine Arcgis 10-Version wird verfügbar sein, ist jedoch nicht mehr kostenlos.

(Vollständige Offenlegung: Ich arbeite für eine niederländische Regierungsbehörde, bei der die aktuelle Version dieses Tools teilweise aus Steuergeldern und teilweise aus vom Programmierer gespendeten Zeit erstellt wurde. Deshalb ist es kostenlos, aber nicht Open Source verfügbar. Ab 2013 werden wir es tun Ich finanziere keine neuen Versionen. Ich verdiene in keiner Weise Geld damit. Ich hoffe nur, dass es mehr genutzt wird.)

Arjan vd Put
quelle
1

Eine dritte Option, die ich jetzt prüfe, ist die Verwendung einer XSLT-Datei zusammen mit dem XSLT-Transformationstool (Konvertierungstool) . Ich muss die Sprache im Laufe der Zeit ziemlich genau lernen, und sie machen es Ihnen nicht einfach, wenn Sie die .NET-Implementierung verwenden, die die älteren XSLT / XPath 1.0-Standards verwendet.

blah238
quelle
1

Ich habe Code, der ArcPy und DOM für die Konvertierung vorhandener MD, die Erstellung von Grund auf neu (falls keine vorhanden ist) und die Aktualisierung bestimmter Elemente mithilfe von DOM verwendet. Es ist ein bisschen klobig, mit ziemlich vielen fest codierten Pfadnamen und so weiter.

Steve Peedell
quelle