ใช่มีวิธีที่ดีกว่า คุณจำเป็นต้องใช้ดัชนีเชิงพื้นที่ ดัชนีเหล่านี้จัดระเบียบข้อมูลเมตาเกี่ยวกับรูปทรงเรขาคณิตเพื่อกรองรูปทรงที่อยู่ไกลออกไปอย่างรวดเร็วมากประหยัดรอบการทำงานของ CPU จำนวนมากโดยหลีกเลี่ยงการคำนวณที่คุณอธิบาย คุณไม่ควรกังวลกับการใช้งานด้วยตัวคุณเองเพราะฐานข้อมูลเชิงสัมพันธ์ที่สำคัญทั้งหมดมีประเภทเรขาคณิตเชิงพื้นที่และดัชนีที่จะไปกับพวกเขา
สิ่งที่คุณต้องการค้นหาคือข้อความค้นหา "ภายใน" (ข้อความค้นหารูปทรงภายในระยะทางที่กำหนดของรูปทรงเรขาคณิตอื่น ๆ ) สิ่งเหล่านี้เป็นมาตรฐานและเป็นปัญหาที่แก้ไขได้มากและเป็นไปได้ในฐานข้อมูลทั้งหมดข้างต้น (และสร้างขึ้นในหลาย ๆ ):
- PostGIS:
ST_DWithin
- SQL Server:
STDistance
(ไม่ชัดเจนว่าดัชนีรองรับการใช้งานฟังก์ชั่นเวอร์ชั่น 3 มิติทางภูมิศาสตร์)
- Oracle:
SDO_WITHIN_DISTANCE
(นี่ไม่ได้พูดอย่างชัดเจนว่ามันจะทริกเกอร์การใช้ดัชนีฉันต้องตรวจสอบแผนคิวรีอีกครั้งคุณอาจต้องใช้การSDO_FILTER
เพื่อให้มันใช้ดัชนี
- MySQL: ยังคงหาคำตอบอยู่
วิธีแก้ปัญหาสำหรับการเรียกใช้ดัชนี
ในกรณีที่แย่ที่สุดที่คุณมีปัญหาในการทำให้ระบบใช้ดัชนีเชิงพื้นที่กับข้อความค้นหาเหล่านี้คุณสามารถเพิ่มตัวกรองเพิ่มเติมได้ คุณจะสร้างกล่องสี่เหลี่ยมจัตุรัสที่มีด้านยาว 2 * (ระยะการค้นหา) ที่กึ่งกลางที่จุดค้นหาของคุณและเปรียบเทียบกล่องขอบสี่เหลี่ยมของรูปทรงเรขาคณิตเทียบกับก่อนที่จะตรวจสอบระยะทางจริง นั่นคือสิ่งที่ PostGIS ' ST_DWithin
ด้านบนทำภายใน
ระยะทางใน GIS
ในขณะที่ดัชนีเชิงพื้นที่นั้นยอดเยี่ยมและเป็นทางออกที่ถูกต้องสำหรับปัญหาของคุณการคำนวณระยะทางอาจมีความซับซ้อนทางตรรกะ โดยเฉพาะอย่างยิ่งคุณต้องกังวลเกี่ยวกับสิ่งที่การฉาย (โดยทั่วไปพารามิเตอร์ทั้งหมดสำหรับระบบพิกัด) ข้อมูลของคุณจะถูกเก็บไว้ในประมาณการ 2D ส่วนใหญ่ (สิ่งอื่นที่นอกเหนือจากระบบพิกัดเชิงมุมเช่นประมาณการละติจูด / ลองจิจูดยาว) ต่างๆ ยกตัวอย่างเช่นเว็บถ่ายภาพ Mercator (หนึ่งใช้โดย Google, Bing และทุกผู้ให้บริการแผนที่ฐานที่สำคัญอื่น ๆ ) ขยายพื้นที่และระยะทางมากขึ้นเป็นสถานที่ที่ได้รับเพิ่มเติมจากเส้นศูนย์สูตร ฉันอาจจะผิดเพราะฉันไม่ได้รับการศึกษาอย่างเป็นทางการใน GIS แต่สิ่งที่ดีที่สุดที่ฉันเคยเห็นสำหรับการคาดการณ์ 2 มิติคือบางคนที่เจาะจงว่าสัญญาระยะทางที่ถูกต้องจากจุดเดียวที่คงที่ในโลกทั้งใบ (ไม่มันไม่สามารถใช้การฉายภาพที่แตกต่างกันสำหรับทุกข้อความค้นหาซึ่งจะทำให้ดัชนีของคุณไร้ประโยชน์)
บรรทัดล่างคือคุณต้องแน่ใจว่าคณิตศาสตร์ของคุณถูกต้อง วิธีที่ง่ายที่สุดในการทำเช่นนั้นจากมุมมองการพัฒนาคือการใช้การประมาณมุม (ซึ่งมักเรียกกันว่า "ทางภูมิศาสตร์") และฟังก์ชั่นที่สนับสนุนการทำคณิตศาสตร์โดยใช้แบบจำลองทรงกลม แต่การคำนวณเหล่านี้มีราคาแพงกว่าคู่ 2D และบางฐานข้อมูลอาจไม่สนับสนุนการจัดทำดัชนี หากคุณสามารถใช้ประสิทธิภาพที่ยอมรับได้นั่นอาจเป็นหนทางไป ตัวเลือกทั่วไปอีกประการหนึ่งคือการคาดการณ์ระดับภูมิภาค (เช่นโซน UTM) ที่ได้รับทั้งระยะทางและพื้นที่ที่ใกล้เคียงกับการแก้ไขหากข้อมูลของคุณถูก จำกัด อยู่ในส่วนใดส่วนหนึ่งของโลก สิ่งที่ดีที่สุดสำหรับแอปของคุณจะขึ้นอยู่กับข้อกำหนดเฉพาะของคุณ
สิ่งนี้ใช้ได้แม้ว่าคุณจะไม่ได้ใช้ดัชนีเชิงพื้นที่ ข้อมูลของคุณมีการฉายภาพโดยไม่คำนึงถึงเทคโนโลยีหรือเทคนิคใดที่คุณกำลังใช้หรือใช้ในอนาคตและในขณะนี้ก็มีผลกระทบต่อข้อความค้นหาและการคำนวณที่คุณทำอยู่แล้ว