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?)
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.
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}
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ć.
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.
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ął.
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)
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