QGIS에서 내보낼 필드를 지정하는 방법은 무엇입니까?


9

QGIS 2.0.1을 사용하고 있으며 ESRI가 아닌 MS SQL Server 공간적으로 활성화 된 데이터베이스에 연결되어 있습니다. 레이어에 연결하여 TOC에 올바르게로드 할 수 있습니다. 가시성을 위해 중요하지 않은 여러 필드를 숨겼습니다.

이제 해당 데이터를 다른 데이터 형식으로 내보내려고합니다 (이 예제에서는 shapefile을 사용합니다). 레이어를 마우스 오른쪽 버튼으로 클릭하고 "다른 이름으로 저장"을 선택하고 출력 파일을 정의하면 다음 오류가 발생합니다.

벡터 파일로 내보내기에 실패했습니다. 오류 : GlobalID 필드에 지원되지 않는 유형

참고 1 : 대화 상자에서 "속성 만들기"를 선택하면 오류없이 모양 파일이 만들어집니다.

참고 2 : ArcGIS에는이 문제가 없으며 GUID 필드를 "TEXT"형식으로 변환하기 만합니다.

테이블을 살펴보면 숨겨둔 필드 중 하나는 SQL 유형 < uniqueidentifier > 의 GUID이며 , 이는 아마도 범인입니다. 이 문제를 해결하기 위해 "숨겨진"필드를 만들었습니다. 필드가 숨겨져 있기 때문에 QGIS는이 필드를 내보내려고 시도하지 않았지만 실제로는 그렇지 않은 것으로 나타났습니다.

QGIS에서 내보내려는 필드를 정의 할 수 있습니까?

QGIS가 "표시"필드 만 내보낼 수 있습니까? 아니면 QGIS에서 이것을 수행하는 또 다른 방법이 있습니까 (ogr2ogr 쿼리를 통해 필드를 정의 할 수 있습니까)? 내보낼 필드를 정의 할 수없는 경우 QGIS의 단점처럼 보입니다.

업데이트 : 샘플 shapefile을 사용하여 테스트를 수행하여 출력 필드를 제한 할 수 있는지 확인했습니다. 다음 ogr2ogr 명령 행은 "name"을 제외한 모든 필드를 제거하고 제거했습니다.

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

그러나 QGIS를 사용하고 추가 :

-sql "select name from city"

"다른 이름으로 저장"대화 상자의 "레이어"섹션에 단일 필드 만있는 shapefile이 생성되지 않았습니다. 따라서 파일 출력을 조작하여 몇 가지 필드 만 표시하는 방법을 실제로 알지 못합니다. 도움을 주시면 감사하겠습니다.


ogr2ogr이 수행 할 수있는 경우 QGIS는 백그라운드에서 실행되는 도구이기 때문에 QGIS가 수행 할 수 있습니다. 불행히도, 테스트 할 SQL Server DB가 없습니다 ...
어두움

권리. 따라서 -sql "select <fields> from <table>""다른 이름으로 저장"대화 상자의 "Layer"부분에 <fields>에서 GlobalID 필드를 제외 시키려고 시도 했지만 동일한 오류가 계속 발생했습니다. 이 코드 블록을 잘못 사용 했습니까, 아니면 버그입니까?
RyanKDalton

이 대답은 -sql gis.stackexchange.com/questions/30691/… 대신 -select를 제안합니다 ... ... 레이어가 아닌 데이터 소스 섹션으로 이동한다고 생각합니다.
underdark

귀하의 제안 중 하나에 대해 운이 좋지 않습니다. "OGR creation options"의 "Layer"및 "Data Source"필드에서 -select 및 -sql 옵션을 여러 번 조합하여 시도했습니다. (확실히, 나는 할 수 없습니다 필드의 하위 집합을 내보낼 필요가있는 첫 번째 항목
RyanKDalton

개발자와 확인하는 것이 좋습니다. 버그 일 수 있습니다.
underdark

답변:


1

ogr2ogr과 함께 명령 줄에서 작동한다면, 그것을 사용하는 것이 가장 좋은 해결책이라고 생각합니다. 간단한 bat 파일을 작성하여 MSSQL 데이터베이스에서 shapefile을 작성할 수 있습니다. 분명히 데이터를 편집하고 서버에 다시 저장할 수 없습니다.

QGIS에는 데이터 소스 및 레이어 입력 상자가 있지만 ogr2ogr의 -dsco 및 -lco 매개 변수에만 해당됩니다. OGR shapefile 드라이버에는 필요한 dsco 또는 lco가 없습니다.

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

또는 필요에 따라 SQL SELECT 명령을 사용하여 서버에서 데이터를 요청하는 python 플러그인을 작성할 수도 있습니다. 이것은 심지어 데이터 편집을 가능하게합니다.


지금까지 이것은 가장 실현 가능한 아이디어처럼 보입니다. 자신의 ogr2ogr 구문을 롤링하기 위해 QGIS 사용자 인터페이스에서 ogr2ogr 명령 행을 직접 호출하는 방법이 있습니까?
RyanKDalton

직접 아닙니다. 그러나 gdalwarp 터미널을 하이재킹하여 ogr2ogr 명령을 입력 할 수 있습니다. 레이어가 생성되지 않았다는 오류가 발생하지만 파일 시스템에 있습니다. 파일이 이미 존재하면 어떻게되는지 잘 모르므로 추가 -overwrite를 사용하는 것이 좋습니다. 파일의 전체 경로 이름을 사용하는 것이 좋습니다.
AndreJ

또는 MSSQL과 QGIS 간의 중재자로 GDAL VRT 가상 파일을 사용해 보셨습니까?
AndreJ

나는 래스터를 다루는 데 GDAL이 아닌가? 포인트 벡터 레이어로 작업하고 있습니다. 그래도 "가상 테이블"이라는 개념은 중간에 있습니다. QGIS 2에 쓸 수있는 인 메모리 레이어가 없습니까?
RyanKDalton

1
GDAL ogrvrt 드라이버 : gdal.org/ogr/drv_vrt.html도 있습니다. 그러나 나는 이것이 다른 질문에 더 잘 맞아야한다고 생각합니다.
AndreJ

0

TOC에서 레이어의 속성 테이블과 GlobalID 필드가 있는지 확인하는 것이 좋습니다. 편집 모드로 전환하고 내보내는 동안 문제를 일으키는 열을 제거하고 창을 닫습니다. 그런 다음 shapefile 또는 원하는 출력 형식으로 저장하십시오. 이게 도움이 되길 바란다.


1
SQL Server 테이블에서 필드를 삭제하는 것이 좋은지 확실하지 않습니다. 여전히 서버에 필요할 수 있습니다.
AndreJ

QGIS TOC Layer에서 속성 열을 삭제하면 업데이트 된 구조가 QGIS 버퍼에 저장되고 파일을 다른 형식으로 내보낼 수 있습니다. 당신이 수출을 완료하면 (당신이 삭제 한 것) 계층에 대한 변경을 저장하지 마십시오
Farhat의 압바스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.