Các kiểu dữ liệu để lưu trữ lng / lat trong MySQL


14

Tôi đang lưu trữ một danh sách lớn các điểm lnt / lat trong cơ sở dữ liệu MySQL. Hiện tại đây là những điểm được dự kiến ​​cho Vương quốc Anh ở M, nhưng về lâu dài tôi muốn đảm bảo rằng tôi có thể lưu trữ tọa độ các điểm cho toàn thế giới. Tôi nên sử dụng kiểu dữ liệu nào?

Tôi bắt đầu sử dụng decimal(18,12), nhưng không chắc liệu độ chính xác này là cần thiết hay liệu tôi chỉ có thể sử dụng a float. Tôi đã bao gồm mã của mình, trong trường hợp có bất kỳ điều gì khác tôi nên xem xét:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

Tôi còn khá mới với SQL nên tôi không chắc liệu kiểu dữ liệu có đáng kể khi chạy truy vấn hay không. Tôi giả định rằng bộ nhớ tổng thể sẽ thay đổi dựa trên loại biến. Có lợi ích gì khi sử dụng cơ sở dữ liệu không gian trên cơ sở dữ liệu MySQL cơ bản cho loại công việc này không?

Câu trả lời:


16

Câu hỏi này cũng đã được hỏi trên StackOverlow .

Câu trả lời hàng đầu cho thấy phần mở rộng không gian MySQL . Có rất nhiều liên kết để làm việc với các phần mở rộng ở đây .

Nếu bạn không muốn sử dụng các loại không gian và bạn đang nhận các giá trị từ đơn vị GPS hoặc dịch vụ mã hóa địa lý thì bạn có thể khớp độ chính xác thập phân của mình với nguồn dữ liệu. Một nguyên tắc chung là lưu trữ dữ liệu với độ chính xác của hai nơi lớn hơn bạn sẽ hiển thị nó trong một ứng dụng.

Trong một ví dụ mã từ Google hiển thị các điểm trên bản đồ, họ nêu:

Khi bạn tạo bảng MySQL, bạn muốn đặc biệt chú ý đến các thuộc tính lat và lng. Với khả năng thu phóng hiện tại của Google Maps, bạn chỉ cần 6 chữ số chính xác sau số thập phân.

Để giữ không gian lưu trữ cần thiết cho bảng của chúng tôi ở mức tối thiểu, bạn có thể chỉ định rằng các thuộc tính lat và lng có kích thước nổi (10,6). Điều đó sẽ cho phép các trường lưu trữ 6 chữ số sau số thập phân, cộng với tối đa 4 chữ số trước số thập phân, ví dụ: -123,456789 độ

Tôi sẽ không lo lắng về sự khác biệt hiệu suất giữa các loại số. Chỉ số Decent sẽ có tác dụng lớn hơn nhiều.


+1 cho câu trả lời hay! Đây là những gì tôi sẽ nói và làm.
OptimizePrime

Cảm ơn câu trả lời - Tôi đã đọc qua tài liệu Phần mở rộng không gian của MySQL, nhưng làm thế nào để bạn bắt đầu sử dụng chúng? Tôi chỉ có một DB DB mặc định trên GoDaddy; Tôi không biết mình nên bắt đầu từ đâu.
djq


1
Và câu trả lời được cập nhật với một liên kết đến nhiều liên kết hơn
geographika

Tại sao 4 chữ số nguyên?
Alix Axel

6

Trừ khi bạn bị ràng buộc với MySQL vì một số lý do khác, bạn thực sự nên xem xét sử dụng cơ sở dữ liệu được kích hoạt không gian như postgis có đối tượng Point (và Line, Polygon, v.v.) để xử lý các chi tiết này cho bạn. Bạn cũng nhận được hỗ trợ chiếu khi bạn thực hiện thay đổi đó cho toàn thế giới.

2019 : Đối với những người như tôi cũng không đọc bình luận - MySQL hỗ trợ các loại dữ liệu không gian, được cho là chậm hơn, không có bằng chứng.


Lưu ý: Đối với những người mới và đang đọc phần trên, MySql 5.7+ hiện hoạt động với Chỉ mục không gian.
HopeKing

nhưng nó vẫn chậm
Ian Turton

Bạn có thể vui lòng giúp đỡ với các tài nguyên cho thấy làm thế nào chậm? Tôi đang xem xét sử dụng nó trên một dự án có ít hơn một triệu hồ sơ. Cảm ơn.
HopeKing

kinh nghiệm cá nhân không có dữ liệu công khai. Quá nhiều vấn đề với hình học không hợp lệ, v.v ... phá vỡ mọi thứ
Ian Turton

Cảm ơn. Nhu cầu của tôi chỉ là khoảng cách giữa các điểm dựa trên các bản ghi cơ sở dữ liệu (và không có yêu cầu phức tạp nào như Polygon) - hiện tại có thể sẽ an toàn để sử dụng mysql.
HopeKing
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.