def test_xyz2lonlat(self): lon, lat = xyz2lonlat(1, 0, 0) self.assertAlmostEqual(lon, 0) self.assertAlmostEqual(lat, 0) lon, lat = xyz2lonlat(0, 1, 0) self.assertAlmostEqual(lon, 90) self.assertAlmostEqual(lat, 0) lon, lat = xyz2lonlat(0, 0, 1) self.assertAlmostEqual(lon, 0) self.assertAlmostEqual(lat, 90) lon, lat = xyz2lonlat(sqrt(2) / 2, sqrt(2) / 2, 0) self.assertAlmostEqual(lon, 45) self.assertAlmostEqual(lat, 0)
def navigate_dnb(h5f): scans = h5f.get_node("/All_Data/NumberOfScans").read()[0] geo_dset = h5f.get_node("/All_Data/VIIRS-DNB-GEO_All") all_c_align = geo_dset.AlignmentCoefficient.read()[np.newaxis, np.newaxis, :, np.newaxis] all_c_exp = geo_dset.ExpansionCoefficient.read()[np.newaxis, np.newaxis, :, np.newaxis] all_lon = geo_dset.Longitude.read() all_lat = geo_dset.Latitude.read() res = [] # FIXME: this supposes there is only one tiepoint zone in the # track direction scan_size = h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "TiePointZoneSizeTrack")[0] track_offset = h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "PixelOffsetTrack")[0] scan_offset = h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "PixelOffsetScan")[0] try: group_locations = geo_dset.TiePointZoneGroupLocationScanCompact.read() except KeyError: group_locations = [0] param_start = 0 for tpz_size, nb_tpz, start in \ zip(h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "TiePointZoneSizeScan"), geo_dset.NumberOfTiePointZonesScan.read(), group_locations): lon = all_lon[:, start:start + nb_tpz + 1] lat = all_lat[:, start:start + nb_tpz + 1] c_align = all_c_align[:, :, param_start:param_start + nb_tpz, :] c_exp = all_c_exp[:, :, param_start:param_start + nb_tpz, :] param_start += nb_tpz nties = nb_tpz if (np.max(lon) - np.min(lon) > 90) or (np.max(abs(lat)) > 60): x, y, z = lonlat2xyz(lon, lat) x, y, z = (expand_array(x, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset), expand_array(y, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset), expand_array(z, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset)) res.append(xyz2lonlat(x, y, z)) else: res.append( (expand_array(lon, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset), expand_array(lat, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset))) lons, lats = zip(*res) return da.hstack(lons), da.hstack(lats)
def navigate_dnb(h5f): scans = h5f.get_node("/All_Data/NumberOfScans").read()[0] geo_dset = h5f.get_node("/All_Data/VIIRS-DNB-GEO_All") all_c_align = geo_dset.AlignmentCoefficient.read()[ np.newaxis, np.newaxis, :, np.newaxis] all_c_exp = geo_dset.ExpansionCoefficient.read()[np.newaxis, np.newaxis, :, np.newaxis] all_lon = geo_dset.Longitude.read() all_lat = geo_dset.Latitude.read() res = [] # FIXME: this supposes there is only one tiepoint zone in the # track direction scan_size = h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "TiePointZoneSizeTrack")[0] track_offset = h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "PixelOffsetTrack")[0] scan_offset = h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "PixelOffsetScan")[0] try: group_locations = geo_dset.TiePointZoneGroupLocationScanCompact.read() except KeyError: group_locations = [0] param_start = 0 for tpz_size, nb_tpz, start in \ zip(h5f.get_node_attr("/All_Data/VIIRS-DNB-SDR_All", "TiePointZoneSizeScan"), geo_dset.NumberOfTiePointZonesScan.read(), group_locations): lon = all_lon[:, start:start + nb_tpz + 1] lat = all_lat[:, start:start + nb_tpz + 1] c_align = all_c_align[:, :, param_start:param_start + nb_tpz, :] c_exp = all_c_exp[:, :, param_start:param_start + nb_tpz, :] param_start += nb_tpz nties = nb_tpz if (np.max(lon) - np.min(lon) > 90) or (np.max(abs(lat)) > 60): x, y, z = lonlat2xyz(lon, lat) x, y, z = ( expand_array(x, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset), expand_array(y, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset), expand_array( z, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset)) res.append(xyz2lonlat(x, y, z)) else: res.append( (expand_array(lon, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset), expand_array(lat, scans, c_align, c_exp, scan_size, tpz_size, nties, track_offset, scan_offset))) lons, lats = zip(*res) return da.hstack(lons), da.hstack(lats)
def test_xyz2lonlat(self): """Test xyz2lonlat.""" lon, lat = xyz2lonlat(1, 0, 0) self.assertAlmostEqual(lon, 0) self.assertAlmostEqual(lat, 0) lon, lat = xyz2lonlat(0, 1, 0) self.assertAlmostEqual(lon, 90) self.assertAlmostEqual(lat, 0) lon, lat = xyz2lonlat(0, 0, 1, asin=True) self.assertAlmostEqual(lon, 0) self.assertAlmostEqual(lat, 90) lon, lat = xyz2lonlat(0, 0, 1) self.assertAlmostEqual(lon, 0) self.assertAlmostEqual(lat, 90) lon, lat = xyz2lonlat(np.sqrt(2) / 2, np.sqrt(2) / 2, 0) self.assertAlmostEqual(lon, 45) self.assertAlmostEqual(lat, 0)
def navigate(self): """Generate the navigation datasets.""" chunks = self._get_geographical_chunks() lon = da.from_array(self.geography["Longitude"], chunks=chunks) lat = da.from_array(self.geography["Latitude"], chunks=chunks) if self.switch_to_cart: arrays = lonlat2xyz(lon, lat) else: arrays = (lon, lat) expanded = self.expand_angle_and_nav(arrays) if self.switch_to_cart: return xyz2lonlat(*expanded) return expanded
def navigate(self): """Generate the navigation datasets.""" shape = self.geostuff['Longitude'].shape hchunks = (self.nb_tpzs + 1).compute() chunks = (shape[0], tuple(hchunks)) lon = da.from_array(self.geostuff["Longitude"], chunks=chunks) lat = da.from_array(self.geostuff["Latitude"], chunks=chunks) if self.switch_to_cart: arrays = lonlat2xyz(lon, lat) else: arrays = (lon, lat) expanded = self.expand_angle_and_nav(arrays) if self.switch_to_cart: return xyz2lonlat(*expanded) return expanded
def navigate(self): all_lon = self.geostuff["Longitude"].value all_lat = self.geostuff["Latitude"].value res = [] param_start = 0 for tpz_size, nb_tpz, start in zip(self.tpz_sizes, self.nb_tpzs, self.group_locations): lon = all_lon[:, start:start + nb_tpz + 1] lat = all_lat[:, start:start + nb_tpz + 1] c_align = self.c_align[:, :, param_start:param_start + nb_tpz, :] c_exp = self.c_exp[:, :, param_start:param_start + nb_tpz, :] param_start += nb_tpz expanded = [] switch_to_cart = ((np.max(lon) - np.min(lon) > 90) or (np.max(abs(lat)) > 60)) if switch_to_cart: arrays = lonlat2xyz(lon, lat) else: arrays = (lon, lat) for data in arrays: expanded.append( expand_array(data, self.scans, c_align, c_exp, self.scan_size, tpz_size, nb_tpz, self.track_offset, self.scan_offset)) if switch_to_cart: res.append(xyz2lonlat(*expanded)) else: res.append(expanded) lons, lats = zip(*res) return da.hstack(lons), da.hstack(lats)
def navigate(self): all_lon = self.geostuff["Longitude"].value all_lat = self.geostuff["Latitude"].value res = [] param_start = 0 for tpz_size, nb_tpz, start in zip(self.tpz_sizes, self.nb_tpzs, self.group_locations): lon = all_lon[:, start:start + nb_tpz + 1] lat = all_lat[:, start:start + nb_tpz + 1] c_align = self.c_align[:, :, param_start:param_start + nb_tpz, :] c_exp = self.c_exp[:, :, param_start:param_start + nb_tpz, :] param_start += nb_tpz expanded = [] switch_to_cart = ((np.max(lon) - np.min(lon) > 90) or (np.max(abs(lat)) > 60)) if switch_to_cart: arrays = lonlat2xyz(lon, lat) else: arrays = (lon, lat) for data in arrays: expanded.append(expand_array( data, self.scans, c_align, c_exp, self.scan_size, tpz_size, nb_tpz, self.track_offset, self.scan_offset)) if switch_to_cart: res.append(xyz2lonlat(*expanded)) else: res.append(expanded) lons, lats = zip(*res) return da.hstack(lons), da.hstack(lats)
def navigate(self): """Generate lon and lat datasets.""" all_lon = da.from_array(self.geostuff["Longitude"]) all_lat = da.from_array(self.geostuff["Latitude"]) res = [] param_start = 0 for tpz_size, nb_tpz, start in zip(self.tpz_sizes, self.nb_tpzs, self.group_locations): lon = all_lon[:, start:start + nb_tpz + 1] lat = all_lat[:, start:start + nb_tpz + 1] c_align = self.c_align[:, :, param_start:param_start + nb_tpz, :] c_exp = self.c_exp[:, :, param_start:param_start + nb_tpz, :] param_start += nb_tpz expanded = [] if self.switch_to_cart: arrays = lonlat2xyz(lon, lat) else: arrays = (lon, lat) for data in arrays: expanded.append( expand_array(data, self.scans, c_align, c_exp, self.scan_size, tpz_size, nb_tpz, self.track_offset, self.scan_offset)) if self.switch_to_cart: res.append(xyz2lonlat(*expanded)) else: res.append(expanded) lons, lats = zip(*res) return da.hstack(lons), da.hstack(lats)