Lập trình chỉnh sửa / cập nhật siêu dữ liệu trong ArcGIS?


10

Có ai đã thành công trong việc cập nhật siêu dữ liệu theo chương trình trong ArcGIS 10 chưa? Xem xét sử dụng Python / arcpy nhưng ArcObjects (C # hoặc Python / comtypes) cũng là một khả năng.

Tôi cần cập nhật cả siêu dữ liệu định dạng FGDC và ArcGIS-ISO và bất kỳ giải pháp nào được sử dụng đều cần có khả năng giữ lại các phần tử hiện có (không trống) cùng với các phần tử được thêm vào, trừ trường hợp chúng bị xung đột trong trường hợp đó các yếu tố được thêm vào ghi đè lên các yếu tố hiện có.

Câu trả lời:


9

Cách dễ nhất để làm điều này từ ArcPy là tạo tệp XML bằng Python và sau đó gọi Nhập siêu dữ liệu (Chuyển đổi) . Tuy nhiên, điều này sẽ ghi đè lên mọi thứ.

Một cách khác là sử dụng ArcObjects để lấy IName cho tập dữ liệu, chuyển sang IMetadata và chỉnh sửa IPropertyset.


11

Chúng tôi có nhu cầu lớn về khả năng tương tự và cuối cùng đã xây dựng một thư viện Python nguồn mở, miễn phí, chung cho mục đích này. Bạn có thể tìm thấy nó tại https://github.com/ucd-cws/arcpy_metadata hoặc bằng cách chạy "pip install arcpy_metadata". Có một số tài liệu về các tính năng và cách sử dụng nó, với một số đóng góp bổ sung từ Viện Tài nguyên Thế giới. Chúng tôi đã cố gắng giữ mọi thứ tương đối Pythonic để nó tích hợp tốt và có thể học hỏi nhanh chóng. Đây là một ví dụ:

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!

Nó vẫn còn nhiều thứ có thể được thêm vào, nhưng khá mở rộng nếu bạn phân lớp các mục đã có hoặc cấu hình chúng một cách chính xác. Nó vẫn là về phần mềm chất lượng alpha, nhưng nó hoạt động và chúng tôi hài lòng với nó.


Đối với bất kỳ ai đang tìm kiếm khả năng này trong ArcGIS Pro, kể từ phiên bản 2.5, giờ đây họ đã bao gồm API siêu dữ liệu từ Python. Có nhiều chi tiết hơn trong tài liệu lớp Metadata .


9

Chúng tôi đã đấu tranh với điều này và giải quyết nó bằng cách có một thư viện python đơn giản được xây dựng xung quanh các hàm siêu dữ liệu arcobjects. Nó dựa trên tệp xml trong đó các giá trị siêu dữ liệu đã được thay thế bằng từ khóa. Bạn có thể sử dụng các từ khóa này trong mã python của mình để lấy hoặc đặt giá trị của trường siêu dữ liệu. Code woud trông giống như thế này:

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

Công cụ này có thể được tìm thấy ở đây: http://www.aris.nl/dataprocessing_arcgis và có sẵn miễn phí. Phiên bản trên trang web dành cho arcgis 9.3. Một phiên bản arcgis 10 sẽ có sẵn nhưng nó sẽ không còn miễn phí nữa.

(Tiết lộ đầy đủ: Tôi làm việc cho một cơ quan chính phủ Hà Lan nơi chúng tôi có phiên bản hiện tại của công cụ này được xây dựng một phần từ tiền đóng thuế và một phần do thời gian được lập trình viên quyên góp. không được tài trợ cho bất kỳ phiên bản mới nào. Tôi không kiếm được tiền từ bất kỳ cách nào. Tôi chỉ hy vọng nó sẽ được sử dụng nhiều hơn.)


1

Tùy chọn thứ ba mà tôi đang tìm kiếm bây giờ là sử dụng tệp XSLT cùng với công cụ Chuyển đổi (Chuyển đổi) XSLT . Tôi gần như phải học ngôn ngữ khi tôi đi và họ không làm cho bạn dễ dàng bằng cách sử dụng triển khai .NET sử dụng các tiêu chuẩn XSLT / XPath 1.0 cũ hơn.


1

Tôi có một số mã sử dụng ArcPy và DOM để chuyển đổi MD hiện có, tạo từ đầu (nếu không tồn tại) và cập nhật các phần tử nhất định bằng DOM. Đó là một chút lộn xộn, với khá nhiều tên đường được mã hóa cứng và như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.