Return the centre of the image if the bbox has no extent

Fixes #3007. If all the provided points in the gpx file have the same
lat/lon, then an image where they are all at the centre seems plausible.
This commit is contained in:
Andy Allan 2020-12-23 15:01:01 +00:00
parent 279787943e
commit 2519841efe
2 changed files with 20 additions and 0 deletions

View file

@ -378,12 +378,17 @@ module OSM
end
# and these two will give you the right points on your image. all the constants can be reduced to speed things up. FIXME
# If the bbox has no extent, return the centre of the image to avoid dividing by zero.
def y(lat)
return @height / 2 if (@by - @ty).zero?
@height - ((ysheet(lat) - @ty) / (@by - @ty) * @height)
end
def x(lon)
return @width / 2 if (@bx - @tx).zero?
((xsheet(lon) - @tx) / (@bx - @tx) * @width)
end
end

15
test/lib/osm_test.rb Normal file
View file

@ -0,0 +1,15 @@
require "test_helper"
class OsmTest < ActiveSupport::TestCase
def test_mercator
proj = OSM::Mercator.new(0, 0, 1, 1, 100, 200)
assert_in_delta(50, proj.x(0.5), 0.01)
assert_in_delta(100, proj.y(0.5), 0.01)
end
def test_mercator_collapsed_bbox
proj = OSM::Mercator.new(0, 0, 0, 0, 100, 200)
assert_in_delta(50, proj.x(0), 0.01)
assert_in_delta(100, proj.y(0), 0.01)
end
end