Programowo edytować / aktualizować metadane w ArcGIS?

10

Czy komukolwiek udało się programowo zaktualizować metadane w ArcGIS 10? Biorąc pod uwagę użycie Pythona / arcpy, ale ArcObjects (C # lub Python / comtypes) jest również możliwe.

Muszę zaktualizować zarówno metadane formatu FGDC, jak i ArcGIS-ISO, a jakiekolwiek zastosowane rozwiązanie musi być w stanie zachować istniejące (niepuste) elementy wraz z dodanymi elementami, z wyjątkiem sytuacji, gdy są one w konflikcie, w którym to przypadku dodane elementy zastępują istniejące elementy.

blah238
źródło

Odpowiedzi:

9

Najprostszym sposobem na to z ArcPy jest utworzenie pliku XML za pomocą Pythona, a następnie wywołanie importu metadanych (konwersji) . Jednak to wszystko nadpisze.

Alternatywą jest użycie ArcObjects w celu uzyskania IName do zbioru danych, rzutowania na IMetadata i edycji zestawu IPropertyset.

James Schek
źródło
11

Bardzo potrzebowaliśmy podobnych możliwości i do tego celu stworzyliśmy ogólną, darmową bibliotekę Pythona typu open source. Można go znaleźć na https://github.com/ucd-cws/arcpy_metadata lub uruchamiając „pip install arcpy_metadata”. Istnieje pewna dokumentacja funkcji i sposobu ich używania, z dodatkowymi wkładami World Resources Institute. Staraliśmy się zachować względnie Pythonic, aby dobrze się integrował i mógł być szybko nauczony. Oto przykład:

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!

Nadal ma wiele do dodania, ale jest dość rozszerzalny, jeśli podklasujesz już istniejące elementy lub skonfigurujesz je poprawnie. Nadal chodzi o oprogramowanie w jakości alfa, ale działa i jesteśmy z niego zadowoleni.


Każdy, kto szuka tej możliwości w ArcGIS Pro, począwszy od wersji 2.5, ma teraz interfejs API metadanych z Python. Więcej informacji znajduje się w dokumentacji klasy Metadata .

Nicksan
źródło
9

Zmagaliśmy się z tym i rozwiązaliśmy go, mając prostą bibliotekę Pythona zbudowaną wokół funkcji metadanych arcobjects. Opiera się na pliku xml, w którym wartości metadanych zostały zastąpione słowami kluczowymi. Możesz użyć tych słów kluczowych w kodzie Pythona, aby uzyskać lub ustawić wartość pola metadanych. Kod woud wygląda mniej więcej tak:

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

Narzędzie można znaleźć tutaj: http://www.aris.nl/dataprocessing_arcgis i jest ono dostępne bezpłatnie. Wersja na stronie dotyczy Arcgis 9.3. Wersja Arcgis 10 będzie dostępna, ale nie będzie już bezpłatna.

(Pełne ujawnienie: Pracuję dla holenderskiej agencji rządowej, w której obecna wersja tego narzędzia została zbudowana częściowo z pieniędzy podatników, a częściowo z datków przekazanych przez programistę. Dlatego jest on dostępny bezpłatnie, ale nie jako open source. Od 2013 roku będziemy nie będę finansować żadnych nowych wersji. W żaden sposób nie zarabiam na tym pieniędzy. Mam tylko nadzieję, że zostanie on bardziej wykorzystany.)

Arjan vd Put
źródło
1

Trzecią opcją, nad którą teraz patrzę, jest użycie pliku XSLT wraz z narzędziem XSLT Transformation (Conversion) . Muszę jednak nauczyć się języka w miarę upływu czasu, a oni nie ułatwiają ci korzystania z implementacji .NET, która wykorzystuje starsze standardy XSLT / XPath 1.0.

blah238
źródło
1

Mam kod, który używa ArcPy i DOM do konwersji istniejącej MD, tworzenia od zera (jeśli nie istnieje) i aktualizacji niektórych elementów za pomocą DOM. Jest trochę niezgrabny, z dość dużą ilością zakodowanych ścieżek i tak dalej.

Steve Peedell
źródło