QGIS에서 동시에 여러 필드를 기준으로 정렬 하시겠습니까?


17

QGIS에서 여러 필드를 동시에 정렬 할 수 있습니까?

예를 들어, 상태 이름별로 테이블을 정렬 한 다음 각 상태에서 카운티 이름으로 정렬하고 싶습니다.

이것은 ArcMap에서 사용 가능한 고급 정렬 옵션과 동일합니다.

답변:


4

실제로 매우 간단한 트릭이 있습니다. "A"필드를 기준으로 정렬 한 다음 "A"내의 "B"필드를 기준으로 정렬한다고 가정합니다. 속성 테이블에서 "B"필드의 헤더를 먼저 왼쪽 클릭하십시오 (오름차순 정렬을 위해 한 번 클릭하고 내림차순으로 두 번째 클릭). 그런 다음 "A"필드의 헤더를 마우스 왼쪽 단추로 클릭하십시오 (ASC의 경우 한 번, DESC의 경우 두 번째). 이 마지막 동작은 "A"필드를 정렬하는 반면 "A"필드의 정렬은 그대로 유지합니다. 3 개의 필드로 시도해 보았고 작동합니다 (지루해졌습니다). QGIS 3.6.3-Noosa를 사용하고 있습니다.


우수한! 또한 3 개의 필드 (주, 카운티, 도시)로 테스트했으며 오름차순 또는 내림차순으로 완벽하게 작동했습니다. 3.8.3.
Stu Smith

8

정렬 및 번호 플러그인을 사용할 수 있습니다 . 속성 테이블을 최대 3 개의 필드로 정렬 한 다음 정렬 된 피처의 순서를 포함하는 추가 필드를 만듭니다.

면책 조항 : 나는 플러그인의 저자입니다.


잘하면 그것은 작동합니다. 150k 레코드 데이터 세트에 설정했지만 여전히 10 분 후에 진행됩니다. 이것은 새로운 열의 정렬을 하드 코딩하여 정렬 할 수 있습니다-열을 추가하지 않는 Excel 또는 ArcMap에서 작동하는 방법이 있습니까? desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…를
GeorgeC

1
또한 그것이 효과가 있기를 바랍니다. 그런 큰 데이터 세트에서 테스트하지 않았습니다. ArcMap과 같이 단순히 표시 순서를 변경할 수는 없다고 생각합니다. QGIS API는이를위한 방법을 제공하지 않습니다. 이것이 바로 해결 방법으로 번호 매기기 필드를 추가하기로 선택한 이유입니다.
ArMoraer

여전히 진행 중입니다-ArcMap은 약 30 년대에 그것을했습니다. 오 잘 솔루션에 감사드립니다.-다른 제안이 있는지 24 시간 동안 열어 두겠습니다.
GeorgeC

좋아요, 피드백 감사합니다. 플러그인은 파이썬의 sort()기능 에 직접 의존합니다. 왜 그렇게 느린 지 궁금합니다. 향후 버전에서 프로세스 속도를 높이는 몇 가지 트릭을 찾으려고 노력할 것입니다.
ArMoraer 12

Nice Tool ... 저에게 많은 작업을 저장했습니다 ... 대단히 감사합니다
K_Man

7

결과를 영구적으로 저장해도 괜찮다면 GDAL로 shapefile을 정렬 할 수 있습니다

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp

백만 개의 다각형을 가진 shapefile로 3 분도 채 걸리지 않았습니다.


1
감사하지만 여러 데이터 세트를 생성하므로 QGIS 자체에서 방법을 원했기 때문에 영구적 인 작업을 원하지 않습니다.
GeorgeC

2
그런 다음 shapefile을 Spatialite로 변환합니다. DB Manager를 사용하면 SQL 조회를 빌드하고 실행할 수 있습니다. 나중에 필요할 때 자주 사용하는 쿼리를 저장할 수도 있습니다.
user30184

5

QGIS의 DB 관리자 플러그인에는 이제 QGIS 프로젝트에로드 된 shapefile에 대해 SQL 명령을 작성할 수있는 '가상 레이어'노드가 있습니다.

이제이 기능이 있으므로 여러 필드를 기준으로 정렬하는 SQL 논리가 asc (오름차순), desc (내림차순)를 사용하여 ORDER BY 문에 있으며 여러 열을 기준으로 정렬하기 위해 문자열을 함께 묶을 수 있습니다.

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

추가 보너스는 더 많은 SQL을 배우므로 shapefile이 아플 때 PostGIS에 가장 많이 뛰어들 것입니다.


감사합니다-이 사용 사례에 대한 훌륭한 솔루션이지만 데이터 형식을 다른 것으로 변경하고 싶지 않습니다.
GeorgeC

2
이 솔루션에 대해 .SHP로 작업 할 수 있습니다. 데이터 형식은 변경되지 않습니다. 시도해보세요 ...
DPSSpatial 12

1
@GeorgeC 당신은 이것을 시도 했습니까?
DPSSpatial

5

이제 버전 3.2 이상에서는 플러그인이나 데이터베이스 별 작업없이이 작업을 수행 할 수 있습니다. 여러 열을 기준으로 정렬하려면

  1. 속성 테이블 열 헤더를 마우스 오른쪽 버튼으로 클릭하고 "정렬 ..."을 선택하십시오.
  2. concat()정렬하려는 필드와 함께 적절한 순서 (예 :)로 함수 를 추가하십시오 concat("column1", "column2"). 출력 미리보기가 코드 아래에 표시되어야합니다.
  3. 열 정렬 방향을 구성하려면 하단의 "오름차순 정렬"확인란을 선택하거나 선택 취소하십시오.
  4. 확인을 클릭하고 정렬을 확인하십시오.

이 기능은 문제 # 1137을 통해 추가 되었으며 최신 (개발) 버전의 사용자 설명서 에서 다루었습니다 .


1
QGIS 3.6으로 성공적으로 테스트되었습니다.
Mr. Che

문자열과 고정 길이가 아닌 정수를 연결 했으므로 정수를 고정 길이 문자열로 0으로 채우는 해결 방법을 사용했습니다.concat("col1", right( ('000' || tostring( "col2" )), 4))
NettaB

2

글쎄, 지금은 2018이므로 아직 답변되지 않았다고 믿을 수 없습니다.

  1. 속성 테이블보기를 열고 열을 마우스 오른쪽 단추로 클릭 한 후 정렬 ... 을 선택하십시오 .

  2. 대화 상자 창 속성 테이블 정렬 순서 구성 이 이제 전체 표현식 편집기에서도 열립니다.

  3. 원하는 열과 함께 COALESCE 함수를 사용하십시오. 예를 들어 테이블을 3 열로 정렬합니다 (먼저 ID, VERSION, fid)

coalesce("ID","VERSION","fid" )

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

확인을 클릭하면 테이블이 정렬됩니다


불행히도, 연합은 나를 위해 작동하지 않았습니다. 두 개의 정수 열 (모두 숫자와 공백 값의 혼합을 포함)이있는 shapefile 속성 테이블을 사용한 테스트에서 : 1) 오름차순 정렬 단추를 선택하지 않은 상태에서 결과는 첫 번째 열을 올바르게 정렬 (내림차순)하지만 두 번째 열은 잘못 정렬되었습니다. 첫 번째 열의 각 값에 대해 오름차순. 2) 정렬 오름차순 버튼을 선택한 상태에서 결과는 의미가없는 임의의 결과였습니다.
Stu Smith

1
"||"로 필드를 연결할 수 있습니다 operator, coalesce는 정렬에 유효하지 않은 NULL이 아닌 첫 번째 값을 반환합니다. 아마 당신은 1 11 전에해야 할 몇 가지 서식을 사용한다
졸탄

1

당신은 할 수 없습니다 (적어도 지금은 아닙니다). 죄송합니다!

QGIS 설명서를 참조하여 가장 마지막 줄로 스크롤 하십시오 .

불쾌한 해결 방법은 Shapefile의 DBF를 Excel로 가져 오는 것입니다. 거기에 정렬하고 결과를 저장하십시오. 또는 정렬 기능이 뛰어난 PostGIS 또는 SpatialLite로 Shapefile을 가져옵니다. 기본적으로 고급 정렬을 위해서는 QGIS를 우회해야합니다.


2
현재 가능하지 않다는 정확한 메모는 +1이지만 Excel에서 DBF를 망칠 것을 제안하는 경우 -1
짙은 색

나는 그것이 불쾌하다고 말했다 :)
MappaGnosis

PostGIS 및 SpatiaLite에 대해 언급했습니다. QGIS 내에서 OP가 요청한 작업을 수행하는 방법과 db-plugin을 사용하는 방법의 예를 보여 주실 수 있습니까?
steko

0

@Sylvester Sneekly가 제안한대로 데이터가 PosGIS 또는 SpatialLite와 같은 RDBMS에로드되는 경우 테이블 형식 데이터를 미리 정렬하는 RDBMS에서 데이터베이스 뷰 를 생성 한 다음 미리 정렬 된 뷰를 레이어로 QGIS에로드하는 것을 고려할 수 있습니다.

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