วิธีการจัดทำดัชนีทางเลือกสำหรับการดำเนินการตั้งค่าจุด


17

เป็นเรื่องปกติที่จะใช้ดัชนีเชิงพื้นที่กล่องขอบเขตเพื่อปรับปรุงประสิทธิภาพเมื่อทำงานกับคุณลักษณะจำนวนมาก มีการดำเนินการที่ไหนเมื่อเทียบกับรูปทรงเรขาคณิตที่มีจุดยอดมาก ๆ

ตัวอย่างเช่นมีโครงสร้างข้อมูลใดที่สามารถเร่งความเร็วในรูปหลายเหลี่ยมหรือการดำเนินการร่วม


1
ภายใต้ประทุน GISes ใช้โครงสร้างข้อมูลพิเศษจำนวนมากรวมถึงรูปแบบต่างๆของควอดทรี, DCELs ฯลฯ ซึ่งอธิบายไว้ในตำราเรขาคณิตเชิงคำนวณ คุณกำลังถามเกี่ยวกับรายละเอียดการใช้งานเหล่านี้หรือคุณกำลังสอบถามเกี่ยวกับวิธีการที่ผู้ใช้อาจใช้ในภาษาสคริปต์?
whuber

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

Matthew นั่นเป็นคำถามที่ยอดเยี่ยม GIS ที่มุ่งเน้นประสิทธิภาพอย่างแท้จริงจะเสนอทางเลือกให้กับผู้ใช้เพื่อเตรียมโครงสร้างข้อมูลล่วงหน้าสำหรับแอปพลิเคชันซ้ำ ๆ การโฆษณาซอฟต์แวร์ตัวเองในฐานะ "GIS" มักเสนอ precomputation เช่นเดียวกับในรูปแบบของ "ดัชนีเชิงพื้นที่" ในขณะที่ซอฟต์แวร์เอนกประสงค์ที่สามารถทำการวิเคราะห์ GIS เช่นMathematica (หรือบางส่วนR) จะเสนอผู้ใช้ ควบคุมสิ่งต่าง ๆ ได้มากกว่านี้
whuber

ฉันคิดว่าปัญหานี้เกิดจาก "เศษส่วน" ของวัตถุ 2 มิติและความหนาแน่นของข้อมูลการกระจายที่ไม่แน่นอนและไม่สมดุล
huckfinn

คำตอบ:


2

ตกลงสำหรับจุดในรูปหลายเหลี่ยมเท่านั้น:

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

การจัดทำดัชนีพยายามจัดการสองสิ่ง:

  1. รูทีนที่รวดเร็วที่ให้ถังตั้งที่คุณเก็บรวบรวมวัตถุที่คุณสามารถทำให้แตกเป็นชิ้นเล็ก ๆ ได้ (ถัง!) และ BBoxes นั้นง่ายต่อการคำนวณและจัดการ

  2. ชุดของความสัมพันธ์ (ทับซ้อน, แตะ) เพื่อแยกแยะหรือเชื่อมโยงข้อมูลเชิงพื้นที่ (วัตถุ)

BBoxes โชคไม่ดีที่จะบอกให้คุณรู้ว่ามีกี่จุดใน BBox แต่ละจุดรูปร่างของวัตถุ (หลุมนูน ... ) และวิธีการกระจายข้อมูลในพื้นที่ (90% ของคะแนนที่มุมซ้ายบนของ BBox) ดังนั้นคุณอาจพบสมาชิกการดำเนินการอย่างรวดเร็วในระดับวัตถุและหลวมหลายครั้งในการสร้างความสัมพันธ์ของการทดสอบ

ในการใช้วิธีการที่ผิดปกติยิ่งขึ้นการหาสมของ IMO ร่วมกับและควอดทรีนั้นเป็นเรื่องของกลยุทธ์ที่คุณสามารถนำบัคกิ้งและส่วนสร้างความสัมพันธ์ของดัชนีเข้าด้วยกัน (bucketing == การสร้างความสัมพันธ์)

สำหรับตัวอย่างจุดทดสอบรูปหลายเหลี่ยมเป็นไปได้ที่จะสร้างแคชที่ไม่สม่ำเสมอโดยใช้:

  1. ! delaunay triangulation แบบ จำกัด ของฝาปิดโพลีของคุณพร้อมด้วยจุดตาข่ายเพิ่มเติมสำหรับการตรวจจับฝาครอบด้านนอก
  2. ใส่สิ่งนี้ลงในรูปแบบการจัดทำดัชนีแบบควอดทรีที่มีไม่เกิน N สามเหลี่ยมต่อกล่อง (ถังเศษส่วน)
  3. ค้นหาชุดรูปสามเหลี่ยมซึ่งจุดเป็นของ - ใบไม้ในรูปสี่เหลี่ยม
  4. หาสามเหลี่ยมที่จุดนั้นอยู่ (ส่วนทดสอบเกินสามเหลี่ยม N สูงสุด)
  5. และขอรหัสรูปหลายเหลี่ยมของจุดยอดสามเหลี่ยม
  6. ถ้า ID นั้นไม่ซ้ำกันจุดนั้นจะเป็นของรูปหลายเหลี่ยมถ้าไม่ใช่มันจะอยู่นอก

ต้นทุนในการสร้างดีบุกและควอดทรีนั้นสูงมากและยากต่อการคำนวณและควอดทรีต้องทรงตัวสามเหลี่ยมขนาดใหญ่และเล็ก (สามเหลี่ยมที่ไม่พอดีกับกล่องทรีย่อยขนาดเล็ก)

เครื่องมือและลิงค์:

สามเหลี่ยม - การหาสามเหลี่ยมหลายเหลี่ยมแบบ จำกัด

Quadtrees - พร้อมด้วยตัวอย่างแหล่งที่มา

พื้นที่เก็บข้อมูล Stony Brook - โครงสร้างข้อมูลและเรขาคณิตแบบแยกส่วน

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