2009-12-22 14 views
37

Tôi có trong cơ sở dữ liệu MySQL của tôi cả hai tọa độ kinh độ và vĩ độ (dữ liệu GPS).Tôi nên lưu trữ bao nhiêu chữ số đáng kể trong cơ sở dữ liệu của mình cho một tọa độ GPS?

Nó hiện được lưu trữ như:

column  type 
------------------------ 
geolat  decimal(10,6) 
geolng  decimal(10,6) 

Câu hỏi: Tôi có thực sự cần một kiểu dữ liệu lớn như decimal(10,6) đúng lưu trữ Phối hợp dữ liệu?

Vì tôi có chỉ mục kết hợp trên kinh độ và vĩ độ, kích thước chỉ mục này rất lớn. Nếu tôi có thể làm cho nó nhỏ hơn mà không ảnh hưởng bất cứ điều gì, điều đó sẽ rất tuyệt vời.

+0

Ngoài ra, tôi nhận ra rằng MySQL có một plugin SPATIAL - nhưng webhost của tôi không có cài đặt không may, vì vậy đó không phải là một tùy chọn (trong trường hợp bất kỳ ai đề xuất) – teddyk

+0

Chào mừng bạn đến với StackOverflow! Câu hỏi đầu tiên tuyệt vời. – Sampson

+0

@ Jonathan, cảm ơn! – teddyk

Trả lời

33

WGS84 mốc thường được cho dưới dạng tọa độ theo ký hiệu đầy đủ thập phân, thường là 5 chữ số thập phân, vì vậy cho vĩ độ (-90 đến +90) bạn có thể sử dụng số thập phân (7, 5) (-90.00000 đến 90.00000) kinh độ bạn có thể sử dụng số thập phân (8, 5) (-180.00000 đến 180.00000).

.00001 gives an precision of around a meter at the equator

Các DECIMAL/NUMERIC data type is a fixed precision scaled integer và cả tích cực và tiêu cực phần của dãy núi này luôn có sẵn - họ không ảnh hưởng đến độ chính xác hoặc quy mô (rõ ràng là lưu trữ cần thiết cho nó, nhưng bạn không nhận được một lựa chọn về điều đó cho DECIMAL)

+1

Dấu hiệu (dương/âm) có chiếm không gian không? ý nghĩa, sẽ không "-90.12345" mất 8 kỹ thuật số và không 7 – teddyk

+2

Có, nó chiếm không gian trong cơ sở dữ liệu, nhưng không gian cần thiết trong cơ sở dữ liệu cho một đặc tả DECIMAL cụ thể luôn cho phép một dấu hiệu. Tôi không quen thuộc với các yêu cầu lưu trữ nội bộ của MySQL, nhưng đối với SQL Server, một số thập phân mất 5 byte (1-9 chữ số)/9 byte (10-19 chữ số)/13 byte (20-28 chữ số)/17 byte (29-38 chữ số) tùy thuộc vào các chữ số chính xác được chỉ định (nó độc lập với quy mô, rõ ràng). –

+0

Google Maps hoạt động ở 6 vị trí thập phân. Phóng to nhà của bạn, nhấp chuột phải vào bản đồ, sau đó chọn "Trung tâm trên vị trí này". Nhấp vào nút liên kết ngay bên ngoài bản đồ, phía trên cùng bên trái, sau đó tìm tọa độ GPS trong URL liên kết. Đó là 6 thập phân khi tôi thử nó. – angularsen

0

Điều đó tùy thuộc vào độ chính xác mà bạn muốn khả năng định vị của mình. Rõ ràng là càng chính xác hơn và kết quả của bạn càng rộng càng rộng. Tôi muốn đề nghị giữ các giá trị của bạn lớn hơn, vì nó không thực sự là nhiều dữ liệu.

+0

Điều này chỉ để lưu trữ dữ liệu địa lý cho vị trí nhà/nhà (ứng dụng bất động sản). Vì vậy, nó không cần phải được siêu chính xác nhưng gần gũi. – teddyk

4

Tôi luôn làm việc với sáu chữ số sau dấu thập phân. Tôi đã từng làm GIS theo hợp đồng quân sự và điều này là đủ.

+0

Vì vậy, bạn đang nói rằng tôi có thể thay đổi nó thành "thập phân (6,6)" và được không? – teddyk

+0

Nhưng như Jonathan lưu ý, nó thực sự phụ thuộc vào độ chính xác mà bạn muốn. Từ sự hiểu biết của tôi, độ chính xác sáu chữ số đã đưa chúng tôi xuống một nơi nào đó khoảng +/- 1 mét. Điều này là quan trọng bởi vì chúng tôi đã theo dõi các hầm chứa đầy vũ khí hóa học. –

+1

Tôi tin rằng "10" là kích thước của toàn bộ lĩnh vực, phải không? Bạn sẽ cần phải chứa +/- xxx.xxxxxx cho kinh độ và +/- xx.xxxxxx cho vĩ độ. –

3

Hãy nhớ rằng việc giảm dữ liệu dễ dàng hơn là tăng dữ liệu. Thông thường, việc tăng độ chính xác của dữ liệu thậm chí không thể làm giảm thời gian thực hiện lại. Và sự hồi sinh có giá thành. Không biết gì khác về tình hình của bạn hoặc ngành công nghiệp, tôi sẽ nói nắm bắt càng nhiều dữ liệu/đặc trưng càng tốt.

Dữ liệu bạn thực sự sử dụng có thể được chọn từ bộ này. Nếu bạn cần một mức độ cụ thể cao hơn, bạn luôn có thể tính toán lại mà không cần phải làm lại.

Ngoài ra, tôi không chắc rằng việc lập chỉ mục dữ liệu thô là điều tốt nhất để làm vì nó không phải là tập hợp các phần tử rời rạc. Việc tạo một bảng các điểm dữ liệu ít chính xác/nhỏ hơn sẽ làm cho các chỉ mục nhỏ hơn nhiều.

+0

* Luôn luôn * hỏi loại câu hỏi này khi suy nghĩ về lưu trữ dữ liệu: Nó sẽ được sử dụng để làm gì? Chính xác/phạm vi/bất cứ điều gì là cần thiết để thực hiện điều này? – mlo

1

nếu điều này là dành cho bất động sản, bạn có thực sự có quá nhiều ngôi nhà mà 2 byte được lưu trên mỗi hàng có đáng chú ý không? Tôi sẽ giữ càng nhiều độ chính xác càng tốt trừ khi có lý do chính đáng là không.

+0

Tôi quan tâm hơn đến kích thước chỉ mục của mình vì tôi có chỉ mục kết hợp trên cả kinh độ và vĩ độ. Vì vậy, ngay bây giờ, kích thước chỉ mục của tôi là kích thước thập phân (10,6) + thập phân (10,6). Đó là rất lớn cho một chỉ mục. – teddyk

+0

sẽ trả lời với lập chỉ mục không gian - nhưng nhận thấy nhận xét của bạn cho biết bạn không thể sử dụng nó, vì vậy tại sao bạn gặp phải những vấn đề này. –

0

Tình trạng gửi GGA thông thường trong đầu ra NMEA Lat/lon chỉ là các vị trí 3decimal có độ phân giải khoảng 10m ở đường xích đạo. Một số thương hiệu thêm một chữ số phụ tùy chỉnh để cung cấp cho 1m.

4 chữ số deg.mm mm/1000 cũng phổ biến.

Nếu bạn đang sử dụng cuối chính xác cao RTK-GPS bạn có thể cần nhiều nơi hơn để có được độ chính xác mm

0

Bạn cũng có thể thử lưu trữ (và/hoặc làm việc với) tọa độ của bạn trong các đơn vị khác nhau. Một dự án tôi đã làm việc trên, tất cả các tọa độ của chúng tôi được tính bằng miliarcs giây được lưu trữ trong thời gian dài (có thể là một vài năm). Điều này đã được thực hiện một phần cho tốc độ và không gian lưu trữ (đây là một hệ thống nhúng).Nhưng cùng một logic có thể áp dụng ở đây.

0

Nếu tất cả tọa độ nằm trong một khu vực cụ thể, hãy sửa một số điểm trung tâm (nghĩa là điểm hiện tại trung bình và tròn để nhận số bạn có thể nói to) và sau đó lưu tọa độ tương ứng với điểm này. Bằng cách đó, bạn có thể bỏ qua 2-4 chữ số quan trọng đầu tiên giúp tiết kiệm lớn. Nhưng hãy nhớ xử lý dữ liệu này chỉ thông qua một Class hoặc VIEW cung cấp lại các hợp chất WGS84 thực.