Програмно редагувати / оновлювати метадані в ArcGIS?


10

Хтось встиг програматично оновити метадані в ArcGIS 10? Враховуючи використання Python / arcpy, але ArcObjects (C # або Python / comtypes) також є можливою.

Мені потрібно оновити як метадані формату FGDC, так і ArcGIS-ISO, і будь-яке рішення, яке використовується, повинне мати можливість зберігати наявні (непорожні) елементи разом з доданими елементами, за винятком випадків, коли вони суперечать, і в цьому випадку додані елементи перезаписують наявні елементи.

Відповіді:


9

Найпростіший спосіб зробити це з ArcPy - створити XML-файл за допомогою Python, а потім викликати імпорт метаданих (конверсія) . Однак це все перезаписує.

Альтернативою є використання ArcObjects для отримання ІНАМ до набору даних, передавання IMetadata та редагування набору IProperty.


11

У нас була велика потреба у подібних можливостях, і в кінцевому підсумку було створено загальну, безкоштовну, відкриту бібліотеку Python з цією метою. Ви можете знайти його за адресою https://github.com/ucd-cws/arcpy_metadata або запустивши "pip install arcpy_metadata". Існує деяка документація щодо особливостей та способів їх використання з додатковими внесками Всесвітнього інституту ресурсів. Ми намагалися тримати речі відносно пітонічними, щоб вони добре інтегрувались та могли швидко навчатися. Ось приклад:

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!

У ньому ще багато, що можна було б додати, але досить розширюється, якщо ви підкласифікуєте елементи, які вже є, або правильно налаштуєте їх. Йдеться про програмне забезпечення якості альфа, але воно працює і ми задоволені цим.


Для всіх, хто шукає цю можливість у ArcGIS Pro, починаючи з версії 2.5, вони тепер включають API метаданих від Python. Більш детально в документації по класу метаданих .


9

Ми боролися з цим і вирішили це, створивши просту бібліотеку пітонів, побудовану навколо функцій метаданих аркобектів. Він заснований на xml-файлі, де значення метаданих було замінено на ключові слова. Ви можете використовувати ці ключові слова у вашому коді python, щоб отримати або встановити значення поля метаданих. Код виглядав би приблизно так:

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

Інструмент можна знайти тут: http://www.aris.nl/dataprocessing_arcgis і є у вільному доступі. Версія на веб-сайті призначена для архгіс 9.3. Буде доступна версія arcgis 10, але вона більше не буде безкоштовною.

(Повне розкриття інформації: я працюю в голландському урядовому відомстві, де у нас була поточна версія цього інструменту, побудована частково з грошей платників податків, а частково з часу, подарованого програмістом. Ось чому це доступно безкоштовно, але не з відкритим кодом. Станом на 2013 рік ми будемо не фінансувати будь-які нові версії. Я жодним чином не заробляю з цього грошей. Я просто сподіваюся, що вони будуть використані для більшого використання.)


1

Третій варіант, який я зараз розглядаю, - це використовувати файл XSLT разом із інструментом трансформації (перетворення) XSLT . Мені дуже доводиться вивчати мову, хоча я йду, і вони не спрощують вас, використовуючи реалізацію .NET, яка використовує старі стандарти XSLT / XPath 1.0.


1

У мене є якийсь код, який використовує ArcPy і DOM для перетворення існуючого MD, створення з нуля (якщо такого немає) та оновлення певних елементів за допомогою DOM. Це трохи незграбно, з досить багато твердо кодованих імен тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.