def __contains__(self, point): """Is a point inside the 4 corners of the current area? This uses great circle arcs as area boundaries. """ from pyresample.spherical_geometry import point_inside, Coordinate corners = self.corners if isinstance(point, tuple): return point_inside(Coordinate(*point), corners) else: return point_inside(point, corners)
def geo_filter(pdf, outside=True, areaid='euron1'): """ Filter data according to position. All data inside area are ignored """ from pyresample import spherical_geometry, utils area = utils.load_area( '/local_disk/src/mpop-devel/mpop-smhi/etc/areas.def', areaid) # lons = np.array([ pdf['lon'][i] for i in pdf.index ]) # lats = np.array([ pdf['lat'][i] for i in pdf.index ]) idx_selected = [] for idx in pdf.index: try: loc = spherical_geometry.Coordinate(pdf['lon'][idx], pdf['lat'][idx]) except ValueError: import pdb pdb.set_trace() is_inside = spherical_geometry.point_inside(loc, area.corners) if ((outside and not is_inside) or (not outside and is_inside)): idx_selected.append(idx) return pdf.loc[idx_selected, :]
def geo_filter(pdf, outside=True, areaid='euron1'): """ Filter data according to position. All data inside area are ignored """ from pyresample import spherical_geometry, utils area = utils.load_area( '/local_disk/src/mpop-devel/mpop-smhi/etc/areas.def', areaid) # lons = np.array([ pdf['lon'][i] for i in pdf.index ]) # lats = np.array([ pdf['lat'][i] for i in pdf.index ]) idx_selected = [] for idx in pdf.index: try: loc = spherical_geometry.Coordinate( pdf['lon'][idx], pdf['lat'][idx]) except ValueError: import pdb pdb.set_trace() is_inside = spherical_geometry.point_inside(loc, area.corners) if ((outside and not is_inside) or (not outside and is_inside)): idx_selected.append(idx) return pdf.loc[idx_selected, :]
def granule_inside_area(start_time, end_time, platform_name, area_def): """Check if the IASI granule is over area interest, using the times from the filename """ metop = orbital.Orbital(PLATFORMS.get(platform_name, platform_name)) corners = area_def.corners is_inside = False for dtobj in [start_time, end_time]: lon, lat, dummy = metop.get_lonlatalt(dtobj) point = Coordinate(lon, lat) if point_inside(point, corners): is_inside = True break return is_inside
def get_row_col(self, lon, lat, corners, kd_tree, satdata_shape, dtobj): obs_loc = spherical_geometry.Coordinate(lon, lat) is_inside = True try: is_inside = spherical_geometry.point_inside(obs_loc, corners) except ZeroDivisionError: print("date, station, lon,lat: %r (%f,%f)" % (dtobj.strftime('%Y-%m-%d %H:%M'), lon, lat)) raise if not is_inside: print("Outside...") return False # Find the index of the closest pixel in the satellite data: req_point = np.array([[np.rad2deg(obs_loc.lon), np.rad2deg(obs_loc.lat)]]) dist, kidx = kd_tree.query(req_point, k=1) if dist > 0.1: print("Point too far away from swath...") return False row, col = np.unravel_index(kidx[0], satdata_shape) # Now that we have the pixel position in swath, we can calculate the # actual observation time for that pixel, assuming the observation time # at hand applies to the first line: pixel_time = self.obstime + row * LINE_TIME[self.data_type] t1_ = pixel_time - time_thr t2_ = pixel_time + time_thr if dtobj < t1_ or dtobj > t2_: print("Pixel time outside window: " + str(pixel_time) + " " + str(self.obstime)) return False tdelta = pixel_time - dtobj return row, col, tdelta