จะทำอย่างไรกับ -3.4e + 38 ค่า nodata?


17

ฉันพยายามประมวลผลไฟล์แรสเตอร์ทางชีวภาพบางอย่างเช่นสามารถดาวน์โหลดได้จากhttp://www.worldclim.org/current (ชุด bioclim) ดูเหมือนว่าพวกเขาจะตั้งค่า nodata -3.4e+38ตาม QGIS (ดูที่ผลลัพธ์ของ gdalinfo มัน-3.39999999999999996e+38)

ดูเหมือนว่าเครื่องมือ gdal ไม่สามารถจัดการกับค่า nodata นี้ได้และ qgis ก็ไม่สามารถจดจำได้เช่นกัน ในสไตล์เลเยอร์มีรายการสำหรับ -3.4e + 38 ตั้งค่าเป็น 100% โปร่งใส แต่ยังคงแสดงค่าดังกล่าวแม้ว่าตัวเลือก "ระบุคุณสมบัติ" จะแสดงว่ามีค่า -3.4e + 38

ฉันได้ลองสร้าง vrt เพื่อแปลงค่า nodata เป็น -9999 แทน แต่นั่นก็ไม่ได้ผลเช่นกัน

ฉันจะประมวลผลไฟล์ดังกล่าวเพื่อให้มีค่าโหนดที่ใช้งานได้อย่างไร

ค่า nodata หยิบขึ้นมาจากไฟล์ การตั้งค่าความโปร่งใสไม่มีผลใด ๆ


สมมุติว่าใน qgis เวอร์ชั่นใหม่มีการรองรับ nodata มากขึ้น ฉันมีปัญหา "โนดาต้า" มากมายกับ 1.8 (โดยเฉพาะอย่างยิ่งเมื่อฉันพยายามคำนวณฮิสโตแกรมหรือค่าเฉลี่ยภายในพื้นที่)
nickves

คำตอบ:


4

GDAL สามารถจัดการกับค่าเหล่านี้ได้ อันที่จริงแล้วค่า NoData เริ่มต้นของ GDAL นั้นใกล้เคียงกับของคุณมาก ฉันคิดว่าปัญหานี้เป็นข้อผิดพลาดของ floating point ใน QGIS ฉันมีปัญหาเดียวกันกับค่า NoData ของทศนิยม

หากคุณต้องการเปลี่ยนค่า NoData โดยใช้ GDAL คุณสามารถใช้gdalwarpหรือบางทีgdal_translateและตั้งค่า nodata เป็นจำนวนเต็มจากนั้น (-dstnodata และ -a_nodata ตามลำดับ) สำหรับความไม่เร่งรีบฉันประสบความสำเร็จในการตั้งค่า NoData Value ของฉันเป็น -999 ใน 64 บิต float raster ในอดีต อย่างไรก็ตามเนื่องจากเราได้จัดตั้งขึ้นแล้วมีปัญหาจุดลอยตัวในเรื่องนี้ฉันไม่ต้องการรับประกันว่าจะสามารถใช้งานได้ในทุกกรณี


ขอบคุณสำหรับคำตอบของคุณซิลเวสเตอร์ ฉันไม่สามารถใช้ gdal_translate ให้ทำงานได้gdal_translate -a_nodata -9999 input.tif output.tifแม้ว่าใช้gdalwarp -dstnodata -9999 input.tif output.tifกลอุบาย จากอินพุตไฟล์ 9MB วิธีการของฉันทำให้ไฟล์ 26MB ขณะที่ gdalwarp ทำให้ได้ไฟล์เอาต์พุต 52MB อย่างไรก็ตามหากแรสเตอร์มีค่าลอยวิธีการของฉันจะไม่ทำงานในที่นี้
rudivonstaden

คุณได้ตรวจสอบว่ามีตั๋วเปิดในตัวติดตามบั๊ก QGIS สำหรับสิ่งนี้หรือไม่?
underdark

1
การขยายตัวของข้อมูลอาจเกิดจากการใช้ความลึกพิกเซลที่มากขึ้น (63- บิตเทียบกับ 16 บิตกล่าว) หรืออาจเป็นเพราะต้นฉบับเป็น JPEG และผลลัพธ์ใหม่ของคุณเป็น TIFF @underdark - ขออภัย! ไม่ฉันไม่ได้ตรวจสอบว่ามีตั๋วเปิดหรือไม่
MappaGnosis

@underdark ฉันไม่พบตั๋วที่ตรงกับสิ่งนี้ดังนั้นฉันจึงเพิ่มรายงานข้อผิดพลาด ( hub.qgis.org/issues/6786 )
rudivonstaden

1
-co COMPRESS=LZWสำหรับขนาดไฟล์เล็กคุณก็ต้องเพิ่ม
j08lue

11

ฉันจัดการเพื่อค้นหาวิธีแก้ปัญหาสำหรับปัญหานี้โดยการแปลงรูปแบบข้อมูลเป็น Int16 จาก Float32 ค่าต่ำสุดคือ -32768 และสามารถประมวลผลเป็นค่า nodata คำสั่งต่อไปนี้ได้หลอกลวง:

gdal_translate -ot Int16 -a_nodata -32768 input.tif output.tif

อาจมีทางออกที่ดีกว่า แต่วิธีนี้จะช่วยแก้ปัญหาเฉพาะหน้าของฉันอย่างน้อยที่สุด

เลือกขึ้นอย่างถูกต้อง



0

คุณสามารถลอง gdal_calc.py input.tif --outfile = output.tif --calc = "A * (A> 0)" --NoDataValue = 0

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