PostGIS에 큰 래스터를 저장하고 QGIS에 시각화하여 성능 저하


23

내 질문은 PostgreSQL, PostGIS, QGIS 및 GDAL과 같은 여러 소프트웨어 도구의 사용 및 성능에 관한 것입니다.

저는 무료 오픈 소스 GIS 생태계와 Linux 로의 다양 화에 관심이있는 오랜 ArcGIS, Python 및 R 사용자입니다. 최근 PostgreSQL (9.4 버전) 및 PostGIS (2.1 버전)와 함께 QGIS (버전 2.8)를 사용하는 데 관심이 많았으며 Windows 8.1 x64 (컴퓨터 사양 요약 : ThinkPad) 컴퓨터에 소프트웨어를 설치했습니다. 2.1GHz 코어 2, 8GB RAM 및 240GB SSD가 장착 된 X200). 공간 데이터 (100GB 상당)를 관리하는 방법을 배우면이 컴퓨터에서 Ubuntu를 실행하고 싶습니다.

지금은 쉐이프 파일과 래스터를 안정적으로 저장하고 검색하려고합니다. 지금까지 쉐이프 파일을 PostGIS에로드하는 데 성공했지만 래스터는 더 문제가 있습니다. 작은 geoTIFF 및 GRID 파일의 단일 및 일괄 가져 오기를 성공적으로 완료했지만 더 큰 래스터 (예 : 디스크에서 크기가 15619x14655 셀 IMG 또는 870MB 인 TIFF 파일)를 PostGIS에로드하는 데 시간이 오래 걸립니다. 다음 매개 변수를 사용하여 타일로 공간 인덱스를 작성하고 래스터를로드하도록 raster2pgsql 도구를 읽고 구성했습니다.

raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres

가져 오기 성능은 여전히 ​​매우 좋지 않으며 하드웨어는 문제가되지 않습니다. QGIS에서 PostGIS 래스터의 시각화는 더 나빠져서 작은 래스터를 천천히 또는 최대로 천천히로드합니다. 내가 언급 한 것과 같은 큰 래스터는 QGIS에서 시각화 할 수 없습니다. 문서 및 포럼 토론에서이 단점은 QGIS 자체가 아니라 GDAL의 PostGIS 래스터 드라이버 때문인 것으로 보입니다. 포럼 토론에서이 문제를 간략하게 언급하고 일부는 래스터를 PostGIS에 저장해서는 안된다고 제안합니다 (래스터를 원활하게 처리하지 않는 공간 데이터베이스의 요점은 무엇입니까?). 그러나 저는 ESRI의 파일 지오 데이터베이스를 사용하여 매우 큰 (~ 70GB) 래스터를 빠르고 쉽게 저장, 시각화 및 분석하고 ArcGIS 10.1은 이러한 일상적인 작업으로 인해 정지되거나 느려지지 않습니다.

여기에 내가 놓친 것이 있습니까? 아직 해결하지 못한 병목 현상이 있습니까? PostGIS의 성능 이점을 실현하기 위해 PostgreSQL을 조정해야합니까? 사냥하고 컴파일 해야하는 GDAL 버전이 누락 되었습니까? 모양 파일 및 래스터의 QGIS에서 PostGIS 성능 및 시각화를 어떻게 개선합니까? Linux 터미널을 통해 포괄적이고 빠른 공간 데이터 관리의 영광을 어떻게 누릴 수 있습니까? 이 문제에 대한 도움을 환영합니다!


나는 Duncan Golicher가이 가이드를 따랐다 : https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/

원래 자동 설정으로 타일을 사용하고 있었지만 타일링을 행당 100x100 셀로 재설정 한 다음 가이드에 표시된대로 피라미드를 포함 시켰습니다.

raster2pgsql -s 3161 -d -C -I -M -l 4 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres

좋은 시간에 870MB IMG 래스터를 성공적으로 가져 와서 응용 프로그램 속도를 늦추거나 충돌시키지 않고 QGIS에 표시 할 수있었습니다. 렌더링 시간이 예상만큼 빠르지는 않지만 허용됩니다. 제대로 사용하기 위해 -l 매개 변수에 대해 더 읽어 볼 것입니다.

또한 dem.img 파일을 dem100 테이블로 가져올 때 "o_4_dem100"이라는 다른 래스터 테이블이 만들어졌습니다. QGIS에서 레이어로 가져올 때 201에서 524 사이의 값 범위를 갖는 반면 dem100 레이어의 범위는 36에서 524 사이입니다.이 추가 테이블이 더 좁은 피라미드 테이블이라고 가정합니다. 더 낮은 해상도로 집계 된 결과 범위?


부적절한 하드웨어가 문제라고 생각하지 않습니다. 지금까지 내가 찾은 것에 대한 간략한 요약입니다.

GDAL의 PostGIS 래스터 드라이버에는 과거의 성능 문제 가있었습니다 ( 여기 참조 ). 이러한 문제가 2012 년에 언급되었지만 QGIS 2.8에서 발견 된 GDAL 1.11.2에 여전히이 문제가 있는지 궁금합니다. 래스터 시각화 및 스토리지에 QGIS 및 PostGIS를 사용하는 다른 업체가 있습니까?

가능한 관련 메모에서, ~ 4.7m 레코드 테이블을 사용하여 QGIS에서 PostGIS 속성 테이블을 열성능 문제가 발생했습니다 . 해당 스레드에서 몇 가지 제안을 한 후 문제를 해결하지 않고 결국 QGIS에 버그 보고서를 제출하여 결국 닫히고 다음과 유사한 버그 보고서에 연결했습니다 . 버그 리포트가 닫혀 있지만 수정되지 않은 것 같습니다 ...

지금까지 나의 노력을 요약하면 다음과 같습니다.

  • 공간 데이터에 맞게 PostgreSQL 서버를 최적화했습니다.
  • 지오메트리 테이블에 대한 공간 인덱스를 작성하고 VACUUM을 수행했습니다.
  • 큰 속성 테이블 (~ 4.7m 레코드)을 여는 QGIS 동작은 즉각적인보기를 위해 서브 세트를 리턴하지 않고 모든 레코드를 읽으려고 합니다. 이로 인해 성능이 저하됩니다.
  • 큰 PostGIS 지오메트리 테이블 렌더링 성능 에는 문제 가 없는 것 같습니다.

  • raster2pgsql을 사용하면 PostGIS에서 래스터를 색인화하고 바둑판 식으로 배열하고 피라미드가있는 래스터 테이블로 가져 왔습니다.

  • 합리적인 크기의 래스터는 PostGIS로 가져 오기가 여전히 매우 느리며 QGIS에서 열거 나 돌리지 않아도됩니다.

큰 래스터를 가져 오거나 PostGIS로 큰 속성 테이블을 열 때 raster2pgsql 및 qgis-bin의 메모리 소비가 1GB를 초과한다는 점도 주목할 가치가 있습니다. @Michael과 @Paul이 초기 질문에 대한 답변으로 언급했듯이 PostGIS는 래스터 저장에 많은 이점을 가져다 줄 의도가 아닙니다. 그러나 그 시점에서 특히 ESRI fileGDB가 래스터 속성, 모자이크 데이터 세트 및 지리 데이터베이스에 의해 촉진되는 기타 래스터 작업을 활성화 할 때 GIS 요구에 대해 QGIS + PostGIS를 실행하는 이유에 대해 질문합니다. 어쩌면 내가 실제로 누락되었거나 QGIS이고 PostGIS가 내 GIS 요구를 충족시키지 못할 수도 있습니다. 나는 후자가 믿기 어렵다는 것을 안다.


래스터 PostGIS에 있어야 합니까 ? 이것으로 얻을 수있는 이점 / 추가 기능은 무엇입니까? PostGis 벡터가 수용 가능하고 여러 사용자 편집 기능을 제공했지만 PostGis 래스터는 파일 기반 (서버 저장) 래스터에 비해 실질적인 이점이 없었습니다. 그래도 좋은 질문입니다. ... 내 평가에서 놓친 몇 가지 이점이 있다는 것을 확실히 가능하다
마이클 스팀슨

PostGIS 래스터를 사용하면 래스터 / 벡터 작업의 성능이 향상 될뿐만 아니라 래스터 계산 속도가 빨라졌습니다. 이는 공간 DB의 장점에 더하여 안정성, 접근성, 백업 기능,보다 컴팩트 한 스토리지 등입니다. 어쨌든 파일 / 타일 방식은 검색 기능, 사전 구축 된 피라미드, 타일링 및 래스터 사용 및 시각화 방법을 개선하는 기타 기능
mbcaradima 2016 년

PostGIS 래스터가 래스터 계산에서 더 빠르다는 지표는 없었습니다. 240GB SSD (비용 / 노력의 일부로 RAID보다 빠른 BTW, 좋은 선택 BTW)를 사용하는 경우 래스터로 매우 빠르게 채울 것입니다 ... 8 비트 용 ECW / JP2 또는 LZW / Deflate 압축 기능이있는 GeoTIFF는 대부분의 해당 상자, 사전 제작 피라미드, 타일링 (VRT를 통해), 파일로 백업 등을 선택합니다. 유일한 이점은 검색 기능입니다. 나는 주제에서 약간 벗어난 것을 알고 있지만 PostGIS 래스터가 기대 한 것을 수행하지 않으면 왜 파일 래스터를 표시하지 않습니까?
Michael Stimson 2016 년

3
PostGIS 래스터가 다른 보다 빠르다고 누가 말했 습니까? 더 편리하고 (유용한 SQL 액세스 API) 분석에 유용 할 수 있지만 (동일한 버킷의 래스터 및 벡터) 더 빠릅니다 . 못.
Paul Ramsey

1
PostGIS (PostGIS in Action, 2nd ed)에 관한 책을 연구 중이며 공간 DB에 모양 파일을 저장하면 이점이 래스터로 확장된다고 가정하는 것이 당연한 것처럼 보였습니다. 물론, 서로 다른 데이터 모델을 고려할 때이 가정이 완전히 직관적이라는 것을 알 수 있습니다. 그래도 래스터는 일반적으로 ArcGIS와 함께 지오 데이터베이스에 저장되며 피라미드를 구축하고 지리 정보 처리를 빠르게하고 모자이크를 만들 수 있습니다. 오픈 소스 소프트웨어가 포함 된 워크 플로에서 GIS 사용자는 래스터를 어떻게 다루어야합니까? BTW, 나는 얼굴에 정식으로 펀치 할 것이다.
mbcaradima

답변:


9

QGIS에 큰 래스터를 표시하려면 파일 시스템의 tif 이미지 또는 Postgis에 등록 된 이미지에 피라미드를 만들어야합니다.

파일 시스템 또는 Postgis에서 큰 래스터 간의 QGIS 렌더링 성능 차이는 미미합니다. 사용자는 차이를 느끼지 못할 것입니다. 그러나 만약 당신이 옵션이라면 피라미드를 만들 수 있습니다 -l.

-l 옵션을 사용하지 않고 이미지를 간단히 가져 -l 4 오면 작동하지 않습니다 .

예를 들어를 사용하면 -l 2,4,8,16아래 레이어와 같이 4 단계의 피라미드가 만들어집니다.

-l 2,4,8,16으로 생성 된 피라미드

더 나은 사용자 경험을 원하면와 같이 피라미드 레벨을 더 추가해야합니다 -l 2,4,8,16,32,64,128,256. 이렇게하면 8 단계 피라미드가 만들어집니다.

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

요약하면이 질문에 대한 답은 다음과 같습니다. 옵션 -l을 사용하여 래스터를 가져오고 파일 시스템에서 동일한 래스터에 사용하는 것과 동일한 수의 피라미드 레벨을 사용하십시오.

예를 들면 다음과 같습니다.

raster2pgsql -s 3161 -d -C -I -M -l 2,4,8,16,32,64,128,256 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres

5

PostGIS의 QGIS에서 래스터 렌더링과 똑같은 문제가 있습니다 ( 최근의 질문 참조 ). 게시물이 도움이되고 다음과 같은 향상된 래스터 렌더링이 약간 증가했습니다.

shared_buffers = 5000MB work_mem = 100MB 유지 보수 _work_mem = 100MB

그러나 QGIS에서 PostGIS 래스터의 성능이 좋지 않다는 것에 전적으로 동의합니다. VRT로로드되지만 PostGIS에서 본질적으로 사용할 수없는 608 압축 지오 틱을 처리하고 있습니다. dbase 서버의 성능을 높이려고 노력하지만 그 이상으로 나는 너무 도움이 될 수 없습니다. 또한 조직 내에서 래스터를 제공하기 위해 파일 시스템에 의존해야 할 수도 있습니다.


의견 주셔서 감사합니다, 클리프 변경 사항 중 일부를 적용했으며 주요 성능 개선 사항을보고 할 것입니다. 전반적으로 QGIS 성능은 PostGIS 래스터를 시각화하고 속성 테이블을로드 / 쿼리하는 데 실망합니다. PostGIS의 래스터 성능도 실망 스럽습니다. 파일 지오 데이터베이스에 이러한 문제가 없으므로 무엇이 잘못되었는지 궁금합니다.
mbcaradima

1
내 감정은 정확히 나는 일주일 동안이 일을하려고했지만 단순히 실행할 수 없었습니다. 이제 10 개의 프로세서와 10GB의 램으로 내 VM (Ubuntu Server)을 테스트하고 있습니다. 그래도 여전히 느리다면 다른 일을해야합니다. 또한 렌더링 속도가 느리기 때문에 QGIS의 WMS 레이어를 기본적으로 사용할 수없는 이유에 대해서도 당황했습니다. 우리는 같은 보트에 있기 때문에 더 연결해야합니다.
Cliff

그들이 VRT로 훌륭하게로드되면 왜 거기서 멈추지 않았습니까? 이 위대한 래스터 여행에서 어떤 이득을 기대하고 있습니까?
Paul Ramsey

폴에 대한 나의 대답은 OP가 다음 포스트에서 말한 것과 정확히 같다고 생각한다. "그러나 그 시점에서 특히 ESRI fileGDB가 래스터 속성, 모자이크 데이터 셋을 가능하게 할 때 GIS 요구에 대해 QGIS + PostGIS를 실행하는 이유에 대해 질문합니다. 지오 데이터베이스에 의해 촉진되는 다른 래스터 작업입니다. 따라서 실제로 누락되었거나 QGIS 및 PostGIS가 내 GIS 요구 사항을 충족하지 못할 수 있습니다.
Cliff

1
또한, 내가 수행하는 분석의 약 70 %가 래스터에 관한 것이며 QGIS를 통해 조직에 제공하고자하는 데이터의 약 40 %가 래스터 데이터라고 말합니다. 사용자가 하나의 연결을 설정하고 전체 조직의 데이터베이스에 액세스 할 수 있도록 모든 래스터 및 벡터 데이터를 하나의 데이터베이스에 보관하는 것이 좋습니다. 대신 dbase에 대한 cred와 파일 공유에 대한 cred를 만들어야합니다. 또는 QGIS를 폐기하고 Geoserver를 사용하여 웹 응용 프로그램을 작성하는 것을 진지하게 고려하고 있습니다 (ps : 항상 관심이있는 사람과 협력 할 의사가 있음).
Cliff

4

그것이 당신의 경우인지 확실하지 않지만 -I데이터 추가와 함께 사용해서는 안된다는 것을 알았습니다 -a.

많은 TIF 파일을 DB로 가져오고 -I실제로 인덱스를 다시 만들고 analyse각 파일의 테이블에서 10 배 더 시간이 걸립니다.

-I-p옵션을 사용하여 테이블을 만들 때만 사용해야합니다 .

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