Sắp xếp lại vĩnh viễn các trường trong dữ liệu (shp, gdb)


24

Nếu tôi có một shurefile hoặc geodatabase featureclass có các trường mà tôi muốn sắp xếp lại vĩnh viễn, có công cụ, tập lệnh hoặc tiện ích nào giúp tôi nhanh chóng hoàn thành nhiệm vụ này không?

Nói chung tôi biết bạn phải tạo một trường mới, sau đó điền vào các giá trị cũ, sau đó xóa trường cũ. Tôi hy vọng có một cái gì đó đã được tạo ra ngoài đó sẽ giúp với điều này. Giả sử bạn không có sẵn FME hoặc một công cụ ETL khác, đề xuất tốt nhất tiếp theo là gì?

Đây KHÔNG phải là thay đổi cấp độ xem (nghĩa là - kéo / thả các trường theo thứ tự), mà là viết ra một shapefile hoặc featureclass mới. Cảm ơn.


Tôi thấy khó tin, nhưng tôi không thể tìm ra cách để làm điều này. Trường hợp sử dụng của bạn là gì khi cần phải đặt hàng lại các trường? Sắp xếp lại các trường trên tab trường của các thuộc tính lớp trong ArcMap không phải là một giải pháp?
Derek Swingley

2
Việc sắp xếp lại các trường là do dữ liệu sẽ không được sử dụng trong ArcMap, nhưng với phần mềm ánh xạ ít phức tạp hơn, 1) sử dụng shapefiles và 2) không cho phép sắp xếp lại ở phía máy khách và 3) khách hàng cần xem các thuộc tính chính hiển thị ở đầu cây "xác định".
RyanDalton

Chỉ cần chỉnh sửa câu trả lời đã xóa trước đây của tôi. Hy vọng rằng bạn không sợ dòng lệnh;).
Derek Swingley


2
@ SaultDon- đây không phải là câu hỏi tương tự. Bạn đã tham khảo một câu hỏi muốn sắp xếp HỒ SƠ (hàng), nhưng tôi muốn sắp xếp FIELDS (cột).
RyanDalton

Câu trả lời:


13

Tôi khá chắc chắn rằng bạn có thể làm điều này với Lớp tính năng đến Lớp tính năng bằng cách sắp xếp lại các trường trong phần bản đồ trường của công cụ.

Chỉnh sửa: FC2FC không làm điều này nhưng ... để giải cứu.

Tôi chỉ xác nhận rằng ogr2ogr có thể làm điều này. Chỉ định thứ tự tên trường của bạn trên công tắc -select. Chẳng hạn, nếu tôi có một shapefile với hai trường, "Name" và "FolderPath" (theo thứ tự đó), nhưng tôi muốn một shapefile mới với "FolderPath" trước tiên tôi sẽ làm điều này:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"

2
Mặc dù nó không thân thiện với người dùng như một lựa chọn như tôi đã hy vọng, nhưng nó chắc chắn là một mẹo nhỏ. Tôi đã tạo một tập lệnh python ArcGIS giúp xây dựng các đầu vào cho nó và người dùng chỉ cần bao gồm tùy chọn -select "field1, field2, v.v.". Bạn có thể tải xuống tại resource.arcgis.com/Resource2010/gallery/file/geoprocessing/
Kẻ

Tôi có một lớp tính năng trên SDE với các tên miền. Điều này sẽ giữ các miền liên quan?
MjonesGEO

@jothing no. AFAIK, ogr không hỗ trợ bộ dữ liệu từ SDE GDB và nó cũng không hỗ trợ tên miền.
Derek Swingley

Cảm ơn, tôi vừa sử dụng XRay và nó có thể sắp xếp lại hoặc thay thế các trường trong khi giữ tên miền của chúng trong SDE.
MjonesGEO

7

Công cụ ET GeoWizards sẽ làm điều này và có vẻ như phiên bản miễn phí sẽ làm điều đó mà không có bất kỳ giới hạn nào về số lượng tính năng.


Nó làm nhưng đáng buồn là không giữ bí danh.
Howeitzer

7

Plugin "Trình quản lý bảng" của QGIS giờ đây cũng có khả năng thực hiện nhiệm vụ này một cách dễ dàng mà không cần dòng lệnh.


6

Trong QGIS bây giờ bạn có thể sử dụng hộp công cụ xử lý (Ctl + Alt + T) và đi đến thuật toán địa lý của QGIS> Công cụ bảng Vector> Trường tái cấu trúc.

Từ đó bạn sẽ có tất cả các công cụ để chỉnh sửa cấu trúc bảng của mình.

nhập mô tả hình ảnh ở đây


4

X-Ray arcmap add in có một công cụ để sắp xếp lại các trường có định dạng Geodatabesx-ray sắp xếp lại công cụ trường ở đây


Điều này hoạt động rất tốt. Nó thậm chí sẽ giữ tên miền của bạn trong các trường nếu bạn đặt hàng lại SDE. Đề nghị tuyệt vời !!
MjonesGEO

3

Đối với tài liệu tham khảo: MapInfo cũng có thể thực hiện việc đó. Chỉ cần mở DBF và sắp xếp lại các trường vĩnh viễn. http://www.dbf-editor.com cũng làm điều đó ($ 40). Các biên tập viên DBF khác có thể cũng làm điều đó.


trong dòng này, infolib có lẽ cũng nên hoạt động (chuyển đổi thành ascii (csv), sắp xếp lại cho phù hợp, chuyển đổi lại thành thông tin hoặc dbf), miễn là bạn sẵn sàng sống với các giới hạn của định dạng tệp .dbf.
matt wilkie

Bạn có nghĩa là sống với những hạn chế của định dạng CSV? DBF là điểm khởi đầu cho câu hỏi này ...
Uffe Kousgaard

Tôi có nghĩa là giới hạn dbf, nghĩ cụ thể rằng csv không có giới hạn về độ dài tên trường hoặc độ dài giá trị bản ghi và điểm bắt đầu là tệp gdb, nhưng đọc lại QI thấy "shp" được đề cập trong tiêu đề. Vì vậy, giới hạn tất cả xung quanh ;-)
matt wilkie

3

Tôi đã gặp vấn đề tương tự và cách nhanh nhất để sắp xếp lại vĩnh viễn các trường dữ liệu, nếu bạn đã có QGIS, là sử dụng plugin 'Trình quản lý bảng' như đề xuất trước đây.

Thật đơn giản để cài đặt plugin và thân thiện với người dùng, như được mô tả trên trang bên dưới:

http://www.qgistutorials.com/en/docs/USE_plugins.html

Nó cho phép bạn di chuyển các thuộc tính theo một thứ tự cụ thể, đổi tên các trường, chèn bất kỳ trường mới nào và sao chép chúng. Nó cũng cho phép bạn lưu tệp gốc hoặc đổi tên tệp và lưu tệp khác với bản gốc.

nhập mô tả hình ảnh ở đây

Đây là một giải pháp nhanh chóng và thuận tiện cho vấn đề quản lý bảng thuộc tính của tôi và rất được khuyến khích, đặc biệt là đối với các tệp có số lượng lớn các thuộc tính được liên kết với nó.


3

Cách tốt nhất để làm điều đó là sử dụng Field Mappings. Tôi đã vật lộn với tính năng này của phần mềm ESRI trong nhiều năm, nhưng cuối cùng tôi cũng hài lòng với giải pháp này. Về cơ bản, bạn chỉ có thể tạo một bản sao của Lớp tính năng của mình với các trường được sắp xếp lại vĩnh viễn bằng cách sử dụng arcpy.FieldMappings . Tất cả các dữ liệu được thực hiện là tốt. Khi tập lệnh hoàn tất, chỉ cần đổi tên Lớp tính năng cũ của bạn thành myFeatureClass_old và tập lệnh mới của bạn thành myFeatureClass!

Đây là kịch bản, nó rất đơn giản:

import arcpy
'''
This is possible in python using FeatureClasstoFeatureClass with Fieldmappings. You can also rename fields at the same time.
So if you have a Feature Class with FIELD3, FIELD2, FIELD1 and you want the result to be FIELD1, FIELD2, FIELD3 then the following code should accomplish this.
'''
arcpy.env.workspace = r"C:\Users\myself\ArcData\my_geodatabase.gdb"
arcpy.env.overwriteOutput = True

input_fpath = "Lakes"

output_dpath = arcpy.env.workspace
output_fname = "Lakes_new"

fms = arcpy.FieldMappings()

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD1")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD2")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD3")
fms.addFieldMap(fm)

arcpy.conversion.FeatureClassToFeatureClass(input_fpath,output_dpath,output_fname,"",fms)

3

Giờ đây, Lớp Tính năng đến Lớp Tính năng có thể thực hiện việc này trong 10.5 bằng cách sử dụng phần Ánh xạ Trường Công cụ GP.

nhập mô tả hình ảnh ở đây


2

MakeQueryTable sẽ cho phép bạn xác định thứ tự các trường của mình cho một bảng hoặc FC (chỉ dành cho Cơ sở dữ liệu địa lý). Thứ tự mà bạn chỉ định các trường là thứ tự của đầu ra. Tôi thấy công cụ này khó sử dụng. YMMV

Arctoolbox, công cụ quản lý dữ liệu, lớp và chế độ xem bảng, tạo Bảng truy vấn


2

Xuất các lớp đối tượng sang cơ sở dữ liệu địa lý cá nhân trống (kéo và thả là nhanh nhất), mở .mdb trong Access, sắp xếp lại các trường trong Dạng xem thiết kế , lưu, sau đó sao chép ArcMap / Catalogue để tạo hình hoặc tệp cơ sở dữ liệu.

Phương pháp tương tự hoạt động để đổi tên các trường.

Hãy cẩn thận , chỉ làm việc trên các bản sao, nó rất dễ dàng để làm hỏng mọi thứ. (Như Karey Jack lưu ý trong một câu trả lời khác, Esri không khuyến khích truy cập .mdb trực tiếp ). Để an toàn, hãy bỏ qua tất cả các bảng bắt đầu bằng GDB_và cả những bảng kết thúc bằng _Shape_Index.


1

Hãy thử OGR2OGR. Bạn có thể vượt qua một truy vấn SQL và đặt các trường theo thứ tự bạn muốn chúng.

ogr2ogr outdataset indataset -sql "CHỌN src_field1 NHƯ dst_field1, src_field2 NHƯ dst_field2 TỪ sourcelayer"

Chỉ cần thử nghiệm này, và nó hoạt động tốt!

FYI, Cách dễ nhất để cài đặt OGR là thông qua FWTools .


1

Mở tệp .mdb trong MS Access và sắp xếp lại các trường bằng cách kéo và thả trong 'Dạng xem thiết kế'

Mặc dù ESRI không khuyến khích chỉnh sửa cơ sở dữ liệu trong liên kết Access ESRI


2
Chào mừng đến với trang web của chúng tôi, Karey! Đây không phải là câu trả lời tương tự Matt Wilkie đã đưa ra trong chủ đề này 18 tháng trước ( gis.stackexchange.com/a/5879 )?
whuber

0

Tôi đến bữa tiệc muộn một chút, nhưng tôi ngạc nhiên khi không ai nhắc đến Sơ đồ cơ sở dữ liệu địa lý ESRI .

Tài nguyên do ESRI cung cấp để chỉnh sửa cấu trúc XML của cơ sở dữ liệu địa lý và tệp của bạn. Theo như tôi quan tâm, điều cần thiết là nếu bạn đang làm việc trên bất cứ điều gì mà thiết kế phải hoàn hảo (dự án dài hạn). Nó sẽ giúp bạn không phải tạo lại các tệp liên tục sau khi mắc một lỗi đơn giản.


1
Bạn có thấy bình luận (cho chính câu hỏi) nói rằng đây không phải là một sự sắp xếp lại cơ sở dữ liệu, mà là cần thiết để xuất dữ liệu?
whuber
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.