diff --git a/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py b/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py index d559fc5d38..8067599dd8 100644 --- a/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py +++ b/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py @@ -353,6 +353,8 @@ def __init__(self, parent, state): self.mouse_down = None self.click_pos = None self.last_click_pos = None + self.last_click_pos_used_for_text = None + self.last_terrain_height = None if state.elevation != "None": state.ElevationMap = mp_elevation.ElevationModel(database=state.elevation) @@ -486,21 +488,56 @@ def update_position(self): if alt == -1: newtext += ' SRTM Downloading ' newtext += '\n' - if self.click_pos is not None: - newtext += 'Click: %.8f %.8f (%s %s) (%s)' % (self.click_pos[0], self.click_pos[1], - mp_util.degrees_to_dms(self.click_pos[0]), - mp_util.degrees_to_dms(self.click_pos[1]), - mp_util.latlon_to_grid(self.click_pos)) + + self.update_click_position_text() + + def update_click_position_text(self): + if self.click_pos is None: + return + if self.click_pos == self.last_click_pos: + return + + if self.click_pos == self.last_click_pos_used_for_text: + return + + terrain_height = None + terrain_height_str = "?" + if self.state.elevation != "None": + terrain_height = self.state.ElevationMap.GetElevation(self.click_pos[0], self.click_pos[1]) + if terrain_height is not None: + terrain_height_str = ' %.1fm' % (terrain_height,) + + newtext = 'Click: %.8f %.8f %s (%s %s) (%s)' % ( + self.click_pos[0], + self.click_pos[1], + terrain_height_str, + mp_util.degrees_to_dms(self.click_pos[0]), + mp_util.degrees_to_dms(self.click_pos[1]), + mp_util.latlon_to_grid(self.click_pos) + ) + if self.last_click_pos is not None: + # provide information about the differences between the + # previous click position: distance = mp_util.gps_distance(self.last_click_pos[0], self.last_click_pos[1], self.click_pos[0], self.click_pos[1]) bearing = mp_util.gps_bearing(self.last_click_pos[0], self.last_click_pos[1], self.click_pos[0], self.click_pos[1]) newtext += ' Distance: %.3fm %.3fnm Bearing %.1f' % (distance, distance*0.000539957, bearing) - if newtext != state.oldtext: + if terrain_height == "?": + self.last_terrain_height = None + else: + if self.last_terrain_height is not None: + delta = terrain_height - self.last_terrain_height + newtext += " (height %f)" % (delta, ) + self.last_terrain_height = terrain_height + + if newtext != self.state.oldtext: self.position.Clear() self.position.WriteText(newtext) - state.oldtext = newtext + self.state.oldtext = newtext + + self.last_click_pos_used_for_text = self.click_pos def pixel_coords(self, latlon, reverse=False): '''return pixel coordinates in the map image for a (lat,lon)