ArcGIS Make Query Table 도구를 사용하여 필드를 영구적으로 재정렬 하시겠습니까?


15

에서 대답는 ArcGIS 데스크탑을 사용하여 파일 지오 데이터베이스에 (영구적으로) 재 배열 필드? 조회 테이블 작성 도구를 사용하여 테이블 및 기능 클래스의 필드를 영구적으로 재정렬 할 수 있다고 언급되었습니다.

그러나 해당 도구의 대화 상자를 열면 필드 순서를 바꿀 수있는 곳이 없습니다. 내가 볼 수있는 것은 확인란을 사용하여 동일한 순서로 필드를 전달하거나 삭제할 수 있다는 것입니다.

누군가가 단계를 더 자세히 설명 할 수 있다고 가정하십시오.

쿼리 테이블 만들기 도구 대화 상자

답변:


13

쿼리 테이블 만들기 도구, Python Snippet으로 복사 , Python 창기능 복사 도구 를 사용하여이 작업을 수행하는 방법을 알아 냈습니다 .

쿼리 테이블 만들기 도구를 실행하여 출력에 표시하려는 필드 만 가져 오면 지오 프로세싱 |이 코드를 Python Snippet으로 복사 할 수있었습니다. ArcMap의 Python 창에 결과 창.

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

다음과 같이 편집하십시오.

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

새로운 QueryTable2는 Shape 필드를 유지하므로 CopyFeatures를 수행 할 수 있으며 NAME, YR11STUDENT 및 YR12STUDENT 필드를 다시 정렬했습니다. 나는 또한 몇 가지 필드를 더 버릴 기회를 사용했다.

마지막 단계는 QueryTable2에서 도구 대화 상자를 통해 수행 한 기능 복사 도구를 사용하여 필드가 영구적으로 재정렬 된 새 기능 클래스를 작성하는 것입니다.


2
참고 : 당신은 또한 ([[하여 FieldName1, alias1], [fieldname2, alias2] ...]) 필드 이름 및 별칭 목록의 목록 입력하여 필드의 이름을 변경 MakeQueryTable을 사용할 수 있습니다
ndimhypervol

1
Feature 클래스를 Feature 클래스로 실행 한 다음 Python Snippet으로 복사하면 동일한 기능이 표시됩니다.
Alex Tereshenkov

2

로 다음 병합 도구 , 당신은 쉽게 재주문 필드를 영구적으로 할 수 있습니다. 테이블 및 기능 클래스와 함께 작동합니다. 재정렬은 파이썬 스크립트를 통해 그리고 도구 대화 상자를 사용하여 수행 할 수 있습니다 (필드를 제거하고 대화 상자에 다시 추가하여). 대화 상자를 통한 순서 변경은 완벽한 방법은 아닙니다.

병합 도구를 한 번 사용한 다음 Python Snippet으로 복사 를 사용한 다음 필드 순서를 수동으로 변경 한 다음 Python 코드를 Python 창에 붙여 넣는 것이 좋습니다.

병합 도구를 사용하여 필드를 재정렬하는 Python 스크립트는 다음과 같습니다 ( 여기 에서 복사 ).

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

용법:

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

도구 대화 상자를 통해이를 수행하는 정확한 단계를 나열 할 수 있습니까? 내 10.3.1 테스트에서 지금은 필드 매핑 패널에서 재정렬을 허용하지 않는 것처럼 보입니다. 또한이 답변은 쿼리 테이블 만들기 도구의 사용과 관련이 있기 때문에 다른 질문 ( gis.stackexchange.com/questions/32119/… ) 에 더 잘 배치 될 것이라고 생각합니다 .
PolyGeo

네, 당신의 질문 제목에서 그것을 발견했습니다. 그러나이 게시물은 가장 쉬운 방법으로 필드를 다시 정렬하기 만하면되는 미래의 방문자에게 유리할 수 있습니다.
Farid Cheraghi

필드를 제거한 후 대화 상자에서 다시 추가하면 순서를 바꿀 수 있습니다. 그러나 완벽한 접근 방식은 아닙니다.
Farid Cheraghi

1
나는 이것이 가장 좋은 답변이라고 생각되는 다른 질문에 대해이 답변에 투표를했지만 "중복 답변"이기 때문에 여기에서 묻는 질문에 대한 직접적인 답변이 아니기 때문에 두 번째 투표가 적절하지 않다고 생각합니다.
PolyGeo

@FaridCher, 코드를 공유해 주셔서 감사합니다. 파이썬에서 필드를 정말 빨리 재정렬해야했고 훌륭하게 작동했습니다. 대박.
Alex Tereshenkov

1

이것을 읽은 후 테이블의 속성 순서를 변경하고 필드의 순서를 재정렬하려고 시도하면서 ArcMap 10,1 에서이 간단한 솔루션을 발견했습니다 ...

  1. 목차에서 변경하려는 기능을 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 속성을 클릭하십시오
  3. 필드 탭을 클릭하십시오
  4. 필드를 클릭하십시오
  5. "위로 이동"또는 "아래로 이동"화살표를 클릭하십시오
  6. 적용, 확인

여기에 이미지 설명을 입력하십시오


3
잘 해봐 그러나 불행히도 이것은지도 문서에 추가 한 레이어에만 적용됩니다. 피처 클래스에는 여전히 정의 된 순서대로 필드가 있습니다. 기술적으로 말해서 데이터베이스에는 필드의 "순서"가 없지만, 최종 사용자는 맵 클래스에 피처 클래스를 추가하고 속성 테이블을 열 때 주문 관련 필드를 볼 수 있습니다.
Alex Tereshenkov

1

비교적 강력한 방식으로 모델 빌더 내에서 완전히 수행하는 방법이 있습니다. 설정하는 것은 약간 지루하지만 적어도 더 큰 모델 작성기 분석의 일부로 삽입 할 수 있습니다.

디졸브 도구- 디졸브 필드로서의 ObjectID . 나머지 (통계) 필드를 원하는 순서로 추가하고 통계 유형 드롭 다운에서 (첫 번째) 옵션을 선택하십시오. 아래 예에서 필드 목록에서 SaltMarsh_Pct 필드를 아래로 이동하여 위치 6으로 이동했습니다.

재정렬 된 필드로 모델 분해

나는 일반적으로 결과를 복사 한 다음 각 필드의 이름을 바꿉니다.

필드 변경 도구를 사용하여 각 필드의 이름을 바꿉니다.

필드 이름을 원래대로 다시 변경 (FIRST 제거)

모델에서 모두 다음과 같이 보입니다.

재정렬 할 모델 예

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