เป็นไปไม่ได้ที่จะหาผลรวมของแรสเตอร์เนื่องจากพิกเซลของข้อมูล


12

ฉันมีชุดแรสเตอร์ (.vrt) พร้อมข้อมูลความชื้นในดินทุกวัน ฉันต้องการที่จะรวมพิกเซลของแรสเตอร์ทั้งหมดเพื่อให้มีการวัดตามเดือน อย่างไรก็ตามโลกทั้งใบไม่ได้ครอบคลุมในแต่ละวันซึ่งส่งผลให้เกิดค่านิยมในสถานที่ที่มีการวัดสำหรับวันอื่น ๆ

สิ่งที่ฉันต้องการทำคือผลรวมของค่าแรสเตอร์แต่ละอัน อย่างไรก็ตามดูเหมือนว่าในแต่ละครั้งที่พิกเซล nodata อยู่ในผลรวมพิกเซลที่ได้จะถูกจัดประเภทเป็นโนดาต้าโดยตรง ฉันอยากจะมีสิ่งที่ตรงกันข้าม: ไม่สนใจคุณค่าของสิ่งที่มีอยู่ทั้งหมดและรวมส่วนที่เหลือ

ฉันคิดถึงวิธีแก้ปัญหา 2 วิธี:

  1. การรวม rasters โดยไม่สนใจค่าของโหนด
  2. การแปลงพิกเซลโนดาต้าให้เป็นค่า 0 จากนั้นรวมแรสเตอร์ทั้งหมด

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

น่าเสียดายที่ฉันไม่พบเครื่องมือใด ๆ ในการทำเช่นนี้

มีใครช่วยฉันบ้าง


ฉันสงสัยว่าผลลัพธ์จะแปลได้อย่างไร: หลังจากทั้งหมดจำนวนเงินจะไม่รวมค่าสำหรับวันที่หายไปซึ่งบ่งบอกว่าพวกเขาจะมีอคติต่ำโดยจำนวนต่าง ๆ ขึ้นอยู่กับจำนวนข้อมูลที่หายไป หากมีจำนวนเงินที่เห็นข้อมูลหายไปแล้วคุณควรพิจารณาแทนimputingหรือทำนายค่าในเซลล์ที่ขาดหายไปและจากนั้นการแสดงผลรวม
whuber

1
ขอบคุณสำหรับความคิดเห็นนี้ ฉันถามผู้จัดการของข้อมูลและพวกเขาบอกว่าพวกเขาคำนวณค่าเฉลี่ยโดยรวมข้อมูลที่มีทั้งหมดแล้วหารด้วยจำนวนวันภายในเดือนเมื่อมีการสังเกตบนพิกเซลนั้น
ดาเมียน

2
นั่นเหมือนกับค่าเฉลี่ยของแรสเตอร์สแต็คที่ GIS ได้รับคำสั่งให้ละเว้นเซลล์ NoData ทั้งหมดซึ่งแนะนำวิธีอื่นให้คุณไป โดยวิธีการขั้นตอนนี้ยังคงมีแนวโน้มที่จะลำเอียงเมื่อการสังเกตที่หายไปมีความสัมพันธ์กับค่า ตัวอย่างเช่นเมื่อคุณไม่มีข้อมูลเนื่องจากมีเมฆปกคลุมเป็นไปได้ว่าในสมัยนั้นความชื้นของดินอาจสูงขึ้น (โดยเฉลี่ย) มากกว่าปกติ
whuber

1
เอาล่ะฉันเพิ่งทดสอบเครื่องมือสถิติของเซลล์ด้วยการทำเครื่องหมาย 'เพิกเฉยต่อโหนด' และทำในสิ่งที่ฉันต้องการ ฉันตระหนักถึงข้อบกพร่องของวิธีการดังกล่าว อย่างไรก็ตามงานของฉันมีขนาดค่อนข้างใหญ่ทั้งในอวกาศและเวลาดังนั้นฉันคิดว่าอคตินั้นจะมีความสำคัญน้อยกว่า อย่างไรก็ตามฉันไม่มีตัวเลือกข้อมูลมากมายนัก
ดาเมียน

สเกลจะไม่เกี่ยวข้องกับปริมาณอคติ ความสำคัญของอคตินั้นขึ้นอยู่กับขนาดและความไวของแอปพลิเคชันของคุณ แม้ว่าคุณอาจจะไม่สามารถที่จะทำอะไรเกี่ยวกับข้อมูลที่คุณไม่สามารถควบคุมขั้นตอนการวิเคราะห์พวกเขา มีวิธีมากมายในการปรับปรุงในอันนี้ หนึ่งในตัวเลือกของคุณคือการแก้ไขเมื่อเวลาผ่านไปและถอยกลับไปกับโควาเรียที่อาจมีความสัมพันธ์กับความชื้นในดินและสามารถใช้ได้แม้ในวันที่หายไป (มีสาขาทั้งหมดของสถิติที่อุทิศให้กับ "การใส่ร้าย" ค่าที่หายไป)
whuber

คำตอบ:


1

หากคุณสามารถเข้าถึง ArcGIS ได้เครื่องมือเครื่องมือสถิติมีทางเลือกที่จะไม่สนใจข้อมูลที่คุณรวม \ mean \ min \ max rasters ของคุณ


หากคุณแก้ไขคำตอบนี้เพื่อแทนที่ "ผลรวม" ด้วย "ค่าเฉลี่ย" คำตอบนั้นจะถูกต้อง: ดูหัวข้อความคิดเห็นของคำถามด้วยเหตุผล
whuber

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

11

ประการแรกคุณสามารถใช้gdal_calc.pyเพื่อเปลี่ยน -9999 ทั้งหมดเป็น 0 และตั้งค่า NoData เป็น 0

ตัวอย่างเช่น

gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --calc="A+9999*(A==-9999)" --NoDataValue=0

จากนั้นคุณสามารถละเว้นค่าใช้ไม่มีข้อมูลตัวเลขgdal_translateกับ-a_nodataตัวเลือกตามใคร

-a_nodata ค่า :

กำหนดค่า nodata ที่ระบุให้กับแถบเอาท์พุท เริ่มต้นด้วย GDAL 1.8.0 สามารถตั้งค่าเป็นnoneเพื่อหลีกเลี่ยงการตั้งค่า nodata เป็นไฟล์เอาต์พุตหากมีอยู่สำหรับไฟล์ต้นฉบับ

ตัวอย่าง:

gdal_translate -a_nodata none input_with_NoData.tif output_without_NoData.tif

ขอบคุณสำหรับทิป. ฉันเล่นเล็กน้อยด้วยพารามิเตอร์ -a_nodata และฉันจัดการเพื่อให้มีค่า -9999 แทน NULL อย่างไรก็ตามฉันยังคงต้องเปลี่ยน -9999 พิกเซลทั้งหมดเป็น 0
ดาเมียน

1
คุณสามารถใช้gdal_calc.pyที่จะเปลี่ยนแปลงสิ่ง -9,999-0 gdal_translate -a_nodata none ...ก่อนที่จะใช้ ตัวอย่างเช่น: gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --type=Int16 --calc="A+9999*(A==-9999)" --NoDataValue=0
Antonio Falciano เมื่อ

ฉันลองหลายคำสั่ง แต่ฉันคิดว่าฉันมีปัญหากับ gdal_calc.py ตัวอย่างเช่นฉันเพิ่งลองเพิ่ม 1 ลงใน raster ทั้งหมด ( i.imgur.com/WiZG7MC.png ) และฉันได้รับข้อผิดพลาด Maxrepeat นี้ ฉันไม่เข้าใจฉันรันคำสั่งโดยตรงจากเชลล์ OSGeo และโมดูลนี้ติดตั้งอย่างถูกต้องเนื่องจากปรากฏในรายการเมื่อฉันเปิดเชลล์ ( i.imgur.com/fgtMZQZ.png ) การติดตั้งของฉันเสียหรือไม่
ดาเมียน

ดูเหมือนว่าปัญหา regex แล้ว ... ลองเปลี่ยนไดเรกทอรีการทำงานของคุณโดยใช้คำสั่งและลองใหม่อีกครั้งเพื่อให้มีเพียงcd -A test.tif
อันโตนิโอ Falciano

1
มันทำงานสำหรับฉัน แต่ผมได้ติดตั้งทุกสิ่งนี้ผ่านการติดตั้ง OSGeo4W ฉันเห็นว่าคุณติดตั้ง QGIS แทนผ่านตัวติดตั้งแบบสแตนด์อโลน ดังนั้นพยายามรีเฟรช / อัปเดตการตั้งค่าของคุณ
Antonio Falciano เมื่อ

5

ใน R:

library(raster)
s <- stack('file1', 'file2', ...)
ss <- sum(s, na.rm=TRUE)

คุณสามารถเพิ่มคำอธิบายให้กับรหัสนี้ (ถ้าคุณเขียน) หรือลิงค์ไปยังตำแหน่งที่คุณพบโดยมีสรุปสั้น ๆ จากไซต์
พอล

1
ครั้งแรกที่โหลดแพคเกจแรสเตอร์จากนั้นสร้าง "สแต็ค" (อาร์เรย์ 3 มิติของไฟล์แรสเตอร์ที่มีขอบเขตและความละเอียดเท่ากันโดยที่แต่ละไฟล์กลายเป็นส่วนหนึ่งของสแต็กนี้) ซึ่งประกอบด้วยไฟล์ที่ระบุด้วยชื่อไฟล์ . บรรทัดสุดท้ายดำเนินการกับผลรวมของเซลล์ที่ฉลาดในสแต็กทั้งหมดของสแต็sกโดยมีอาร์กิวเมนต์na.rm=TRUEส่งผลให้NAค่าถูกละเว้น วัตถุที่เอาท์พุทssเป็นrasterวัตถุที่สามารถส่งออกด้วยwriteRaster(ดู?writeRaster) (@RobertH เป็นผู้สร้างrasterแพ็คเกจR )
jbaums

1

เครื่องมือที่มีเงื่อนไขในนักวิเคราะห์เชิงพื้นที่เป็นวิธีที่ง่ายในการแปลงค่า Null เป็นศูนย์ จากนั้นจำนวนเงินที่ควรจะเป็นสแน็ปอิน


ขอบคุณสำหรับการตอบกลับของคุณ. ฉันติดตามโพสต์นี้: support.esri.com/fr/knowledgebase/techarticles/detail/34932 และสามารถแปลงพิกเซล null ทั้งหมดเป็น 0 อย่างไรก็ตามฉันอยากจะสามารถดำเนินการนี้สำหรับ rasters ทั้งหมดภายใน ไดเรกทอรี 'จัดประเภทค่ากริดใหม่' ใน QGIS ดูเหมือนว่าจะสามารถทำเช่นนี้ได้ แต่สิ่งที่ฉันไม่ทราบว่ามันทำงานอย่างไร ฉันเลือกวิธี "ตารางธรรมดา" และขอให้ตั้งค่าเป็น 0 และไม่เปลี่ยนค่าอื่น ๆ แต่ช่วงแรสเตอร์ที่ได้จาก -0.99 ถึง 0.08 ในขณะที่มันมีช่วงตั้งแต่ 428 ถึง 3491
Damien

คุณสามารถโพสต์ข้อความที่ตัดตอนมาจากแรสเตอร์ดั้งเดิมของคุณที่ไหนสักแห่งเพื่อให้เราได้ดู?
til_b

2
หากคุณคลิกขวาที่เครื่องมือคุณสามารถเรียกใช้กระบวนการแบทช์ไฟล์ได้มากเท่าที่คุณต้องการเช่นทั้งไดเรกทอรี
บร็อ

ขอบคุณสำหรับคำตอบ. อย่างไรก็ตามฉันสามารถแปลง NULL ทั้งหมดเป็น 0 สำหรับไฟล์เดียวโดยใช้ 'นักวิเคราะห์เชิงพื้นที่ / พีชคณิตแผนที่ / เครื่องคิดเลข Raster' ถ้าฉันคลิกขวาบนเครื่องมือนี้ฉันสามารถแบตช์ไดเรกทอรี แต่สิ่งที่จะเป็นไวยากรณ์เพื่อที่จะเข้าบัญชีแต่ละไฟล์โดยอัตโนมัติ ( i.imgur.com/aYaUCzz.png )
ดาเมียน

ฉันได้ดูเครื่องมือ 'นักวิเคราะห์เชิงพื้นที่ / จัดประเภท / จัดประเภทใหม่' และมันทำสิ่งที่ฉันต้องการ ฉันจัดการเพื่อใช้หน้าต่างแบตช์เพื่อประมวลผลหลายไฟล์พร้อมกัน ฉันมีปัญหาล่าสุด: ถ้าฉันคลิกขวา / เติม 'เอาท์พุทแรสเตอร์' มันจะคัดลอกไฟล์เอาต์พุตเดียวกันสำหรับ raster อินพุตทั้งหมด ฉันจะทำอย่างไรเพื่อให้สร้างเอาต์พุตที่แตกต่างกันสำหรับแต่ละอินพุต ( i.imgur.com/jzTI2x9.png )
ดาเมียน

1

ฉันมีปัญหาเดียวกันเมื่อไม่นานมานี้และฉันจัดการเพื่อแก้ไขมัน

เช่นเดียวกับที่บันทึกเกี่ยวกับการแสดงค่า nodata ใน QGIS: ค่า nodata จะแสดงเป็นค่า nodata ในหน้าต่างแผนที่เสมอและเมื่อใช้เครื่องมือ "ข้อมูลวัตถุ" ไม่ว่าจะมีค่า -9999, 0, NULL เป็นต้น ดังนั้นหลังจากการจัดประเภทของค่า nodata เป็น 0 หากคุณไปในการตั้งค่าเลเยอร์คุณจะพบใน Metadata ที่ nodata มีค่า 0

r.seriesในที่สุดผมก็พบเครื่องมือที่เหมาะสำหรับการแสวงหาหญ้า ด้วยการตั้งค่า "การดำเนินการรวม" สูงสุด "และไม่เลือก" การเผยแพร่ NULL "เครื่องมือจะสร้างเลเยอร์ที่เหมาะกับความต้องการของคุณ


0

ฉันจำได้ว่ามีปัญหานี้ในขณะที่กลับ ฉันคิดว่าฉันได้ +1 ทุกเซลล์ในแรสเตอร์เพิ่มแรสเตอร์เข้าด้วยกันแล้วจึงทำการลบขั้นสุดท้าย (ซึ่ง +1 +1 หลายรายการที่คุณเพิ่ม) มันค่อนข้างดิบ แต่ถ้าทำสำเร็จ ... !

หรือใช้ 'จัดประเภทค่ากริดใหม่' ในกล่องเครื่องมือการประมวลผลใน QGIS เพื่อแปลงค่า Null ของคุณให้เป็นศูนย์


สวัสดีฉันลองใช้เครื่องมือ 'จัดประเภทค่ากริดใหม่' หลายวิธีโดยไม่ประสบความสำเร็จ ฉันเริ่มแรสเตอร์ซึ่งฉันแปลง NULL พิกเซลทั้งหมดเป็น -9999 ฉันพยายามจัดประเภทใหม่โดยใช้วิธี [0] เดี่ยวและตั้งค่า 'old value = -9999', 'new value = 0.0', 'โอเปอเรเตอร์: [0] =' แต่สิ่งที่ฉันได้รับคือ raster ที่เต็มไปด้วย 'nan' พิกเซล ผมทำอะไรผิดหรือเปล่า?
ดาเมียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.