2008-11-16 39 views
5

Tôi biết bưu cục có một kiểu dữ liệu để lưu trữ tọa độ địa lý. Nhưng tôi đang tìm một giải pháp bất khả tri của RDBMS. Hiện tại tôi đang sử dụng thập phân (25,20) trong MySQL. Tôi có thể đang sử dụng dữ liệu này để tra cứu các vị trí này dựa trên khoảng cách nhất định từ một vị trí nhất định sau đó. Đó sẽ là phương pháp tốt nhất để lưu trữ loại dữ liệu này?Cách hiệu quả nhất để lưu trữ địa lý trong cơ sở dữ liệu

Trả lời

1

Tiêu chuẩn là here. Mặc dù nó quá nhiều cho một trường hợp sử dụng đơn giản như của bạn, nó có thể cung cấp cho bạn một số ý tưởng về lý do tại sao nó thực sự là tốt nhất để đi và sử dụng một số gói tuân thủ OGC nhiều cơ sở dữ liệu hiện nay, thậm chí MySQL.

Nếu không, và giả sử bạn sẽ thực hiện các thuật toán để tính toán khoảng cách, bất kỳ số dấu phẩy động nào có độ chính xác bạn cần sẽ hoạt động.

5

Một kỹ thuật tốt khác là nhân giá trị theo hằng số và lưu trữ chúng dưới dạng giá trị số nguyên. Chỉ sử dụng số nguyên cũng có thể giúp tăng tốc độ tính toán.

Trừ khi bạn có nhu cầu nghiêm trọng về độ chính xác, bạn thực sự chỉ cần lưu trữ hơn 5 giá trị sau dấu thập phân.

Điều này Latitude Longitude Data Storage Specification cung cấp biểu đồ hiển thị độ chính xác so với số thập phân.

# decmal places, example, precision 
5 51.22135 ± 0.8 m 
6 50.895132 ± 0.08 m 

7 sẽ hoạt động là 8mm hoặc khoảng 0,314 inch.

0

Theo dõi câu trả lời @vfilby's, tại sao không lưu hai nửa số này dưới dạng hai loại int riêng biệt?

1

AFAIK, MS SQL Server 2008 có hỗ trợ GeoLocations dưới dạng DataType. Tôi biết bạn đang sử dụng MySQL, nhưng chỉ nghĩ rằng tôi muốn đề cập đến nó về câu hỏi này.

+0

DataTypes là GEOGRAPHY và GEOMETRY. Anh ta muốn dùng GEOGRAPHY. –

0

Tôi luôn sử dụng các cột dấu phẩy động 4 byte để lưu vĩ độ và kinh độ, vì lỗi chính xác ít hơn nhiều so với độ chính xác của các thiết bị chúng tôi sử dụng. Đây có thể không phải là trường hợp với ứng dụng của bạn, nhưng nếu bạn không thể có nhiều RDBMS-thuyết bất khả tri hơn là một phao.

1

vfilby's answer có lẽ là tốt nhất, tuy nhiên nhiều RDBMS có hỗ trợ tốt hơn cho chỉ mục nhân vật lĩnh vực hơn chỉ mục dày đặc số nguyên (hoặc dấu chấm động) lĩnh vực. Vì lý do này một mình, tôi có thể khuyên bạn nên chuyển đổi dữ liệu đầu tiên: Nếu bạn muốn tìm các giá trị "gần" một giá trị khác, bạn cũng sẽ muốn có một chức năng bảo toàn điều này- có lẽ bằng cách chuyển đổi sang base36 và _ -đăng nhập dấu thập phân, nhưng nếu bạn chỉ cần một kết hợp chính xác, gần như bất kỳ hàm băm nhanh nào cũng sẽ làm.

Một lần nữa: Nếu bạn không có nhiều dữ liệu hoặc bạn không sử dụng RDBMS như thế này, hãy làm những gì vfilby suggested.

Các vấn đề liên quan