TL;DR
Sử dụng Float [8,5] nếu bạn không làm việc trong NASA / quân đội và không chế tạo hệ thống máy bay Navi.
Để trả lời đầy đủ câu hỏi của bạn, bạn cần xem xét một số điều:
Định dạng
- độ: 40° 26′ 46″ N 79° 58′ 56″ W
- Biên bản thập phân: 40 ° 26.767 N 79 ° 58.933 W W: 40° 26.767′ N 79° 58.933′ W
- độ thập phân 1: 40.446 ° N 79,982 ° W: 40.446° N 79.982° W
- độ thập phân 2: -32.60875, 21.27812: -32.60875, 21.27812
- Một số định dạng làm nhà khác? Không ai cấm bạn tạo hệ thống tọa độ trung tâm nhà của riêng bạn và lưu trữ nó như là hướng đến và khoảng cách từ nhà của bạn. Điều này có thể có ý nghĩa đối với một số vấn đề cụ thể mà bạn đang làm việc.
Vì vậy, phần đầu tiên của câu trả lời sẽ là - bạn có thể lưu trữ tọa độ theo định dạng ứng dụng của bạn sử dụng để tránh chuyển đổi liên tục qua lại và thực hiện các truy vấn SQL đơn giản hơn.
Hầu hết có lẽ bạn sử dụng Google Maps hoặc OSM để hiển thị dữ liệu của mình và GMAP đang sử dụng định dạng "độ 2 của thập phân 2". Vì vậy, sẽ dễ dàng hơn để lưu trữ tọa độ theo cùng một định dạng.
Độ chính xác
Sau đó, bạn muốn xác định độ chính xác mà bạn cần. Tất nhiên bạn có thể lưu trữ các tọa độ như "-32.608697550570334,21.278081997935146", nhưng bạn đã bao giờ quan tâm đến milimet trong khi điều hướng đến điểm chưa? Nếu bạn không làm việc ở NASA và không làm vệ tinh hoặc tên lửa hoặc quỹ đạo máy bay, bạn sẽ ổn với độ chính xác vài mét.
Định dạng thường được sử dụng là 5 chữ số sau các dấu chấm mang lại độ chính xác 50cm.
Ví dụ: Có khoảng cách 1cm giữa X, 21.2780818 và X, 21.2780819. Vì vậy, 7 chữ số sau khi DOT cung cấp cho bạn độ chính xác 1/2cm và 5 chữ số sau khi DOT sẽ cung cấp cho bạn độ chính xác 1/2 mét [vì khoảng cách tối thiểu giữa các điểm riêng biệt là 1m, do đó, lỗi làm tròn không thể hơn một nửa]. Đối với hầu hết các mục đích dân sự, nó là đủ.8 and X,21.2780819. So 7 digits after dot give you 1/2cm precision and 5 digits after dot will give you 1/2 meters precision [because minimal distance between distinct points is 1m, so rounding error cannot be more than half of it]. For most civil purposes it should be enough.
độ của số lượng thập phân định dạng [40 ° 26.767 N 79 ° 58.933 W] cung cấp cho bạn độ chính xác giống như 5 chữ số sau khi chấm
Lưu trữ hiệu quả không gian
Nếu bạn đã chọn định dạng thập phân, thì tọa độ của bạn là một cặp [-32.60875, 21.27812]. Rõ ràng, 2 x [1 bit cho dấu hiệu, 2 chữ số cho độ và 5 chữ số cho số mũ] sẽ là đủ.
Vì vậy, ở đây tôi muốn hỗ trợ Alix Axel từ các bình luận nói rằng đề xuất của Google để lưu trữ nó trong phao [10,6] thực sự là thêm, bởi vì bạn không cần 4 chữ số cho phần chính [vì dấu hiệu được tách ra và Latitude bị hạn chế đến 90 và kinh độ được giới hạn ở 180]. Bạn có thể dễ dàng sử dụng phao [8,5] cho độ chính xác 1/2m hoặc phao [9,6] cho độ chính xác 50/2cm. Hoặc thậm chí bạn có thể lưu trữ LAT và dài trong các loại tách, vì Float [7,5] là đủ cho LAT. Xem tham chiếu loại float MySQL. Bất kỳ ai trong số họ sẽ giống như phao bình thường và bằng 4 byte.Alix Axel from comments saying that Google suggestion to store it in FLOAT[10,6] is really extra, because you don't need 4 digits for main part [since sign is separated and latitude is limited to 90 and longitude is limited to 180]. You can easily use FLOAT[8,5] for 1/2m precision or FLOAT[9,6] for 50/2cm precision. Or you can even store lat and long in separated types, because FLOAT[7,5] is enough for lat. See MySQL float types reference. Any of them will be like normal FLOAT and equal to 4 bytes anyway.
Thông thường không gian không phải là một vấn đề ngày nay, nhưng nếu bạn muốn thực sự tối ưu hóa lưu trữ vì một lý do nào đó [từ chối trách nhiệm: Đừng tối ưu hóa trước], bạn có thể nén LAT [không quá 91 000 giá trị + dấu hiệu] Hơn 181 000 giá trị + dấu hiệu] đến 21 bit nhỏ hơn đáng kể so với 2xfloat [8 byte == 64 bit]
Đăng ký nhận bản tin của tôi và không bao giờ bỏ lỡ các bài viết sắp tới của tôi
Trình duyệt của bạn không hỗ trợ các yếu tố âm thanh.
Nhiều lần chúng tôi nắm bắt vị trí địa lý của người dùng và lưu trữ trong cơ sở dữ liệu cho các trường hợp sử dụng khác nhau. Tôi đã thấy rằng hầu hết các nhà phát triển sử dụng nhiều trường để lưu trữ vĩ độ và kinh độ riêng biệt như Table_name[field1, field2, ..., latitude, longitude]
.
Trong bài viết ngắn này, chúng ta sẽ thấy một cách thay thế để lưu trữ tọa độ trong cơ sở dữ liệu MySQL bằng cách sử dụng các loại dữ liệu không gian như POINT
.
Tạo một bảng
- Hãy để chúng tôi tạo một bảng có tên
locations
. - Trường
coordinates
của loại dữ liệuPOINT
.
CREATE TABLE locations [
id INT[11] NOT NULL AUTO_INCREMENT,
coordinates POINT,
PRIMARY KEY [id]
];
Chèn tọa độ
- Để chèn/cập nhật trường
coordinates
, chúng ta cần chuẩn bị một chuỗi như thế này'POINT[latitude longitude]'
. - Sau đó, chúng tôi sẽ sử dụng hàm được xây dựng được gọi là
0 để tạo hình học trong SRID đã cho từ đặc tả WKT.INSERT INTO locations [coordinates] VALUES [ST_GeomFromText['POINT[21.67890 91.54789]'];
- Chuyển chuỗi các điểm đã chuẩn bị vào hàm
0.INSERT INTO locations [coordinates] VALUES [ST_GeomFromText['POINT[21.67890 91.54789]'];
INSERT INTO
locations [coordinates]
VALUES
[ST_GeomFromText['POINT[21.67890 91.54789]'];
Bảng sẽ lưu trữ và hiển thị dữ liệu theo cách sau
id coordinates
1 POINT[21.67890 91.54789]
Ngoài ra, hãy kiểm tra điều này để biết cách bắt giữ vị trí địa lý của người dùng trong trình duyệt web.
Cảm ơn bạn đã đọc 🙏
Nếu bạn thích bài viết này hoặc thấy nó hữu ích, hãy cho nó một ngón tay cái 👍
Hãy kết nối 👋
Twitter | Instagram | LinkedIn