ชนิดข้อมูลสำหรับการจัดเก็บ lng / lat ใน MySQL


14

ฉันกำลังจัดเก็บรายการ lnt / lat points จำนวนมากในฐานข้อมูล MySQL ในขณะนี้เป็นจุดที่คาดการณ์สำหรับสหราชอาณาจักรใน M แต่ในระยะยาวฉันต้องการตรวจสอบให้แน่ใจว่าฉันสามารถจัดเก็บพิกัดของจุดสำหรับทั่วโลก ฉันควรใช้ประเภทข้อมูลประเภทใด

ผมเริ่มใช้แต่ก็ไม่แน่ใจว่ามีความแม่นยำนี้เป็นสิ่งจำเป็นหรือไม่ว่าฉันสามารถใช้decimal(18,12) floatฉันรวมรหัสของฉันในกรณีที่มีสิ่งอื่นที่ฉันควรพิจารณา:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

ฉันค่อนข้างใหม่กับ SQL ดังนั้นฉันไม่แน่ใจว่าประเภทข้อมูลนั้นสำคัญเมื่อเรียกใช้แบบสอบถามหรือไม่ ฉันคิดว่าหน่วยความจำโดยรวมจะแตกต่างกันไปตามประเภทของตัวแปร มีประโยชน์ของการใช้ฐานข้อมูลเชิงพื้นที่ผ่านฐานข้อมูล MySQL พื้นฐานสำหรับงานประเภทนี้หรือไม่?

คำตอบ:


16

คำถามนี้ถูกถามใน StackOverlowด้วย

คำตอบด้านบนแสดงให้เห็นMySQL เชิงพื้นที่ส่วนขยาย มีภาระของการเชื่อมโยงการทำงานร่วมกับส่วนขยายเหล่านี้ที่นี่

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

ในตัวอย่างรหัสจาก Google ที่แสดงคะแนนบนแผนที่พวกเขาระบุ:

เมื่อคุณสร้างตาราง MySQL คุณต้องการให้ความสนใจเป็นพิเศษกับแอตทริบิวต์ lat และ lng ด้วยความสามารถในการซูมปัจจุบันของ Google แผนที่คุณควรต้องการความแม่นยำ 6 หลักหลังจุดทศนิยม

เพื่อรักษาพื้นที่เก็บข้อมูลที่จำเป็นสำหรับตารางของเราให้น้อยที่สุดคุณสามารถระบุว่าแอตทริบิวต์ lat และ lng เป็นขนาดลอยตัว (10,6) นั่นจะทำให้เขตข้อมูลเก็บ 6 หลักหลังจุดทศนิยมรวมถึง 4 หลักก่อนจุดทศนิยมเช่น -123.456789 องศา

ฉันจะไม่กังวลเกี่ยวกับความแตกต่างของประสิทธิภาพระหว่างประเภทตัวเลข ดัชนีที่ดีจะมีผลกระทบที่ยิ่งใหญ่กว่ามาก


+1 สำหรับคำตอบที่ดี! นี่คือสิ่งที่ฉันจะพูดและทำ
OptimizePrime

ขอบคุณสำหรับคำตอบ - ฉันอ่านเอกสาร MySQL Spatial Extensions แล้วคุณจะเริ่มใช้มันอย่างไร ฉันเพิ่งมีฐานข้อมูล MySQL เริ่มต้นบน GoDaddy; ฉันไม่รู้ว่าควรเริ่มจากตรงไหน
djq


1
และตอบรับอัปเดตพร้อมลิงก์ไปยังลิงก์เพิ่มเติม
geographika

ทำไมต้องเป็นเลขจำนวนเต็ม 4 หลัก
Alix Axel

6

หากคุณไม่ได้เชื่อมโยงกับ MySQL ด้วยเหตุผลอื่นคุณควรพิจารณาใช้ฐานข้อมูลเชิงพื้นที่เช่น postgis ซึ่งมีวัตถุ Point (และ Line, Polygon ฯลฯ ) เพื่อจัดการรายละเอียดเหล่านี้ให้คุณ คุณยังได้รับการสนับสนุนการฉายเมื่อคุณเปลี่ยนแปลงโลกทั้งใบ

2019 : สำหรับคนอย่างฉันที่ยังไม่ได้อ่านความคิดเห็น - MySQL รองรับประเภทข้อมูลเชิงพื้นที่ซึ่งช้ากว่าที่คาดการณ์โดยไม่มีหลักฐาน


หมายเหตุ: สำหรับผู้ที่ยังใหม่และอ่านข้างต้นตอนนี้ MySql 5.7+ ทำงานร่วมกับดัชนีเชิงพื้นที่ได้แล้ว
HopeKing

แต่มันยังคงช้า
Ian Turton

คุณช่วยด้วยทรัพยากรที่แสดงว่าช้าแค่ไหน? ฉันกำลังพิจารณาที่จะใช้มันในโครงการที่มีบันทึกน้อยกว่าหนึ่งล้านรายการ ขอบคุณ
HopeKing

ประสบการณ์ส่วนตัวไม่มีข้อมูลสาธารณะ มีปัญหามากเกินไปเกี่ยวกับรูปทรงเรขาคณิตที่ไม่ถูกต้อง ฯลฯ สิ่งที่ทำลาย
Ian Turton

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