プログラムでArcGISのメタデータを編集/更新しますか?


10

ArcGIS 10でメタデータをプログラムで更新することに成功した人はいますか?Python / arcpyの使用を検討しますが、ArcObjects(C#またはPython / comtypes)も可能です。

FGDCとArcGIS-ISO形式のメタデータの両方を更新する必要があります。使用するソリューションでは、競合している場合を除いて、既存の(非空白の)要素と追加された要素を保持できる必要があります。追加された要素は既存の要素を上書きします。

回答:


9

ArcPyからこれを行う最も簡単な方法は、Pythonを使用してXMLファイルを作成してから、[ メタデータのインポート(変換)]を呼び出すことです。ただし、これによりすべてが上書きされます。

別の方法として、ArcObjectsを使用してデータセットへのINameを取得し、IMetadataにキャストし、IPropertysetを編集します。


11

私たちは同様の機能を必要としており、その目的のために、一般的な無料のオープンソースPythonライブラリを構築することになりました。https://github.com/ucd-cws/arcpy_metadataで、または「pip install arcpy_metadata」を実行して見つけることができます。機能とその使用方法のドキュメントがいくつかあり、World Resources Instituteからの追加の貢献もあります。私たちは物事を比較的 Pythonic に保つようにして、それがうまく統合され、素早く学習できるようにしました。次に例を示します。

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!

追加できるものはまだたくさんありますが、すでにそこにあるアイテムをサブクラス化するか、正しく構成すれば、かなり拡張可能です。それはまだアルファ品質のソフトウェアについてですが、それは機能し、私たちは満足しています。


バージョン2.5以降のArcGIS Proでこの機能をお探しの方には、PythonのメタデータAPIが含まれています。詳細については、メタデータクラスのドキュメントをご覧ください。


9

私たちはこれに苦労していて、arcobjectsメタデータ関数を中心に構築された単純なpythonライブラリーを持つことで解決しました。これは、メタデータ値がキーワードに置き換えられた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にあり、無料で入手できます。ウェブサイトのバージョンは、arcgis 9.3用です。arcgis 10バージョンが利用可能になりますが、無料ではなくなります。

(完全な開示:私はオランダの政府機関で働いています。このツールの最新バージョンは、一部は納税者のお金から、一部はプログラマーからの寄付によって構築されました。そのため、無料で利用できますが、オープンソースではありません。2013年の時点で、新しいバージョンに資金を提供することはありません。それを使ってお金を稼ぐことはありません。それがさらに活用されることを願っています。)


1

私が今検討している3番目のオプションは、XSLT変換(変換)ツールと共にXSLTファイルを使用することです。しかし、私は言語を習得する必要がほとんどありますが、古いXSLT / XPath 1.0標準を使用する.NET実装を使用することで、言語を簡単に習得することはできません。


1

既存のMDの変換、ゼロからの作成(存在しない場合)、およびDOMを使用した特定の要素の更新にArcPyとDOMを使用するコードがあります。かなり不格好で、ハードコードされたパス名などがたくさんあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.