Muszę przechowywać współrzędne GPS w bazie danych. Słyszałem, że pływaki są mniej dokładne niż ułamki dziesiętne. Czy to prawda? Jeśli tak, to dlaczego używacie pływaków?Szyny 3 Pływakowe lub dziesiętne dla współrzędnych GPS
Odpowiedz
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.
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
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.
https://en.wikipedia.org/wiki/Decimal_degrees –
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.
@jac Zobacz: 'http: // www.ruby-forum.com/topic/208222' i dlaczego dziesiętny nie rozwiązuje twojego problemu. – Anil
@ 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ę. –