ArcGIS에서 프로그래밍 방식으로 메타 데이터를 편집 / 업데이트 하시겠습니까?


10

ArcGIS 10에서 프로그래밍 방식으로 메타 데이터를 업데이트 한 사람이 있습니까? Python / arcpy를 사용하지만 ArcObjects (C # 또는 Python / comtypes)를 사용하는 것도 가능합니다.

FGDC 및 ArcGIS-ISO 형식 메타 데이터를 모두 업데이트해야하며, 어떤 솔루션을 사용하든 기존 (공백이 아닌) 요소를 추가 된 요소와 함께 유지해야합니다. 추가 된 요소는 기존 요소를 덮어 씁니다.

답변:


9

ArcPy에서이를 수행하는 가장 쉬운 방법은 Python을 사용하여 XML 파일을 만든 다음 메타 데이터 가져 오기 (전환) 를 호출하는 것 입니다. 그러나 이것은 모든 것을 덮어 씁니다.

대안은 ArcObject를 사용하여 데이터 세트에 대한 IName을 가져오고 IMetadata에 캐스트하고 IPropertyset을 편집하는 것입니다.


11

우리는 유사한 기능에 대한 필요성이 커졌으며, 목적을 위해 일반적인 무료 오픈 소스 Python 라이브러리를 구축했습니다. https://github.com/ucd-cws/arcpy_metadata에서 또는 "pip install arcpy_metadata"를 실행하여 찾을 수 있습니다 . World Resources Institute의 추가 공헌과 함께 기능 및 사용 방법에 대한 문서가 있습니다. 우리는 잘 통합되고 빠르게 배울 수 있도록 비교적 파이썬적인 것을 유지하려고 노력했습니다 . 예를 들면 다음과 같습니다.

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 메타 데이터 함수를 기반으로 간단한 파이썬 라이브러리를 구축하여 해결했습니다. 메타 데이터 값이 키워드로 대체 된 xml 파일을 기반으로합니다. 파이썬 코드에서 이러한 키워드를 사용하여 메타 데이터 필드의 값을 가져 오거나 설정할 수 있습니다. 코드 소리는 다음과 같습니다.

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

세 번째 옵션은 XSLT 파일을 XSLT 변환 (변환) 도구 와 함께 사용하는 것 입니다. 그래도 나는 언어를 배울 필요가 있으며 이전 XSLT / XPath 1.0 표준을 사용하는 .NET 구현을 사용하여 쉽게 언어를 배울 수는 없습니다.


1

기존 MD의 변환, 처음부터 새로 작성 (존재하지 않는 경우) 및 DOM을 사용하여 특정 요소 업데이트에 ArcPy 및 DOM을 사용하는 코드가 있습니다. 하드 코딩 된 경로 이름 등이 많기 때문에 약간 어색합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.