Sắp xếp lại các trường vĩnh viễn bằng công cụ ArcGIS Make Query Table?


15

Trong trường Trả lời sắp xếp lại các trường (vĩnh viễn) trong tệp cơ sở dữ liệu địa lý bằng ArcGIS Desktop? nó đã được tuyên bố rằng công cụ Make Query Table có thể được sử dụng để sắp xếp lại các trường trong các bảng và các lớp tính năng vĩnh viễn.

Tuy nhiên, khi tôi mở hộp thoại cho công cụ đó, tôi không thể thấy bất cứ nơi nào cho phép sắp xếp lại các trường. Tất cả những gì tôi có thể thấy là các trường có thể được thực hiện thông qua hoặc bỏ qua các hộp kiểm nhưng theo cùng một thứ tự.

Giả sử rằng có thể ai đó có thể mô tả các bước chi tiết hơn, xin vui lòng?

Tạo hộp thoại công cụ Bảng truy vấn

Câu trả lời:


13

Tôi đã tìm ra cách để làm điều này bằng cách sử dụng công cụ Make Query Table , Copy As Python Snippet , cửa sổ Python và công cụ Copy Feature .

Sau khi chạy công cụ Make Query Table để chỉ lướt qua các trường mà tôi muốn xuất hiện trong đầu ra, tôi đã có thể Sao chép dưới dạng Python Snippet mã này từ Công cụ địa lý | Cửa sổ kết quả vào cửa sổ Python của ArcMap.

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.CODE #;schools.NAME #;schools.TYPE #;schools.Y11STUDENT #;schools.Y12STUDENT #;schools.COORDGEOCO #;schools.ID #","#")

và chỉnh sửa nó để trở thành:

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable2","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.Y12STUDENT #;schools.Y11STUDENT #;schools.NAME #","#")

Lưu ý rằng QueryTable2 mới giữ lại trường Shape (vì vậy tôi có thể CopyFeatures nó) và tôi đã sắp xếp lại các trường NAME, YR11STUDENT & YR12STUDENT. Tôi cũng đã sử dụng cơ hội để bỏ thêm một vài lĩnh vực.

Bước cuối cùng là sử dụng công cụ Sao chép tính năng trên QueryTable2 mà tôi đã thực hiện thông qua hộp thoại công cụ của nó để tạo một lớp đối tượng mới với các trường được sắp xếp lại vĩnh viễn.


2
Lưu ý: bạn cũng có thể sử dụng MakeQueryTable để thay đổi tên các trường của mình bằng cách nhập danh sách danh sách tên trường và bí danh ([[fieldname1, alias1], [fieldname2, alias2] ...])
ndimhypervol

1
Chức năng tương tự được thể hiện khi bạn chạy lớp Feature sang lớp Feature và sau đó Copy As Python Snippet.
Alex Tereshenkov

2

Với Công cụ Hợp nhất , bạn có thể dễ dàng sắp xếp lại các trường vĩnh viễn. Nó hoạt động với các bảng và các lớp tính năng. Việc sắp xếp lại có thể được thực hiện thông qua tập lệnh python và thậm chí với hộp thoại Tool (Bằng cách xóa một trường và thêm lại nó trong hộp thoại). Mặc dù đặt hàng lại qua hộp thoại không phải là một cách tiếp cận hoàn hảo.

Bạn nên sử dụng công cụ Hợp nhất một lần và sau đó sử dụng Copy As Python Snippet và sau đó thay đổi thủ công các thứ tự trường và sau đó dán mã python vào cửa sổ python.

Đây là tập lệnh python sử dụng Công cụ Hợp nhất để sắp xếp lại các trường (Sao chép từ đây )

import arcpy

def reorder_fields(table, out_table, field_order, add_missing=True):
    """ 
    Reorders fields in input featureclass/table
    :table:         input table (fc, table, layer, etc)
    :out_table:     output table (fc, table, layer, etc)
    :field_order:   order of fields (objectid, shape not necessary)
    :add_missing:   add missing fields to end if True (leave out if False)
    -> path to output table
    """
    existing_fields = arcpy.ListFields(table)
    existing_field_names = [field.name for field in existing_fields]

    existing_mapping = arcpy.FieldMappings()
    existing_mapping.addTable(table)

    new_mapping = arcpy.FieldMappings()

    def add_mapping(field_name):
        mapping_index = existing_mapping.findFieldMapIndex(field_name)

        # required fields (OBJECTID, etc) will not be in existing mappings
        # they are added automatically
        if mapping_index != -1:
            field_map = existing_mapping.fieldMappings[mapping_index]
            new_mapping.addFieldMap(field_map)

    # add user fields from field_order
    for field_name in field_order:
        if field_name not in existing_field_names:
            raise Exception("Field: {0} not in {1}".format(field_name, table))

        add_mapping(field_name)

    # add missing fields at end
    if add_missing:
        missing_fields = [f for f in existing_field_names if f not in field_order]
        for field_name in missing_fields:
            add_mapping(field_name)

    # use merge with single input just to use new field_mappings
    arcpy.Merge_management(table, out_table, new_mapping)
    return out_table

SỬ DỤNG:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)

Bạn có thể liệt kê các bước chính xác mà bạn sử dụng để thực hiện việc này thông qua hộp thoại công cụ của nó không? Từ thử nghiệm 10.3.1 của tôi, có vẻ như bảng ánh xạ trường không cho phép đặt hàng lại. Ngoài ra, tôi nghĩ rằng câu trả lời này sẽ được đặt tốt hơn cho một câu hỏi khác ( gis.stackexchange.com/questions/32119/ mẹo ) vì câu hỏi này liên quan cụ thể đến việc sử dụng công cụ Make Query Table.
PolyGeo

Vâng, tôi nhận thấy rằng trong tiêu đề câu hỏi của bạn. Nhưng bài đăng này có thể ủng hộ khách truy cập trong tương lai chỉ cần sắp xếp lại các trường, cách dễ nhất.
Farid Cheraghi

Việc sắp xếp lại có thể được thực hiện bằng cách loại bỏ một trường và thêm lại nó trong hộp thoại. Không phải là một cách tiếp cận hoàn hảo mặc dù.
Farid Cheraghi

1
Tôi đã bỏ phiếu cho câu trả lời này cho câu hỏi khác mà tôi nghĩ bây giờ nó là câu trả lời hay nhất nhưng vì đó là "câu trả lời trùng lặp" và không phải là câu trả lời trực tiếp cho câu hỏi được hỏi ở đây, tôi không nghĩ rằng một cuộc bỏ phiếu thứ hai sẽ phù hợp.
PolyGeo

@FaridCher, cảm ơn vì đã chia sẻ mã. Chỉ cần sắp xếp lại các trường thực sự nhanh chóng trong Python và nó hoạt động rất tốt. Tuyệt vời.
Alex Tereshenkov

1

Đọc xong Thay đổi thứ tự các thuộc tính trong bảng và cố gắng sắp xếp lại thứ tự các trường, tôi tìm thấy giải pháp đơn giản này trong ArcMap 10,1 ...

  1. Nhấp chuột phải vào tính năng bạn muốn thay đổi trong mục lục
  2. bấm vào Thuộc tính
  3. bấm vào tab Trường
  4. bấm vào một lĩnh vực
  5. nhấp vào mũi tên "di chuyển lên" hoặc "di chuyển xuống"
  6. Áp dụng, OK

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


3
Tốt thử. Nhưng thật không may, điều này chỉ áp dụng cho lớp bạn đã thêm vào tài liệu bản đồ. Lớp tính năng vẫn sẽ có các trường theo thứ tự được xác định. Về mặt kỹ thuật, không có "thứ tự" các trường trong cơ sở dữ liệu, nhưng với tư cách là người dùng cuối, bạn có thể muốn có thể khi thêm một lớp đối tượng vào tài liệu bản đồ và mở bảng thuộc tính sẽ thấy các trường trong đơn đặt hàng phù hợp với bạn.
Alex Tereshenkov

1

Tôi có một phương pháp để thực hiện nó hoàn toàn trong trình xây dựng mô hình theo cách tương đối mạnh mẽ. Nó hơi tẻ nhạt khi thiết lập nhưng ít nhất nó có thể được chèn vào như một phần của phân tích trình tạo mô hình lớn hơn:

Công cụ hòa tan - ObjectID là trường hòa tan. Thêm các trường (Thống kê) còn lại theo thứ tự mong muốn và chọn tùy chọn (Đầu tiên) trong danh sách Loại Statstic thả xuống. Trong ví dụ dưới đây, tôi đã di chuyển trường SaltMarsh_Pct lên biểu mẫu xuống trong danh sách các trường đến vị trí 6.

Hòa tan Mô hình với các trường được sắp xếp lại

Tôi thường sao chép các kết quả sau đó đổi tên từng trường (bản sao có chức năng dự phòng và việc đổi tên cũng có thể được thực hiện ở đó nhưng nó không ổn định)

Sử dụng công cụ Alter Field để đổi tên từng trường

Thay đổi tên trường trở lại ban đầu (loại bỏ FIRST)

Tất cả cùng nhau trong một mô hình trông như thế này:

Mô hình ví dụ để sắp xếp lại

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.