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:
parent
279787943e
commit
2519841efe
2 changed files with 20 additions and 0 deletions
|
@ -378,12 +378,17 @@ module OSM
|
||||||
end
|
end
|
||||||
|
|
||||||
# and these two will give you the right points on your image. all the constants can be reduced to speed things up. FIXME
|
# 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)
|
def y(lat)
|
||||||
|
return @height / 2 if (@by - @ty).zero?
|
||||||
|
|
||||||
@height - ((ysheet(lat) - @ty) / (@by - @ty) * @height)
|
@height - ((ysheet(lat) - @ty) / (@by - @ty) * @height)
|
||||||
end
|
end
|
||||||
|
|
||||||
def x(lon)
|
def x(lon)
|
||||||
|
return @width / 2 if (@bx - @tx).zero?
|
||||||
|
|
||||||
((xsheet(lon) - @tx) / (@bx - @tx) * @width)
|
((xsheet(lon) - @tx) / (@bx - @tx) * @width)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
15
test/lib/osm_test.rb
Normal file
15
test/lib/osm_test.rb
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue