Editar / atualizar programaticamente os metadados no ArcGIS?

10

Alguém conseguiu atualizar programaticamente os metadados no ArcGIS 10? Considerando o uso de Python / arcpy, mas ArcObjects (C # ou Python / comtypes) também é uma possibilidade.

Preciso atualizar os metadados do formato FGDC e ArcGIS-ISO, e qualquer solução usada deve ser capaz de manter os elementos existentes (não vazios) junto com os elementos adicionados, exceto em caso de conflito em que os elementos adicionados substituem os elementos existentes.

blah238
fonte

Respostas:

9

A maneira mais fácil de fazer isso no ArcPy é criar um arquivo XML usando Python e depois chamar Import Metadata (Conversion) . No entanto, isso substituirá tudo.

Uma alternativa é usar o ArcObjects para obter um IName para o conjunto de dados, converter para IMetadata e editar o IPropertyset.

James Schek
fonte
11

Tínhamos uma grande necessidade de um recurso semelhante e acabamos construindo uma biblioteca Python de código aberto geral e gratuita para esse fim. Você pode encontrá-lo em https://github.com/ucd-cws/arcpy_metadata ou executando um "pip install arcpy_metadata". Há alguma documentação sobre os recursos e como usá-lo, com algumas contribuições adicionais do World Resources Institute. Tentamos manter as coisas relativamente Pythonic para que elas se integrem bem e possam ser aprendidas rapidamente. Aqui está um exemplo:

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!

Ainda há muito o que pode ser adicionado, mas é bastante extensível se você subclassificar os itens que já estão lá ou configurá-los corretamente. Ainda se trata de software de qualidade alfa, mas funciona e estamos felizes com isso.


Para quem procura esse recurso no ArcGIS Pro, a partir da versão 2.5, agora inclui uma API de metadados do Python. Há mais detalhes na documentação da classe Metadados .

nicksan
fonte
9

Estamos lutando com isso e resolvemos isso com uma biblioteca python simples criada em torno das funções de metadados dos arcobjects. É baseado em um arquivo xml onde os valores de metadados foram substituídos por palavras-chave. Você pode usar essas palavras-chave no seu código python para obter ou definir o valor de um campo de metadados. O código seria algo parecido com isto:

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

A ferramenta pode ser encontrada aqui: http://www.aris.nl/dataprocessing_arcgis e está disponível gratuitamente. A versão no site é para o arcgis 9.3. Uma versão do arcgis 10 estará disponível, mas não será mais gratuita.

(Divulgação completa: trabalho para uma agência governamental holandesa, na qual a versão atual dessa ferramenta foi construída parcialmente com dinheiro dos contribuintes e parcialmente com o tempo doado pelo programador. Por isso, está disponível gratuitamente, mas não em código aberto. A partir de 2013, iremos não estou financiando nenhuma versão nova. Não estou ganhando dinheiro com isso de nenhuma maneira. Só espero que seja mais útil.)

Arjan vd Put
fonte
1

Uma terceira opção que eu estou examinando agora é usar um arquivo XSLT junto com a ferramenta Transformação XSLT (conversão) . No entanto, estou precisando aprender o idioma e eles não facilitam o uso da implementação do .NET, que usa os padrões XSLT / XPath 1.0 mais antigos.

blah238
fonte
1

Eu tenho algum código que usa ArcPy e DOM para conversão do MD existente, criação do zero (se não existir) e atualização de certos elementos usando o DOM. É um pouco desajeitado, com muitos nomes de caminho codificados e assim por diante.

Steve Peedell
fonte