데이터의 필드를 영구적으로 재정렬 (shp, gdb)


24

영구적으로 재정렬하려는 필드가있는 shapefile 또는 지오 데이터베이스 피처 클래스가있는 경우이 작업을 빠르게 수행하는 데 도움이되는 도구, 스크립트 또는 유틸리티가 있습니까?

일반적으로 새 필드를 만든 다음 이전 값으로 채우고 이전 필드를 삭제해야한다는 것을 알고 있습니다. 나는 거기에 이미 도움이 될만한 것들이 있기를 바라고 있습니다. FME 나 다른 ETL 도구를 사용할 수 없다고 가정 할 때 다음으로 가장 좋은 제안은 무엇입니까?

이것은 뷰 레벨 변경 (예 : 필드를 순서대로 드래그 / 드롭)하는 것이 아니라 새 모양 파일 또는 피쳐 클래스에 기록합니다. 감사.


믿기 ​​힘들지만이 방법을 찾을 수 없습니다. 필드를 다시 주문해야하는 유스 케이스는 무엇입니까? ArcMap에서 레이어 속성의 필드 탭에서 필드 순서를 바꾸는 것이 해결책이 아닙니까?
Derek Swingley

2
필드의 재정렬은 데이터가 ArcMap에서 사용되지 않지만 1) shapefile을 사용하고 2) 클라이언트 측에서 재정렬을 허용하지 않는 3) 클라이언트가 키 속성은 "식별"트리의 맨 위에 표시됩니다.
RyanDalton

방금 이전에 삭제 한 답변을 수정했습니다. 바라건대 당신은 커맨드 라인을 두려워하지 않습니다;).
Derek Swingley


2
@ SaultDon- 이것은 같은 질문이 아닙니다. RECORDS (행)를 정렬하려는 질문을 참조했지만 FIELDS (열)를 정렬하고 싶습니다.
RyanDalton

답변:


13

도구의 필드 맵 섹션에서 필드를 재정렬 하여 피쳐 클래스에서 피쳐 클래스 로이 작업을 수행 할 수 있습니다 .

편집 : FC2FC는이 작업을 수행하지 않지만 구조를 수행합니다.

방금 ogr2ogr이이 작업을 수행 할 수 있음을 확인했습니다. -select 스위치에서 필드 이름 순서를 지정하십시오. 예를 들어, "Name"과 "FolderPath"라는 두 개의 필드가있는 shapefile이있는 경우 (순서대로) "FolderPath"가있는 새로운 shapefile을 먼저 원합니다.

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

2
내가 원했던 것처럼 사용자 친화적 인 옵션은 아니지만 분명히 트릭을 수행합니다. 입력을 빌드하는 데 도움이되는 ArcGIS python 스크립트를 작성했으며 사용자는 -select "field1, field2 등"옵션 만 포함하면됩니다. resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…
RyanDalton

도메인이있는 SDE에 기능 클래스가 있습니다. 연결된 도메인이 유지됩니까?
MjonesGEO

@joebob 아니. AFAIK, ogr은 SDE GDB의 데이터 세트를 지원하지 않으며 도메인도 지원하지 않습니다.
Derek Swingley

고맙게도 방금 XRay를 사용했으며 SDE에서 도메인을 유지하면서 필드를 재정렬하거나 바꿀 수 있습니다.
MjonesGEO

7

ET GeoWizards의 도구는이 작업을 수행 할 것이며, 무료 버전은 기능의 수에 어떤 제한없이 그것을 할 것 같습니다.


별명을 유지하지만 슬프게도 유지하지 않습니다.
Howeitzer

7

QGIS "테이블 관리자"플러그인은 이제 명령 줄없이이 작업을 쉽게 수행 할 수 있습니다.


6

QGIS에서 이제 처리 도구 상자 (Ctl + Alt + T)를 사용하고 QGIS 지리 알고리즘> 벡터 테이블 도구> 리 팩터 필드로 이동할 수 있습니다.

여기에는 테이블 구조를 편집 할 수있는 모든 도구가 있습니다.

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


4

X-Ray arcmap add in은 Geodatabes 형식의 필드를 재정렬하는 도구를 가지고 있습니다엑스레이 재정렬 필드 도구는 여기


이것은 매우 잘 작동합니다. SDE를 다시 주문하면 도메인을 도메인에 보관할 수도 있습니다. 좋은 제안 !!
MjonesGEO

3

참고로 MapInfo는 기본적으로 사용할 수 있습니다. DBF를 열고 필드를 영구적으로 재정렬하십시오. http://www.dbf-editor.com 도 마찬가지입니다 ($ 40). 다른 DBF 편집기에서도 가능합니다.


이 줄에서 infolib 는 .dbf 파일 형식의 제한 사항에 따라 생활하려는 한 아마 작동합니다 (ascii (csv)로 변환, 다시 정렬하거나 정보 또는 dbf로 다시 변환).
matt wilkie

당신은 CSV 형식의 한계에 살고 있습니까? DBF가이 질문의 시작점입니다.
Uffe Kousgaard 2016 년

필자는 csv에 필드 이름 길이나 레코드 값 길이에 대한 제한이 없으며 시작점이 파일 gdb라고 생각하면서 dbf 제한을 의미했지만 Q를 다시 읽으면 제목에 "shp"가 언급되어 있습니다. 따라서 ;-) 주변의 한계
matt wilkie

3

비슷한 문제가 있었고 QGIS가 이미있는 경우 데이터 필드를 영구적으로 재정렬하는 가장 빠른 방법은 이전에 제안 된대로 '테이블 관리자'플러그인을 사용하는 것입니다.

플러그인 설치가 간단하고 아래 페이지에 설명 된대로 사용자에게 친숙합니다.

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

특정 순서로 속성을 이동하고 필드 이름을 바꾸고 새 필드를 삽입하고 복제 할 수 있습니다. 또한 원본 파일을 저장하거나 이름을 바꾸고 원본과 다르게 저장할 수 있습니다.

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

이것은 속성 테이블 관리 문제를 빠르고 편리하게 해결했으며 특히 많은 속성을 가진 파일의 경우에 권장됩니다.


3

가장 좋은 방법은 필드 매핑을 사용하는 것입니다. 몇 년 동안 ESRI 소프트웨어의이 기능으로 어려움을 겪었지만 마침내이 솔루션에 만족하고 있습니다. 기본적으로 arcpy.FieldMappings를 사용하여 필드를 영구적으로 재정렬하여 피처 클래스의 사본을 만들 수 있습니다 . 모든 데이터가 전달됩니다. 스크립트가 완료되면 기존 기능 클래스의 이름을 myFeatureClass_old로 바꾸고 새 기능 클래스를 myFeatureClass로 바꾸십시오!

스크립트는 다음과 같습니다. 매우 간단합니다.

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

피쳐 클래스 대 피쳐 클래스는 이제 GP 도구 필드 맵핑 섹션을 사용하여 10.5에서이를 수행 할 수 있습니다.

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


2

MakeQueryTable을 사용하면 테이블 또는 FC에 대한 필드 순서를 정의 할 수 있습니다 (Geodatabase 만 해당). 필드를 지정하는 순서는 출력 순서입니다. 이 도구를 사용하기가 어렵습니다. YMMV

Arctoolbox, 데이터 관리 도구, 레이어 및 테이블 뷰, 쿼리 테이블 만들기


2

피쳐 클래스를 빈 개인 지오 데이터베이스로 내보내고 (끌어 놓기가 가장 빠름) Access에서 .mdb를 열고 필드를 다시 정렬하십시오. 디자인보기 한 후 저장 한 다음 ArcMap / Catalog를 형상 또는 파일 지오 데이터베이스로 다시 복사하십시오.

동일한 방법으로 필드 이름을 바꿀 수 있습니다.

그러나 사본에서만 작업하면 모든 것을 망칠 수 있습니다. Karey Jack이 다른 답변에서 언급 한 것처럼 Esri 는 직접 .mdb 액세스를 권장하지 않습니다 . 안전을 위해으로 시작하는 테이블 GDB_과으로 끝나는 테이블을 모두 무시하십시오 _Shape_Index.


1

OGR2OGR을 사용해보십시오. SQL 쿼리를 전달하고 원하는 순서대로 필드를 넣을 수 있습니다.

ogr2ogr outdataset indataset -sql "SELECT src_field1 AS dst_field1, src_field2 AS dst_field2 FROM 소스 레이어"

방금 이것을 테스트했는데 정상적으로 작동합니다!

참고로 OGR을 설치하는 가장 쉬운 방법은 FWTools를 사용하는 것 입니다.


1

MS Access 에서 .mdb 파일을 열고 '디자인보기' 에서 끌어서 놓기를 사용하여 필드를 다시 정렬

ESRI는 Access ESRI 링크 에서 데이터베이스 편집을 권장하지 않지만


2
우리 사이트, 케이 리에 오신 것을 환영합니다! Matt Wilkie가 18 개월 전에이 스레드에서 제공 한 것과 같은 대답 입니까 ( gis.stackexchange.com/a/5879 )?
whuber

0

나는 이것에 대해 파티에 약간 늦었지만 ESRI Geodatabase Diagrammer를 언급 한 사람이 아무도 없다는 것에 놀랐습니다 .

지리 데이터베이스 및 파일의 XML 구조를 편집하기 위해 ESRI에서 제공하는 리소스입니다. 내가 염려하는 한 디자인이 완벽 해야하는 곳 (장기 프로젝트)을 수행하는 것이 중요합니다. 간단한 실수를 한 후에 파일을 계속해서 다시 만들지 않아도됩니다.


1
이것이 데이터베이스 재구성이 아니라 데이터 를 내보내는 데 필요하다는 의견 (질문 자체에 대한)을 보셨습니까 ?
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.