2012-06-14 38 views
12

Tôi cần lưu trữ tọa độ GPS trong cơ sở dữ liệu. Tôi đã nghe rằng phao nổi không chính xác hơn số thập phân. Điều đó có đúng không? Nếu vậy, lý do gì là có bao giờ sử dụng nổi?Rails 3 Float hoặc thập phân cho tọa độ GPS

Trả lời

12

Nếu bạn muốn tọa độ GPS chính xác hơn, sau đó có số thập phân là con đường để đi. Bạn có thể tạo chúng bằng cách di chuyển như:

create_table "models" do |t| 
    t.decimal "latitude", :precision => 15, :scale => 10, :default => 0.0 
    t.decimal "longitude", :precision => 15, :scale => 10, :default => 0.0 
end 

Lý do mọi người sử dụng phao là chúng thường đủ chính xác cho hầu hết trường hợp sử dụng và sử dụng ít không gian hơn để lưu trữ.

+0

@jac Vui lòng xem: 'http: // www.ruby-forum.com/topic/208222' và tại sao số thập phân không giải quyết được sự cố của bạn. – Anil

+0

@Anil không chắc chắn tôi theo dõi. Tôi sử dụng điều này trong ứng dụng của tôi thay vì nổi cho các tọa độ GPS chính xác cao hơn và nó hoạt động chính xác như tôi mong đợi nó. –

1

Nếu bạn muốn chính xác 100% với số thập phân của mình, hãy nhân với 10 ** n (trong đó n là độ chính xác mong muốn của bạn) và lưu trữ dưới dạng số nguyên.

Đối tượng nổi thể hiện số thực không chính xác bằng cách sử dụng biểu diễn dấu phẩy động kép chính xác của kiến ​​trúc gốc.

Xem:

http://www.ruby-doc.org/core-1.9.3/Float.html 
24

Kể từ Trái đất xích đạo chu vi khoảng 40000 km và vĩ độ bắc 360 độ, nó sau đó gần đường xích đạo 1 độ tương đương với khoảng 110 km.

Như vậy:

  • 0 chữ số chính xác: ± 110 km
  • 1 chữ số chính xác: ± 11 km
  • 2 chữ số chính xác: ± 1,1 km
  • 3 chữ số chính xác: ± 110 m
  • Độ chính xác 4 chữ số: ± 11 m
  • Độ chính xác 5 chữ số: ± 1,1 m
  • Độ chính xác 6 chữ số: ± 11 cm
  • 7 chữ số chính xác: ± 1.1 cm

Tuy nhiên, bạn càng gần chuyển sang Ba Lan, nhỏ hơn lenghts của song song trở thành. Ví dụ: Paris, có vĩ độ 48 độ, 1 độ tương đương với cos(48) * 110 = 74 km.

Như vậy:

  • 0 chữ số chính xác: ± 74 km
  • 1 chữ số chính xác: ± 7.4 km
  • 2 chữ số chính xác: ± 0,74 km
  • 3 chữ số chính xác: ± 74 m
  • Độ chính xác 4 chữ số: ± 7,4 m
  • Độ chính xác 5 chữ số: ± 0,74 m
  • 6 chữ số precisio n: ± 7.4 cm
  • Độ chính xác 7 chữ số: ± 0.74 cm

Vì vậy, trường loại DECIMAL(10,7) sẽ đủ để làm hài lòng bạn một cách chính xác hơn.

+1

https://en.wikipedia.org/wiki/Decimal_degrees –

1

Như bạn có thể thấy trong câu trả lời của Paul, điều đó tùy thuộc vào trường hợp sử dụng của bạn.
Một phao cung cấp độ chính xác khoảng 6 chữ số thập phân.
± 11 cm hoàn toàn có thể chấp nhận được đối với địa chỉ. và nếu bạn đang hiển thị địa chỉ, bạn sẽ không thể thực hiện bất kỳ phép toán số học nào mà sẽ làm tròn các lỗi làm tròn.

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