2012-06-14 12 views

Odpowiedz

12

Jeśli chcesz bardziej dokładne współrzędne GPS, a następnie tak dziesiętne są do zrobienia. Można je tworzyć z migracją, takich jak:

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 

Powodem ludzie używają pływaków jest to, że zwykle są one wystarczająco precyzyjne dla większości przypadków użycia i zużywają mniej miejsca do przechowywania.

+0

@jac Zobacz: 'http: // www.ruby-forum.com/topic/208222' i dlaczego dziesiętny nie rozwiązuje twojego problemu. – Anil

+0

@ Nie jestem pewien, czy podążam. Używam tego w mojej aplikacji zamiast pływać dla lepszej dokładności współrzędnych GPS i działa dokładnie tak, jak tego oczekuję. –

1

Jeśli chcesz uzyskać 100-procentową dokładność ze swoimi miejscami dziesiętnymi, pomnóż przez 10 ** n (gdzie n jest pożądaną dokładnością) i zapisz jako liczbę całkowitą.

Obiekty zmiennoprzecinkowe reprezentują niedokładne liczby rzeczywiste przy użyciu reprezentacji zmiennoprzecinkowej o podwójnej precyzji w natywnej architekturze.

Patrz:

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

Ponieważ Ziemia równikowy obwód wynosi około 40000 km i długości rozciąga 360 stopni wynika, że ​​w pobliżu równika 1 stopni jest równoważna około 110 km.

sposób:

  • 0 cyfra dokładność: ± 110 km
  • 1 cyfra dokładność: ± 11 km
  • 2 cyfra dokładność: ± 1,1 km
  • 3 cyfrowy dokładność: ± 110 m
  • 4-cyfrowa precyzja: ± 11 m
  • 5-cyfrowa precyzja: ± 1,1 m
  • 6-cyfrowa precyzja: ± 11 cm
  • 7 cyfrowy dokładność: ± 1,1 cm

Jednak im bliżej przejścia do Polaków, tym mniejsze lenghts z równoleżników staje. Na przykład w pobliżu Paryż, który ma szerokość geograficzną 48 stopni, 1 stopień jest równoważny cos(48) * 110 = 74 km.

sposób:

  • 0 cyfra dokładność: ± 74 km
  • 1 cyfra dokładność: ± 7,4 km
  • 2 cyfra dokładność: ± 0,74 km
  • 3 cyfrowy Dokładność: ± 74 m
  • 4 cyfrowy dokładność: ± 7,4 m
  • 5 cyfrowym dokładnością: ± 0,74 m
  • 6 cyfr Precisio n: ± 7,4 cm
  • Precyzja 7-cyfrowa: ± 0.74 cm

Tak więc, pole typu DECIMAL(10,7) wystarczyłoby, aby spełnić Państwa oczekiwania.

+1

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

1

Jak widać w odpowiedzi Pawła, to zależy od twojego przypadku użycia.
Pływak zapewnia dokładność z dokładnością do 6 cyfr dziesiętnych.
± 11 cm jest całkiem do przyjęcia z, powiedzmy, adresu. a jeśli wyświetlasz adresy, jest mało prawdopodobne, że będziesz wykonywał operacje arytmetyczne, które będą się wiązać z błędami zaokrąglania.