Poprawny typ danych dla szerokości i długości geograficznej? (w activerecord)

Czy powinienem przechowywać szerokość i długość geograficzną jako ciągi lub pływaki (lub coś innego)?

(używam activerecord / ruby on rails, jeśli to ma znaczenie).

Update:

Mysql w rozwoju i postgresql w produkcji (dlaczego to ma znaczenie?)

Author: Abel, 2009-07-28

6 answers

Jeśli potrzebujesz wykonać bardziej złożone obliczenia geograficzne, możesz zbadać PostGIS dla Postgresql lub MySQL Spatial Extensions dla MySQL. W przeciwnym razie float (Podwójna precyzja może być dobrym pomysłem) powinien działać.

Edit: wygląda na to, że biblioteka GeoRuby zawiera rozszerzenie Rails do pracy z rozszerzeniami spatial/GIS dla obu wyżej wymienionych baz danych.

 23
Author: Greg Campbell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-10 05:49:12

Tego używam:

add_column :table_name, :lat, :decimal, {:precision=>10, :scale=>6}
add_column :table_name, :lng, :decimal, {:precision=>10, :scale=>6}
 150
Author: Gokul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-25 04:19:16

Jeśli nie korzystasz z bazy danych, Google Maps Zaleca używanie pływaków o rozmiarze (10,6). Daje to 6 cyfr po przecinku - jeśli chcesz uzyskać większą precyzję, możesz odpowiednio dostosować.

 21
Author: Chris B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-29 22:03:34

Sugerowałbym użycie pływaków, chociaż to nie robi tak wielkiej różnicy. Pływaki są łatwiejsze do obliczenia, jeśli kiedykolwiek pragniesz, że w przyszłości.

 3
Author: Mike Trpcic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 19:27:39

Zazwyczaj chcesz, aby Lat / Long był przechowywany w największym typie float, jaki masz. Na niektórych szerokościach geograficznych (np. w pobliżu równika) bardzo małe zmiany długości geograficznej mogą równać się dużym różnościom w zakresie odległości powierzchniowej.

Przypuszczam, że jeśli jest to pole, na którym nigdy nie będziesz chciał zrobić żadnej matematyki, możesz użyć ciągu znaków. Ale tego bym uniknął.

 2
Author: T.E.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 20:10:55

Ponieważ są one stałą precyzją, należy przekonwertować i zapisać jako liczba całkowita dla znaczącej poprawy wydajności.

(Zobacz http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL)

 -3
Author: Yarin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 22:28:33