โครงสร้างข้อมูลในอุดมคติสำหรับจัดเก็บข้อมูลแผนที่หรือไม่


12

ฉันถูกถามเรื่องนี้ในแบบทดสอบการสัมภาษณ์ ฉันทำแบบทดสอบไม่เป็นไร แต่ก็ไม่รู้พอที่จะตอบคำถามนี้ ฉันอยากรู้ว่าโครงสร้างข้อมูลใดที่ฉันสามารถใช้เพื่อสืบค้นข้อมูลได้อย่างรวดเร็ว

โดยพื้นฐานแล้วความคิดคือจะมีส่วนของถนน (เส้นประกอบไปด้วยคะแนน) ที่จัดเก็บในโครงสร้างข้อมูลบางประเภท ควรค้นหาอย่างรวดเร็วว่าส่วนใดของถนน (หรือจุด) อยู่ในระยะทางที่แน่นอนจากจุด (รัศมี)


หากต้องการเรียนรู้เพิ่มเติมฉันจะอ่านบน: cgal.orgจากนั้นดูโครงการเหล่านี้: cgal.org/projects.html#gisค้นหาสิ่งที่คล้ายกับสิ่งที่คุณต้องการจากนั้นศึกษาการใช้ API และสุดท้าย แต่งหน้าของ API
งาน

คำตอบ:


16

วิธีทั่วไปในการจัดเก็บข้อมูลทางภูมิศาสตร์ด้วยโครงสร้างข้อมูลเชิงพื้นที่เช่นต้นไม้ R (หรือตัวแปรบางอย่างเช่นต้นไม้ R +, ต้นไม้ R * เป็นต้น) นี่คือวิธีที่ชนิดข้อมูลทางภูมิศาสตร์ใน GIS สามารถใช้งานได้ตามปกติ RDBMS (ฉันรู้ว่าทั้ง SQL Server 2008 และ PostGIS ของ Microsoft ใช้ R-trees สำหรับประเภททางภูมิศาสตร์) พวกมันตอบสนองความต้องการขั้นพื้นฐานทั้งหมดที่คุณอธิบายไว้และสนับสนุนจุดตัดตำแหน่งระยะทางและประเภทการสืบค้นอื่น ๆ

ทั้งนี้ขึ้นอยู่กับประเภทของข้อมูลคุณอาจพบสิ่งต่าง ๆ เช่น kD-trees, quad-tree, octrees, ลำดับชั้นของไดรฟ์ข้อมูลที่มีขอบเขต (รวมถึงทรีบ็อกซ์ที่จัดแนวแกน) ฯลฯ โดยทั่วไป นี่เป็นเรื่องธรรมดามากขึ้นในเกม 3 มิติเนื่องจากขนาดและรูปร่างของวัตถุมีความเกี่ยวข้องกับข้อความค้นหาแบบจุดตัด พวกเขามักใช้ GIS น้อยกว่า R-trees


0

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

  1. ให้จุดค้นหาถนนที่ใกล้ที่สุดจุดนั้น
  2. ให้พื้นที่ทางภูมิศาสตร์ที่มีขนาดที่แน่นอนหาถนนทั้งหมดที่อยู่ในพื้นที่นั้น
  3. ให้ถนนสองเส้นหาเส้นทางที่สั้นที่สุดระหว่างพวกเขา

ความแตกต่างของข้อกำหนดต่าง ๆ นั้นเพียงพออย่างยิ่งที่หากไม่มีใครจะต้องรองรับการเปลี่ยนแปลง "สด" ในแผนที่หนึ่งจะดีกว่าด้วยการจัดเก็บสำเนาข้อมูลสามชุดแยกกัน - แต่ละชุดได้รับการปรับให้เหมาะกับงานใดภารกิจหนึ่งด้านบน - ที่จะเกิดขึ้นกับรูปแบบที่สามารถจัดการกับทั้งสามงานได้ดี

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