Skip to content

Commit c40e7b0

Browse files
authored
Fix recovery bug
1 parent b3b6dad commit c40e7b0

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

ruby/lib/plus_codes/open_location_code.rb

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -121,23 +121,21 @@ def recover_nearest(short_code, reference_latitude, reference_longitude)
121121
code = prefix_by_reference(ref_lat, ref_lng, prefix_len) << short_code
122122
code_area = decode(code)
123123

124-
area_range = precision_by_length(prefix_len)
125-
area_edge = area_range / 2
124+
resolution = precision_by_length(prefix_len)
125+
half_res = resolution / 2
126126

127127
latitude = code_area.latitude_center
128-
latitude_diff = latitude - ref_lat
129-
if (latitude_diff > area_edge)
130-
latitude -= area_range
131-
elsif (latitude_diff < -area_edge)
132-
latitude += area_range
128+
if (ref_lat + half_res < latitude && latitude - resolution >= -90)
129+
latitude -= resolution
130+
elsif (ref_lat - half_res > latitude && latitude + resolution <= 90)
131+
latitude += resolution
133132
end
134133

135134
longitude = code_area.longitude_center
136-
longitude_diff = longitude - ref_lng
137-
if (longitude_diff > area_edge)
138-
longitude -= area_range
139-
elsif (longitude_diff < -area_edge)
140-
longitude += area_range
135+
if (ref_lng + half_res < longitude)
136+
longitude -= resolution
137+
elsif (ref_lng - half_res > longitude)
138+
longitude += resolution
141139
end
142140

143141
encode(latitude, longitude, code.length - SEPARATOR.length)

0 commit comments

Comments
 (0)