Answers:
从ArcPy执行此操作的最简单方法是使用Python创建XML文件,然后调用Import Metadata(Conversion)。但是,这将覆盖所有内容。
一种替代方法是使用ArcObjects获取数据集的IName,转换为IMetadata,然后编辑IPropertyset。
我们非常需要类似的功能,最终为此目的建立了一个通用的,免费的开源Python库。您可以在https://github.com/ucd-cws/arcpy_metadata或运行“ pip install arcpy_metadata” 找到它。这里有一些功能及其使用方法的文档,还有世界资源研究所的一些额外贡献。我们试图使事物保持相对 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!
它仍然可以添加很多东西,但是如果您将已经存在的项目子类化或正确配置它们,则可以很扩展。它仍然是关于Alpha质量的软件,但是它可以工作,我们对此感到满意。
从2.5版开始,对于在ArcGIS Pro中寻求此功能的任何人,他们现在都包含来自Python的元数据API。元数据类文档中有更多详细信息。
我们一直在为此苦苦挣扎,并通过围绕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年起,我们将不会为任何新版本提供资金。我不会以任何方式从中获利。我只是希望它能得到更多利用。)
我现在要研究的第三个选项是将XSLT文件与XSLT转换(转换)工具一起使用。我几乎必须继续学习该语言,并且使用使用较旧的XSLT / XPath 1.0标准的.NET实现,它们并不能使您轻松。