code: def add_elevations(self, gpx, only_missing=False, smooth=False, gpx_smooth_no=0):
          
          if only_missing:
              original_elevations = list(map(lambda point: point.elevation, gpx.walk(only_points=True)))
  
          if smooth:
              self._add_sampled_elevations(gpx)
          else:
              for point in gpx.walk(only_points=True):
                  ele = self.get_elevation(point.latitude, point.longitude)
                  if ele is not None:
                      point.elevation = ele
  
          for i in range(gpx_smooth_no):
              gpx.smooth(vertical=True, horizontal=False)
  
          if only_missing:
              for original_elevation, point in zip(original_elevations, list(gpx.walk(only_points=True))):
                  if original_elevation != None:
                      point.elevation = original_elevation
docs: only_missing -- if True only points without elevation will get a SRTM value
  
          smooth -- if True interpolate between points
  
          if gpx_smooth_no > 0 -- execute gpx.smooth(vertical=True)