code: def _build_obs_point(self, sensor_info, obs_recs):
          
          cur_point = sensor_info["location"]["point"]
  
          keys = [m["name"] for m in obs_recs]
          if "binIndex" in keys:
              zidx = keys.index("binIndex")
              bin_index = int(obs_recs[zidx]["value"])
              z = sensor_info["profile_heights"]["values"][bin_index]
  
              point = sPoint(cur_point.x, cur_point.y, cur_point.z + z)
  
          elif "profileIndex" in keys:
              zidx = keys.index("profileIndex")
              bin_index = int(obs_recs[zidx]["value"])
  
              # @TODO take into account orientation, may change x/y/z
              # @TODO bin edges?
              z = sensor_info["profile_bins"]["bin_center"]["values"][bin_index]
  
              point = sPoint(cur_point.x, cur_point.y, cur_point.z + z)
  
          else:
              raise ValueError("no binIndex or profileIndex in Member: %s", keys)
  
          # remove z related Member
          obs_recs = obs_recs[:]
          obs_recs.pop(zidx)
  
          return point, obs_recs
docs: Pulls bin/profile height info out and calcs a z.
  
          TODO: currently extremely naive
  
          Returns a 2-tuple: point, remaining obs_recs