Format latitudes and longitudes as %7f in XML output
authorAndy Allan <git@gravitystorm.co.uk>
Thu, 30 Mar 2017 13:30:54 +0000 (14:30 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Thu, 30 Mar 2017 13:30:54 +0000 (14:30 +0100)
This matches the double formatting in XML from cgimap. Fixes #341.

app/models/node.rb
test/models/node_test.rb

index f8559dca75d74431153342f4c4c987281a5354e8..6346907f1ef88354ee098f1ee8c72c774898b1ad 100644 (file)
@@ -185,8 +185,8 @@ class Node < ActiveRecord::Base
     add_metadata_to_xml_node(el, self, changeset_cache, user_display_name_cache)
 
     if visible?
-      el["lat"] = lat.to_s
-      el["lon"] = lon.to_s
+      el["lat"] = format("%.7f", lat)
+      el["lon"] = format("%.7f", lon)
     end
 
     add_tags_to_xml_node(el, node_tags)
index 4384c6287eb8aa0eb4730d933fe3ac9ad509f135..bd664cfca407f4e7e38692854b69f641b423d574 100644 (file)
@@ -61,6 +61,14 @@ class NodeTest < ActiveSupport::TestCase
     assert_in_delta 76.543 * OldNode::SCALE, node.longitude, 0.000001
   end
 
+  # Ensure the lat/lon is formatted as a decimal e.g. not 4.0e-05
+  def test_lat_lon_xml_format
+    node = build(:node, :latitude => 0.00004 * OldNode::SCALE, :longitude => 0.00008 * OldNode::SCALE)
+
+    assert_match /lat="0.0000400"/, node.to_xml.to_s
+    assert_match /lon="0.0000800"/, node.to_xml.to_s
+  end
+
   # Check that you can create a node and store it
   def test_create
     changeset = create(:changeset)