ประสิทธิภาพแย่ด้วยการจัดเก็บแรสเตอร์ขนาดใหญ่ใน PostGIS และการสร้างภาพใน QGIS


23

คำถามของฉันเกี่ยวข้องกับการใช้งานและประสิทธิภาพของเครื่องมือซอฟต์แวร์หลายอย่างที่ใช้ร่วมกันคือ PostgreSQL, PostGIS, QGIS และ GDAL

ฉันเป็นผู้ใช้ ArcGIS, Python และ R มาเป็นเวลานานและมีความสนใจที่จะเปลี่ยนเป็นระบบ GIS โอเพ่นซอร์สและลินุกซ์ฟรี เมื่อเร็ว ๆ นี้ฉันสนใจใช้ QGIS (ver 2.8) ร่วมกับ PostgreSQL (ver 9.4) และ PostGIS (ver 2.1) และฉันได้ติดตั้งซอฟต์แวร์ลงในคอมพิวเตอร์ที่ใช้ Windows 8.1 x64 (รายละเอียดคอมพิวเตอร์โดยย่อ: ThinkPad X200s พร้อมกับ 2.1GHz Core 2, RAM 8GB และ 240GB SSD) เมื่อฉันเรียนรู้วิธีการจัดการข้อมูลเชิงพื้นที่ของฉัน (มูลค่าประมาณ 100GB) ฉันต้องการเรียกใช้ Ubuntu บนเครื่องนี้

ในขณะนี้ฉันแค่พยายามจัดเก็บและดึงไฟล์รูปร่างและแรสเตอร์อย่างน่าเชื่อถือ จนถึงตอนนี้ฉันประสบความสำเร็จในการโหลดรูปร่างเข้าสู่ PostGIS แต่ rasters กำลังพิสูจน์ปัญหาได้มากกว่า ฉันทำการนำเข้าไฟล์ geoTIFF และ GRID ขนาดเล็กและชุดนำเข้าสำเร็จแล้ว แต่มีขนาดใหญ่กว่า (เช่นไฟล์ IMG หรือเซลล์ขนาด 15619x14655 IMG หรือ TIFF ขนาด 870MB บนดิสก์) ใช้เวลาตลอดไปในการโหลดลงใน PostGIS ฉันได้อ่านและกำหนดค่าเครื่องมือ raster2pgsql เพื่อสร้างดัชนีเชิงพื้นที่และโหลด rasters ด้วยกระเบื้องโดยใช้พารามิเตอร์เหล่านี้:

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

ประสิทธิภาพในการนำเข้ายังคงแย่มากและฮาร์ดแวร์ไม่ใช่ปัญหา การมองเห็นภาพของ rasters แบบ PostGIS ใน QGIS ยิ่งแย่ลงการโหลดภาพแรสเตอร์ขนาดเล็กที่ดีที่สุดหรือแช่แข็งอย่างช้าๆ แรสเตอร์ขนาดใหญ่อย่างที่ฉันพูดถึงเป็นไปไม่ได้ที่จะเห็นภาพใน QGIS จากเอกสารและการอภิปรายในฟอรัมข้อบกพร่องนี้ดูเหมือนจะเกิดจากไดรเวอร์แรสเตอร์ PostGIS ของ GDAL ไม่ใช่ QGIS การอภิปรายในฟอรั่มพูดถึงปัญหานี้ในเวลาสั้น ๆ และบางคนถึงกับแนะนำว่าไม่ควรจัดเก็บ rasters ใน PostGIS (อะไรคือจุดสำคัญในฐานข้อมูลเชิงพื้นที่ที่ไม่จัดการ rasters ได้อย่างราบรื่น?) แต่ฉันใช้ฐานข้อมูลไฟล์ของ ESRI เป็นประจำเพื่อจัดเก็บมองเห็นและวิเคราะห์แรสเตอร์ขนาดใหญ่ (~ 70GB) อย่างรวดเร็วและง่ายดายและ ArcGIS 10.1 ไม่เคยหยุดนิ่งหรือช้าลงเนื่องจากการดำเนินการตามปกติดังกล่าว

มีบางอย่างที่ฉันขาดไปที่นี่คอขวดที่ฉันไม่ได้พูดถึงเหรอ? PostgreSQL ต้องมีการปรับแต่งเพื่อให้เกิดประโยชน์ด้านประสิทธิภาพของ PostGIS หรือไม่ ฉันหายไปจากรุ่น GDAL ที่ฉันต้องตามล่าและรวบรวมหรือไม่ ฉันจะปรับปรุงประสิทธิภาพของ PostGIS และการสร้างภาพข้อมูลใน QGIS ของ shapefiles และ rasters โดยเฉพาะได้อย่างไร ฉันจะเพลิดเพลินไปกับความรุ่งโรจน์ของการจัดการข้อมูลเชิงพื้นที่ที่ครอบคลุมและรวดเร็วผ่านช่องทาง Linux ได้อย่างไร ยินดีต้อนรับความช่วยเหลือใด ๆ เกี่ยวกับปัญหานี้!


ฉันทำตามคำแนะนำนี้โดย Duncan Golicher: https://duncanjg.wordpress.com/2012/11/11/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

ฉันสามารถนำเข้าแรสเตอร์ IMG 870MB ได้ในเวลาที่เหมาะสมและแสดงใน QGIS โดยไม่ทำให้แอปพลิเคชันช้าหรือกระแทก เวลาในการเรนเดอร์ไม่เร็วอย่างที่ฉันคาดหวัง แต่ก็เป็นที่ยอมรับ ฉันจะอ่านเพิ่มเติมเกี่ยวกับพารามิเตอร์ -l เพื่อใช้อย่างถูกต้อง

บังเอิญในการนำเข้าไฟล์ dem.img เป็นตาราง dem100 ตารางแรสเตอร์อื่นถูกสร้างขึ้นเรียกว่า "o_4_dem100" เมื่อฉันนำเข้ามันเป็นเลเยอร์ใน QGIS นั้นจะมีช่วงค่าระหว่าง 201 ถึง 524 ในขณะที่ชั้น dem100 มีช่วงระหว่าง 36 ถึง 524 ฉันจะสมมติว่าตารางพิเศษนี้เป็นตารางพีระมิดที่แคบกว่า ช่วงค่าที่เป็นผลมาจากการรวมกับความละเอียดที่ต่ำกว่า?


ฉันไม่คิดว่าฮาร์ดแวร์ไม่เพียงพอเป็นปัญหา นี่เป็นบทสรุปโดยย่อของสิ่งที่ฉันค้นพบ

โปรแกรมควบคุมแรสเตอร์ PostGIS ของ GDAL มีปัญหาด้านประสิทธิภาพในอดีต( ดูที่นี่เช่นกัน ) แม้ว่าจะพบปัญหาเหล่านี้ในปี 2555 แต่ฉันสงสัยว่า GDAL 1.11.2 ที่พบใน QGIS 2.8 ยังคงมีปัญหานี้อยู่หรือไม่ มีผู้อื่นที่ใช้ QGIS และ PostGIS ในการสร้างภาพแรสเตอร์และการจัดเก็บไหม?

ในบันทึกที่เกี่ยวข้องเป็นไปได้ผมก็ยังมีปัญหาประสิทธิภาพการทำงานที่มีการเปิด PostGIS ตารางแอตทริบิวต์ใน QGIS กับตารางของ ~ บันทึก หลังจากที่ไม่กี่คำแนะนำในหัวข้อที่และไม่มีการแก้ไขปัญหาที่เกิดขึ้นในที่สุดฉันยื่นรายงานข้อผิดพลาดกับ QGISที่ในที่สุดก็ถูกปิดและเชื่อมโยงกับรายงานข้อผิดพลาดต่อไปนี้ที่คล้ายกัน แม้ว่ารายงานข้อผิดพลาดจะปิด แต่ดูเหมือนว่าจะไม่ได้รับการแก้ไข ...

เพื่อสรุปความพยายามของฉัน:

  • ฉันปรับเซิร์ฟเวอร์ PostgreSQL ให้เหมาะกับข้อมูลเชิงพื้นที่
  • ฉันสร้างดัชนีเชิงพื้นที่สำหรับตารางเรขาคณิตและสร้าง VACUUM
  • พฤติกรรม QGIS สำหรับการเปิดตารางแอตทริบิวต์ขนาดใหญ่ (ระเบียน 4.7 ~ m) ดูเหมือนจะลองอ่านระเบียนทั้งหมดแทนที่จะส่งคืนชุดย่อยเพื่อการดูทันที สิ่งนี้นำไปสู่ประสิทธิภาพที่ไม่ดี
  • ประสิทธิภาพในการแสดงผลตารางเรขาคณิตขนาดใหญ่ของ PostGIS ได้ดูเหมือนจะเป็นปัญหา

  • ด้วย raster2pgsql แรสเตอร์จะถูกทำดัชนีปูกระเบื้องและนำเข้าเป็นตารางแรสเตอร์ที่มีปิรามิดใน PostGIS

  • Rasters ทุกขนาดที่เหมาะสมนั้นยังคงนำเข้าสู่ PostGIS ช้าอย่างไม่น่าเชื่อปล่อยให้อยู่คนเดียวเปิดและเลื่อนไปรอบ ๆ ใน QGIS

นอกจากนี้ยังเป็นที่น่าสังเกตว่าเมื่อนำเข้า rasters ขนาดใหญ่หรือเปิดตารางแอตทริบิวต์ขนาดใหญ่ด้วย PostGIS การใช้หน่วยความจำสำหรับ raster2pgsql และ qgis-bin มีมากกว่า 1GB @Michael และ @Paul ได้พูดถึงคำถามแรกของฉันแล้วปรากฏว่า PostGIS ไม่ได้ให้ประโยชน์อย่างมากหากเก็บ rasters อย่างไรก็ตาม ณ จุดนั้นฉันถามว่าทำไมฉันจะเรียกใช้ QGIS + PostGIS เลยสำหรับความต้องการ GIS ของฉันโดยเฉพาะอย่างยิ่งเมื่อ ESRI fileGDBs เปิดใช้งานแอตทริบิวต์แรสเตอร์ชุดข้อมูลโมเสกและการดำเนินการแรสเตอร์อื่น ๆ ดังนั้นบางทีทั้งฉันกำลังมันขาดอะไรหรือ QGIS และ PostGIS ไม่ตอบสนองความต้องการของฉัน GIS ฉันพบว่าหลังยากที่จะเชื่อ


rasters ต้องอยู่ใน PostGIS หรือไม่ คุณหวังว่าจะได้รับประโยชน์ / ฟังก์ชันการทำงานพิเศษอะไรบ้าง? ฉันพบว่าเวกเตอร์ PostGis นั้นเป็นที่ยอมรับและเสนอการแก้ไขผู้ใช้หลายคน แต่แรสเตอร์ PostGis ไม่มีประโยชน์ที่แท้จริงมากกว่าแรสเตอร์แบบใช้ไฟล์ (เซิร์ฟเวอร์เก็บไว้) เป็นคำถามที่ดี มันค่อนข้างเป็นไปได้ว่ามีประโยชน์บางอย่างที่ฉันเคยพลาดในการประเมินผลของฉัน ...
ไมเคิลสติมสัน

ฉันคิดว่า PostGIS rasters เปิดใช้งานการคำนวณ raster ได้เร็วขึ้นรวมถึงประสิทธิภาพที่ดีขึ้นด้วยการดำเนินการ raster / vector นั่นคือนอกเหนือจากประโยชน์ของฐานข้อมูลเชิงพื้นที่: ความน่าเชื่อถือการเข้าถึงสิ่งอำนวยความสะดวกในการสำรองข้อมูลพื้นที่จัดเก็บข้อมูลที่มีขนาดกะทัดรัดมากขึ้น ฯลฯ ไม่ว่าในกรณีใดวิธีการไฟล์ / ไทล์ไม่อนุญาตให้ใช้ฟังก์ชั่นการค้นหา ความสามารถอื่น ๆ ที่ปรับปรุงวิธีการใช้และสร้างภาพแรสเตอร์
mbcaradima

ผมเคยเห็นไม่มีตัวชี้วัดที่บอกว่า rasters PostGIS ได้เร็วขึ้นในการคำนวณแรสเตอร์ .. ในทั้งสองกรณีมี 240GB SSD (ทางเลือกที่ดี BTW เร็วกว่า RAID ในส่วนของค่าใช้จ่าย / ความพยายาม) คุณจะเติมมากได้อย่างรวดเร็วด้วย rasters ... ECW / JP2 สำหรับ 8 บิตหรือ GeoTIFF พร้อม LZW / Deflate การบีบอัดทำเครื่องหมายส่วนใหญ่ของกล่องเหล่านั้นปิรามิดที่สร้างไว้ล่วงหน้าปูกระเบื้อง (ผ่าน VRT) สำรองข้อมูลเป็นไฟล์ ฯลฯ ... ประโยชน์เพียงอย่างเดียวคือฟังก์ชั่นการค้นหา ฉันรู้ว่าฉันได้รับหัวข้อเล็กน้อย แต่ถ้า PostGIS raster ไม่ทำสิ่งที่คุณคาดหวังแล้วทำไมไม่ยึดกับ file raster เพื่อแสดง?
Michael Stimson

3
ใครเคยบอกว่า PostGIS rasters เร็วกว่าอะไร? พวกมันสามารถใช้งานได้สะดวกกว่า (SQL access API ที่มีประโยชน์) และพวกมันมีประโยชน์สำหรับการวิเคราะห์ (แรสเตอร์และเวกเตอร์ในที่เก็บข้อมูลเดียวกัน) แต่เร็วกว่าไหม ไม่เคย
Paul Ramsey

1
ฉันกำลังทำงานผ่านหนังสือเกี่ยวกับ PostGIS (PostGIS ใน Action, 2nd ed) และดูเหมือนเป็นเรื่องธรรมดาที่จะคิดว่าประโยชน์ของการจัดเก็บไฟล์รูปร่างในฐานข้อมูลเชิงพื้นที่จะขยายไปสู่แรสเตอร์เช่นกัน แน่นอนเนื่องจากรูปแบบข้อมูลที่แตกต่างกันของพวกเขาฉันสามารถเห็นสมมติฐานนี้ได้อย่างชาญฉลาด กระนั้นก็ยังมีการจัดเก็บแรสเตอร์ทั่วไปในฐานข้อมูล Geod ด้วย ArcGIS และอนุญาตให้สร้างปิรามิดสร้างกระบวนการทางภูมิศาสตร์ได้เร็วขึ้นและสร้างโมเสค ในเวิร์กโฟลว์กับซอฟต์แวร์โอเพ่นซอร์สผู้ใช้ GIS ควรทำงานกับ rasters อย่างไร BTW ฉันจะต้องชกต่อยหน้า
mbcaradima

คำตอบ:


9

หากคุณต้องการแสดงแรสเตอร์ขนาดใหญ่ใน QGIS คุณจะต้องสร้างปิรามิดทั้งอิมเมจ tif บนระบบไฟล์หรือสำหรับภาพที่ลงทะเบียนใน Postgis

ความแตกต่างของประสิทธิภาพในการเรนเดอร์ QGIS ระหว่างแรสเตอร์ขนาดใหญ่ในระบบไฟล์หรือในโพสต์จิสนั้นเป็นอาชญากร ผู้ใช้จะไม่สังเกตเห็นความแตกต่าง แต่ - ถ้าหาก - -lคุณสร้างปิรามิดที่มีตัวเลือก

หากคุณนำเข้าง่ายรูปภาพที่ไม่ใช้ตัวเลือก -l หรือมีเพียงมันจะไม่ทำงาน-l 4

หากคุณใช้-l 2,4,8,16ปิรามิดสี่ระดับจะถูกสร้างขึ้นเช่นในเลเยอร์ด้านล่าง:

ปิรามิดที่สร้างด้วย -l 2,4,8,16

-l 2,4,8,16,32,64,128,256หากคุณต้องการที่จะได้รับประสบการณ์ใช้งานที่ดีคุณควรเพิ่มระดับมากขึ้นของปิรามิดเช่น สิ่งนี้จะสร้างปิรามิดแปดระดับ

ป้อนคำอธิบายรูปภาพที่นี่

เพื่อสรุปคำตอบสำหรับคำถามนี้คือ: นำเข้าแรสเตอร์ด้วยตัวเลือก-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

ฉันมีปัญหาเดียวกันกับการแสดง rasters ใน QGIS จาก PostGIS (ดูคำถามล่าสุดของฉัน ) ฉันพบว่าโพสต์นี้มีประโยชน์และเพิ่มการแสดงแรสเตอร์ที่ปรับปรุงแล้วต่อไปนี้เล็กน้อย:

shared_buffers = 5,000MB work_mem = 100MB maintenance_work_mem = 100MB

อย่างไรก็ตามด้วยสิ่งที่กล่าวมาฉันยอมรับอย่างสมบูรณ์ว่าประสิทธิภาพของ rpg ของ PostGIS ใน QGIS นั้นไม่ดี ฉันกำลังจัดการกับ geotiffs ที่ถูกบีบอัด 608 ที่โหลดได้ดีเหมือน VRT แต่ไม่สามารถใช้งานได้จริงใน PostGIS พยายามเพิ่มประสิทธิภาพของเซิร์ฟเวอร์ dbase แต่ยิ่งกว่านั้นฉันก็ไม่สามารถช่วยเหลือได้ ฉันก็อาจต้องพึ่งพาระบบไฟล์เพื่อแสดง rasters ภายในองค์กรของฉัน


ขอบคุณสำหรับความคิดเห็นของคุณคลิฟ ฉันใช้การเปลี่ยนแปลงบางอย่างของคุณและจะรายงานการปรับปรุงประสิทธิภาพหลัก ๆ โดยรวมแล้วฉันต้องบอกว่าประสิทธิภาพของ QGIS นั้นน่าผิดหวังสำหรับการมองเห็นภาพของ PostGIS rasters และตารางแอตทริบิวต์การโหลด / การสืบค้น ประสิทธิภาพของ Raster ใน PostGIS ก็น่าผิดหวังเช่นกัน ฉันไม่มีปัญหาเหล่านี้กับฐานข้อมูลไฟล์ทางภูมิศาสตร์ดังนั้นฉันสงสัยว่าเกิดอะไรขึ้น
mbcaradima

1
ความรู้สึกของฉันอย่างแน่นอน ฉันใช้เวลาหนึ่งสัปดาห์ในการพยายามทำสิ่งนี้และไม่สามารถวิ่งได้ ตอนนี้ฉันกำลังทดสอบ VM (เซิร์ฟเวอร์ Ubuntu) ของฉันด้วยโปรเซสเซอร์ 10 ตัวและ RAM 10GB หากยังคงซบเซาฉันต้องทำสิ่งอื่นผิด ฉันยังงงว่าทำไมเลเยอร์ WMS ใน QGIS นั้นไม่สามารถใช้งานได้เนื่องจากความเร็วในการเรนเดอร์ช้า เราควรเชื่อมต่อกับสิ่งนี้มากกว่านี้เพราะเราทั้งคู่อยู่ในเรือลำเดียวกัน
หน้าผา

ถ้ามันโหลดได้ดีเหมือน VRT ทำไมคุณถึงไม่หยุดล่ะ คุณคาดหวังอะไรจากการเดินทางอันยิ่งใหญ่นี้?
พอลแรมซีย์

ฉันเดาคำตอบของฉันเกี่ยวกับเรื่องนี้พอลเป็นสิ่งที่ OP กล่าวว่าโพสต์ถัดไป: "อย่างไรก็ตาม ณ จุดนี้ฉันถามว่าทำไมฉันจะเรียกใช้ QGIS + PostGIS เลยสำหรับความต้องการ GIS ของฉันโดยเฉพาะอย่างยิ่งเมื่อ ESRI fileGDBs เปิดใช้งานคุณลักษณะ และการปฏิบัติการแรสเตอร์อื่น ๆ ที่อำนวยความสะดวกโดยฐานข้อมูลทางภูมิศาสตร์ดังนั้นบางทีฉันอาจจะพลาดอะไรบางอย่างหรือ QGIS และ PostGIS ไม่ตรงกับความต้องการของ GIS ของฉันฉันพบว่าหลังยากที่จะเชื่อ "
หน้าผา

1
นอกจากนี้ฉันจะบอกว่าประมาณ 70% ของการวิเคราะห์ที่ฉันทำคือ rasters และประมาณ 40% ของข้อมูลที่ฉันต้องการให้บริการกับองค์กรของฉันผ่าน QGIS เป็นข้อมูลเชิงภาพ มันสมเหตุสมผลที่จะมีข้อมูลแรสเตอร์และเวคเตอร์ทั้งหมดในฐานข้อมูลเดียวเพื่อให้ผู้ใช้สามารถตั้งค่าการเชื่อมต่อเดียวและเข้าถึงฐานข้อมูลทั้งหมดขององค์กรของเรา แต่ฉันจะต้องสร้างเครดิตสำหรับ dbase และเครดิตสำหรับการแชร์ไฟล์ อีกทางหนึ่งฉันกำลังพิจารณาที่จะทิ้ง QGIS อย่างจริงจังและสร้างเว็บแอปพลิเคชันด้วย Geoserver (ps: ยินดีที่จะร่วมมือกับผู้อื่นทุกคนที่สนใจ)
หน้าผา

4

ถ้าไม่แน่ใจว่ามันเป็นกรณีของคุณ แต่ผมพบว่าไม่ควรใช้ร่วมกับการผนวกข้อมูล-I-a

ฉันกำลังนำเข้าไฟล์ TIF จำนวนมากไปยังฐานข้อมูลและ-Iสร้างดัชนีอีกครั้งจริง ๆ และดำเนินการanalyseบนตารางสำหรับแต่ละไฟล์ซึ่งใช้เวลาเพิ่มขึ้น 10 เท่า

-Iควรใช้เมื่อสร้างตารางพร้อม-pตัวเลือกเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.