Secara terprogram mengedit / memperbarui metadata di ArcGIS?

10

Adakah yang berhasil memperbarui metadata secara terprogram di ArcGIS 10? Mempertimbangkan menggunakan Python / arcpy tetapi ArcObjects (C # atau Python / comtypes) juga kemungkinan.

Saya perlu memperbarui metadata format FGDC dan ArcGIS-ISO, dan solusi apa pun yang digunakan harus dapat mempertahankan elemen (non-kosong) yang ada bersama dengan elemen yang ditambahkan, kecuali di mana mereka berada dalam konflik dalam hal ini elemen yang ditambahkan menimpa elemen yang ada.

blah238
sumber

Jawaban:

9

Cara termudah untuk melakukan ini dari ArcPy adalah membuat file XML menggunakan Python dan kemudian memohon Import Metadata (Konversi) . Namun, ini akan menimpa segalanya.

Alternatifnya adalah menggunakan ArcObjects untuk mendapatkan IName ke dataset, gunakan IMetadata, dan edit IPropertyset.

James Schek
sumber
11

Kami memiliki kebutuhan besar untuk kemampuan yang sama dan akhirnya membangun perpustakaan Python open source umum, untuk tujuan tersebut. Anda dapat menemukannya di https://github.com/ucd-cws/arcpy_metadata atau dengan menjalankan "pip install arcpy_metadata". Ada beberapa dokumentasi fitur dan cara menggunakannya, dengan beberapa kontribusi tambahan dari World Resources Institute. Kami mencoba menjaga hal-hal yang relatif Pythonic sehingga terintegrasi dengan baik dan dapat dipelajari dengan cepat. Ini sebuah contoh:

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!

Masih ada banyak yang bisa ditambahkan, tetapi cukup bisa diperluas jika Anda mensubklasifikasikan item yang sudah ada, atau mengkonfigurasinya dengan benar. Ini masih tentang perangkat lunak kualitas alfa, tetapi berfungsi dan kami senang dengannya.


Bagi siapa pun yang mencari kemampuan ini dalam ArcGIS Pro, pada versi 2.5, mereka sekarang menyertakan API metadata dari Python. Ada lebih banyak detail dalam dokumentasi kelas Metadata .

nicksan
sumber
9

Kami telah berjuang dengan ini dan menyelesaikannya dengan memiliki perpustakaan python sederhana yang dibangun di sekitar fungsi metadata arcobjects. Ini didasarkan pada file xml di mana nilai metadata telah diganti dengan kata kunci. Anda dapat menggunakan kata kunci ini dalam kode python Anda untuk mendapatkan atau mengatur nilai bidang metadata. Kode akan terlihat seperti ini:

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

Alat ini dapat ditemukan di sini: http://www.aris.nl/dataprocessing_arcgis dan tersedia secara bebas. Versi di situs web ini adalah untuk arcgis 9.3. Versi arcgis 10 akan tersedia tetapi tidak lagi gratis.

(Pengungkapan penuh: Saya bekerja untuk agen pemerintah Belanda di mana kami memiliki versi saat ini dari alat ini dibangun sebagian dari uang pembayar pajak dan sebagian dari waktu yang disumbangkan oleh programmer. Itulah mengapa tersedia secara gratis tetapi tidak open source. Pada 2013 kami akan tidak mendanai versi baru. Saya tidak menghasilkan uang dengan cara apa pun. Saya hanya berharap ini bisa digunakan lebih banyak.)

Arjan vd Put
sumber
1

Opsi ketiga yang saya cari sekarang adalah menggunakan file XSLT bersama dengan alat XSLT Transformation (Conversion) . Saya cukup banyak harus belajar bahasa saat saya pergi, dan mereka tidak membuatnya mudah bagi Anda dengan menggunakan implementasi .NET yang menggunakan standar XSLT / XPath 1.0 yang lebih lama.

blah238
sumber
1

Saya memiliki beberapa kode yang menggunakan ArcPy dan DOM untuk konversi MD yang ada, pembuatan dari awal (jika tidak ada) dan pembaruan elemen tertentu menggunakan DOM. Agak kikuk, dengan cukup banyak nama path yang dikodekan dan sebagainya.

Steve Peedell
sumber