]> git.openstreetmap.org Git - rails.git/commitdiff
Use bigdecimal to avoid scientfic notation in DMS decoding
authorTom Hughes <tom@compton.nu>
Sun, 7 Jul 2024 13:44:45 +0000 (14:44 +0100)
committerTom Hughes <tom@compton.nu>
Fri, 12 Jul 2024 13:43:33 +0000 (14:43 +0100)
app/controllers/geocoder_controller.rb

index 0dabc5a62de2225b7c95441f1a6e35f09456bcb4..3127622166a02a69e731fe384bcd10741128f5fb 100644 (file)
@@ -226,18 +226,18 @@ class GeocoderController < ApplicationController
 
   def to_decdeg(captures)
     ns = captures.fetch("ns").casecmp("s").zero? ? -1 : 1
-    nsd = captures.fetch("nsd", "0").to_f
-    nsm = captures.fetch("nsm", "0").to_f
-    nss = captures.fetch("nss", "0").to_f
+    nsd = BigDecimal(captures.fetch("nsd", "0"))
+    nsm = BigDecimal(captures.fetch("nsm", "0"))
+    nss = BigDecimal(captures.fetch("nss", "0"))
 
     ew = captures.fetch("ew").casecmp("w").zero? ? -1 : 1
-    ewd = captures.fetch("ewd", "0").to_f
-    ewm = captures.fetch("ewm", "0").to_f
-    ews = captures.fetch("ews", "0").to_f
+    ewd = BigDecimal(captures.fetch("ewd", "0"))
+    ewm = BigDecimal(captures.fetch("ewm", "0"))
+    ews = BigDecimal(captures.fetch("ews", "0"))
 
     lat = ns * (nsd + (nsm / 60) + (nss / 3600))
     lon = ew * (ewd + (ewm / 60) + (ews / 3600))
 
-    { :lat => lat, :lon => lon }
+    { :lat => lat.round(6).to_s("F"), :lon => lon.round(6).to_s("F") }
   end
 end