Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion satpy/etc/readers/modis_l1b.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -403,12 +403,30 @@ datasets:
name: '36'
resolution: 1000
calibration: [brightness_temperature, radiance]
coordinates: [longitude, latitude]
coordinates: [longitude, latitude, longitude_tiepoints, latitude_tiepoints]
wavelength:
- 14.085
- 14.235
- 14.385

longitude_tiepoints:
name: longitude_tiepoints
resolution:
1000:
file_type: hdf_eos_data_1000m
file_key: Longitude
standard_name: longitude_tiepoints
units: degree

latitude_tiepoints:
name: latitude_tiepoints
resolution:
1000:
file_type: hdf_eos_data_1000m
file_key: Latitude
standard_name: latitude_tiepoints
units: degree

longitude:
name: longitude
resolution:
Expand Down
4 changes: 4 additions & 0 deletions satpy/readers/hdfeos_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ class HDFEOSGeoReader(HDFEOSBaseFileReader):
DATASET_NAMES = {
'longitude': 'Longitude',
'latitude': 'Latitude',
'longitude_tiepoints': 'Longitude',
'latitude_tiepoints': 'Latitude',
'satellite_azimuth_angle': ('SensorAzimuth', 'Sensor_Azimuth'),
'satellite_zenith_angle': ('SensorZenith', 'Sensor_Zenith'),
'solar_azimuth_angle': ('SolarAzimuth', 'SolarAzimuth'),
Expand Down Expand Up @@ -393,6 +395,8 @@ def get_dataset(self, dataset_id: DataID, dataset_info: dict) -> xr.DataArray:
# otherwise use the default name for this variable
data = self._load_ds_by_name(dataset_name)
if resolution != self.geo_resolution:
if dataset_name in ["longitude_tiepoints", "latitude_tiepoints"]:
return data
if in_file_dataset_name is not None:
# they specified a custom variable name but
# we don't know how to interpolate this yet
Expand Down
37 changes: 37 additions & 0 deletions satpy/readers/yaml_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -774,6 +774,12 @@ def _make_area_from_coords(self, coords):
lons, lats = self._get_lons_lats_from_coords(coords)
sdef = self._make_swath_definition_from_lons_lats(lons, lats)
return sdef
if len(coords) == 4:
lons_tiepoints, lats_tiepoints = coords[2::]
lons, lats = self._get_lons_lats_from_coords(coords[0:2])
sdef = self._make_tiepoints_definition_from_lons_lats_and_gcps(lons, lats, lons_tiepoints,
lats_tiepoints)
return sdef
if len(coords) != 0:
raise NameError("Don't know what to do with coordinates " + str(
coords))
Expand Down Expand Up @@ -809,6 +815,37 @@ def _make_swath_definition_from_lons_lats(self, lons, lats):
FileYAMLReader._coords_cache[key] = sdef
return sdef

def _make_tiepoints_definition_from_lons_lats_and_gcps(self, lons, lats, lons_tiepoints, lats_tiepoints):
"""Make a swath definition instance from lons and lats.

Args:
lons (xarray.DataArray): Interpolated Longitudes.
lats (xarray.DataArray): Interpolated Latitudes.
lons_tiepoints (xarray.DataArray): Longitude tiepoints.
lats_tiepoints (xarray.DataArray): Latitude tiepoints.

Returns:
pyresample.geometry.GCPDefinition

"""
from pyresample.geometry import GCPDefinition
key = None
try:
key = (lons.data.name, lats.data.name)
sdef = FileYAMLReader._coords_cache.get(key)
except AttributeError:
sdef = None
if sdef is None:
sdef = GCPDefinition(lons, lats, {"longitude": lons_tiepoints, "latitude": lats_tiepoints})
sensor_str = '_'.join(self.info['sensors'])
shape_str = '_'.join(map(str, lons.shape))
sdef.name = "{}_{}_{}_{}".format(sensor_str, shape_str,
lons.attrs.get('name', lons.name),
lats.attrs.get('name', lats.name))
if key is not None:
FileYAMLReader._coords_cache[key] = sdef
return sdef

def _load_dataset_with_area(self, dsid, coords, **kwargs):
"""Load *dsid* and its area if available."""
file_handlers = self._get_file_handlers(dsid)
Expand Down