อะไรคือวิธีที่ดีที่สุดในการสร้างแผนที่ความหนาแน่นจากคะแนนถ่วงน้ำหนักใน QGIS


18

ฉันต้องการทำซ้ำการทำงานของเครื่องมือความหนาแน่นของเคอร์เนล ArcGIS - ฉันจะทำเช่นนั้นได้อย่างไร

ฉันต้องการจำกัด คำตอบสำหรับซอฟต์แวร์ฟรีและโอเพ่นซอร์สที่ติดตั้งง่าย - เช่น QGIS ติดตั้งได้ง่ายด้วย GRASS บนทุกแพลตฟอร์มดังนั้น QGIS + GRASS จะใช้ได้ แต่ SAGA ไม่ได้ (น่าเสียดายเพราะมันมีสิ่งที่อาจ เป็นเครื่องมือในอุดมคติ)

ฉันกำลังพยายามสร้างแผนที่ความหนาแน่นของสัตว์ป่าในพื้นที่คุ้มครองใน QGIS แผนที่ความหนาแน่นในตัวอย่างต่อไปนี้ถูกสร้างขึ้นใน ArcGIS จากการสังเกตจุดของสัตว์ป่าด้วยจำนวนดิบขนาดกลุ่ม (ฟิลด์ในไฟล์เวกเตอร์) ที่ใช้ในการชั่งน้ำหนักความหนาแน่นของแต่ละตารางเซลล์ในเครื่องมือ Kernel Density (SpatialAnalyst) รัศมีการค้นหาและขนาดเซลล์กริดที่เลือก:

ความหนาแน่นของสัตว์ป่าในอุทยานแห่งชาติ Kafue พร้อมเซลล์กริด 5x5km และความหนาแน่นของรัศมีเมล็ด 7.5 กม

ในก่อนหน้านี้คำถามเกี่ยวกับความหนาแน่นของมันก็แนะนำให้ใช้เครื่องมือ GRASS v.kernel เพื่อเลียนแบบความหนาแน่นเครื่องมือ ArcGIS Kernel แต่v.kernel ไม่ได้ทำงานเดียวกัน หลังจากดูคู่มือและสร้างแผนที่ความหนาแน่นเรียบร้อยแล้วดูเหมือนว่าฟังก์ชั่น v.kernel จะทำงานเฉพาะกับความหนาแน่นของจุดเท่านั้นและไม่มีโอกาสที่จะให้ตัวแปรสำหรับแต่ละจุด (เช่นจำนวนที่นับ) เพื่อให้น้ำหนักแต่ละจุด .

UPDATE

ดูเหมือนว่ามี*.surf.*เครื่องมือต่าง ๆใน GRASS ที่อาจช่วยสร้างพื้นผิวที่มีความหนาแน่น - และสิ่งเหล่านี้ยอมรับคอลัมน์น้ำหนักหรือค่า z หรือดำเนินการกับ rasters @underdark แนะนำ v.surf.rst - และ 'zcolumn' จะเป็นตัวแปรน้ำหนัก (นับ) ของฉัน - แต่ฉันไม่สามารถหาวิธีถามเครื่องมือเพื่อสร้างขนาดกริดที่แน่นอนหรือใช้รัศมีที่แน่นอน

คำแนะนำเกี่ยวกับวิธีการใช้ v.surf.rst หรือวิธีอื่นใด?


ข้อมูลตัวอย่าง

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0

คุณสามารถอธิบายข้อมูลอินพุตของคุณเพิ่มเติมได้หรือไม่ บางที v.surf.rst จะเหมาะสมมากกว่า v.kernel grass.osgeo.org/gdp/html_grass64/v.surf.rst.html คุณมีค่านับหนึ่งต่อเซลล์กริดที่แสดงด้านบน?
underdark

@underdark - เพิ่มข้อมูลตัวอย่างบางส่วน มันคือข้อมูลจุดที่มีการนับ (จำนวนช้างที่มองเห็น) และอาจมีการสังเกตมากกว่าหนึ่งต่อเซลล์กริด โดยปกติใน 'นับ' ArcGIS จะกลายเป็นเขตข้อมูล 'ประชากร' ของเครื่องมือความหนาแน่นเคอร์เนล
Simbamangu

ยิ่งฉันคิดถึงมันมากเท่าไหร่ฉันยิ่งเชื่อน้อยว่า v.kernel เป็นตัวเลือกที่ดีสำหรับกรณีการใช้งานของคุณ คุณตรวจสอบวรรณกรรมแล้วหรือยัง ก่อนอื่นอาจถามคำถามเกี่ยวกับวิธีการที่เหมาะสมในกรณีนี้
underdark

คำถามหลักของฉันคือวิธีการทำซ้ำการทำงานของความหนาแน่นเคอร์เนลจาก Arcview ซึ่งเป็นวิธีการที่รู้จัก คุณพูดถูก v.kernel เกือบจะไม่ใช่เครื่องมือที่เหมาะสมที่จะทำเช่นนั้น!
Simbamangu

@underdark ขอบคุณ - ฉันได้ขยายคำถามบ้างที่อาจช่วยได้ v.surf.rst ดูเหมาะสม แต่อาจใช้แนวทางบางอย่างเกี่ยวกับการใช้งาน
Simbamangu

คำตอบ:


8

ตามหน้าคู่มือของมันคำสั่ง GRASS r.resamp.filterจะทำเพื่อrasters แทนข้อมูลจุดที่ ArcGIS จะทำอะไรกับเลเยอร์จุด : ใช้filter=boxตัวเลือกสำหรับแรสเตอร์ "แบบง่าย" และใช้filter=gaussตัวเลือกสำหรับเคอร์เนล ArcGIS อื่น ๆ ใช้-nแฟล็กเพื่อหลีกเลี่ยงการเผยแพร่ nulls


โปรดทราบว่าการประมาณความหนาแน่นของเคอร์เนล (aka "heat maps") ไม่ใช่การประมาณค่าของข้อมูล ค่าของ KDE ที่สถานที่ให้xประมาณการจำนวนเงินของค่าที่ " Z " ต่อหน่วยพื้นที่ใกล้x (รัศมีหรือ "แบนด์วิดท์" วัดความหมายของคำว่า "ใกล้") ค่าของZไม่จำเป็นต้องกำหนดในทุกตำแหน่งที่เป็นไปได้บนแผนที่ ยกตัวอย่างเช่นZอาจหมายถึงการปรากฏตัวของบางสิ่งบางอย่างเช่นคนซึ่งในกรณีของ KDE จะช่วยให้ความหนาแน่นของประชากร และค่าของZ ก็ไม่จำเป็นต้องเปลี่ยนแปลงอย่างต่อเนื่องทั่วทั้งแผนที่ สำหรับการแก้ไขก็จะถูกสันนิษฐานว่าZถูกกำหนดในทุกสถานที่และข้อมูลเป็นการสังเกตค่าของZณ จุดที่ระบุ ผู้แก้ไขพยายามที่จะทำนายค่าที่ไม่ได้รับการเอาใจใส่ของZที่จุดอื่น ๆ สิ่งนี้จะสมเหตุสมผลเมื่อZคืออุณหภูมิหรือความดัน แต่โดยทั่วไปแล้วจะไร้สาระเมื่อZบันทึกการมีอยู่ของบางสิ่งหรือเมื่อข้อมูลมีการสำรวจสำมะโนประชากรที่สมบูรณ์ (ในกรณีหลังพิจารณาสิ่งที่แผนที่ความหนาแน่นของถนนสำหรับภูมิภาคอาจหมายถึงและวิธีการที่อาจทำให้รู้สึกถึง "interpolating" ถนนข้ามพื้นที่ที่ไม่ใช่ถนน)


ฉันดูเหมือนจะไม่มี r.resamp.filter ในกล่องเครื่องมือ GRASS ของฉัน (ใน OS X, GRASS 6.4) อย่างไรก็ตาม - จนกว่าคุณจะพูดถึงมันฉันไม่ได้ตระหนักว่า 'แผนที่ความร้อน' นั้นเหมือนกับ KD; ฉันคิดว่าพวกมันกำลังสอดแทรกพื้นผิวทั้งหมด เครื่องมือ Raster | Heatmap ใน QGIS ทำ KD หรือไม่? 'อัตราส่วนการสลายตัว' คืออะไร
Simbamangu

ฉันเชื่อว่าคำว่า "แผนที่ความร้อน" ได้รับการเลือกใช้ใน GIS จากความหมายดั้งเดิมของมันเป็นสิ่งที่อ้างอิงโดยทั่วไปและคลุมเครือไปเกือบทุกแผนที่ที่มีลักษณะคล้ายแผนที่เชิงภาพ ฉันสงสัยว่า GIS ใด ๆ มีฟังก์ชันการทำงานที่ตรงกับความหมายดั้งเดิม
whuber

จากการตรวจสอบเครื่องมือ heatmap ใน QGIS ทำบางสิ่งที่คล้ายกับ KD ใน Arc หากคุณตั้งค่าอัตราส่วนการสลายตัวเป็น 0 (การลดความหนาแน่นลงเป็น 0 ที่ขอบรัศมี) ดูเหมือนจะมีความแตกต่างบางอย่าง: ค่าของเซลล์ที่คำนวณได้ 25 x สูงกว่า (รัศมี 5km / เซลล์ 2.5km) เช่นเดียวกับวิธีการใช้ฟังก์ชั่นกับเซลล์ - Arc ดูเหมือนจะใช้รัศมีรอบจุดที่เกิดขึ้นจริงในขณะที่ QGIS เลือกเซลล์ที่ทับซ้อนกัน และแท่งหลุดออกจากจุดนั้น
Simbamangu

2
"Heatmap" ในการใช้งานทั่วไปดูเหมือนจะหมายถึงสิ่งต่าง ๆ มากมาย - เมื่อมองไปรอบ ๆ ฉันเห็นว่ามันใช้กับพื้นผิวที่ถูกสอดแทรกความหนาแน่นของเคอร์เนลและการระบายสีที่เรียบง่ายของพิกเซลที่ไม่ราบรื่นเช่นกัน กระดาษที่น่าสนใจเกี่ยวกับการใช้งานเดิม / ประวัติศาสตร์ - และดูเหมือนว่าเราควรจะใช้คำที่แม่นยำยิ่งขึ้นในการติดฉลากเครื่องมือ QGIS
Simbamangu

3
@Simbamangu r.resamp.filter เป็นใหม่ใน GRASS 7แต่มีภาพรวมรายเดือนสำหรับ OS X นอกจากนี้เครื่องมือ heatmap ดูเหมือนจะไม่เสนอทางเลือกสำหรับอัลกอริทึมสำหรับการกระจายของความหนาแน่นดังนั้นจึงไม่เทียบเท่า Kernel Density หรือ r.resamp.filter อย่างแน่นอน
Torsti

3

โมดูลการประมาณความหนาแน่นเคอร์เนลของ SAGA เป็นสิ่งที่คุณกำลังมองหา

ติดตั้งอินเตอร์เฟซโมดูล SAGA ใน QGIS (ในเมนู: ปลั๊กอิน -> ดึงปลั๊กอิน Python .. ) และใช้โมดูล โชคดี!


ฉันชอบที่จะใช้ SAGA แต่ทำงานใน OSX 10.7 และยังไม่ได้สร้างสำเร็จ (ไม่มีไบนารีสำหรับ OSX) ฉันใช้เวลาหลายชั่วโมงในการพยายามรวบรวมมากกว่าหนึ่งวิธี แต่งานสร้างล้มเหลวเสมอ
Simbamangu

ถ้าอย่างนั้นคุณต้องถามคำถามเกี่ยวกับการรวบรวม SAGA บน OSX 10.7 เมื่อฉันเห็น SAGA ทางเลือกที่สมเหตุสมผลเพียงอย่างเดียวกับเครื่องมือ ArcGIS KD
Vladimir

3

วิธีการที่ง่ายมากกับ GRASS GIS ที่ใกล้กับความหนาแน่นของจุดใน ArcMap มากกว่าความหนาแน่นของเคอร์เนล:

  1. นำเข้าคะแนนไปยังแผนที่แรสเตอร์ด้วยการr.in.xyzใช้ method = sum ที่ความละเอียดแรสเตอร์ที่ระบุ (ตั้งค่าด้วยg.region)

  2. ใช้r.neighborsเพื่อทำให้แผนที่เรียบขึ้นโดยใช้ method = average (ซึ่งเป็นค่าเริ่มต้น) และใช้ขนาดตัวเลือกเพื่อกำหนดรัศมีการค้นหา

(ฉันไม่สามารถเข้าถึง GRASS ได้ในขณะนี้ดังนั้นฉันจึงไม่ได้ลองทำเช่นนี้!)


v.in.xyzและv.neighborsอาจใช้งานได้ คู่มือไม่ได้ระบุวิธีการที่คุณตั้งค่าว่าจะใช้คุณลักษณะv.neighborsใด
Torsti

2

ตามที่คุณขอคำแนะนำเพิ่มเติมเกี่ยวกับ v.surf.rst นี่คืออินพุตของฉัน

ก่อนอื่นเกี่ยวกับขนาดกริด - คุณสามารถใช้ปลั๊กอิน -> GRASS -> แก้ไขภูมิภาค GRASS ปัจจุบันและตั้งค่าความละเอียดเอาต์พุต ผลลัพธ์ของคุณจาก v.surf.rst จะมีความละเอียดที่

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

"... ความตึงเครียดสูง" เพิ่มระยะห่างระหว่างจุด "และลดระยะการกระแทกของแต่ละจุดความตึงเครียดต่ำ" ลดระยะห่าง "และจุดที่มีอิทธิพลต่อกันในระยะยาว) .. "

ดังนั้นคุณสามารถใช้พารามิเตอร์ความตึงคร่าวๆได้เช่นเดียวกับการใช้พารามิเตอร์รัศมี

จากข้อมูลตัวอย่างของคุณผลลัพธ์ของ v.surf.rst มีลักษณะดังนี้และดูเหมือนสมเหตุสมผลเนื่องจากใช้การนับเป็นน้ำหนักสำหรับการแก้ไข

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


1
ขอบคุณสำหรับสิ่งนี้ - เข้าใจง่ายกว่าหน้าช่วยเหลือ ตามที่ระบุไว้ข้างต้นโดย @whuber การแก้ไขไม่ใช่วิธีการที่เหมาะสมสำหรับข้อมูลตัวอย่างประเภทนี้
Simbamangu

2

ขณะที่ฉันยังไม่ได้ทดสอบในที่เก็บ QGIS ผู้ให้ข้อมูลมีปลั๊กอินที่เรียกว่า 'การประมาณช่วงแรกกับ R' ซึ่งรวมถึงการคำนวณเคอร์เนล (ความหนาแน่น?) ฉันคิดว่าถ้าได้ผลมันจะเป็นวิธีที่ดีที่สุด R จะทำวิธีการทางสถิติที่แท้จริงของการคำนวณความหนาแน่นของเคอร์เนล

หากคุณติดตั้ง R คุณควรจะสามารถติดตั้งปลั๊กอินและใช้งานได้ทันที


1

ถ้าคุณยอมรับที่จะทำบิตของการเขียนโปรแกรมจาวานอก QGIS คุณก็สามารถใช้แผนที่ความหนาแน่นของห้องสมุดสร้างนี้

การใช้ตัวสร้างHeatMapBuilder(int w, int h, int[][] pts, int[] weights)มันเป็นไปได้ที่จะให้น้ำหนักสำหรับแต่ละจุดตามที่คุณต้องการ ภาพที่ส่งออกสามารถเรียกดูได้กับวิธีการและบันทึกไว้ในฮาร์ดดิสก์ของคุณด้วยgetImage()ImageIO.write("mymap.png")

นี่คือตัวอย่างของเอาต์พุต:

แผนที่ความร้อนกับห้องสมุด java opencarto

เป็นไปได้ที่จะเปลี่ยนความแข็งแรงที่ปรับให้เรียบ

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