Skip to content
Commits on Source (3)
satpy (0.16.1-3) unstable; urgency=medium
* debian/patches:
- new 0006-Fix-compatibility-with-new-proj-version.patch
(backport form upstream)
* Remove obsolete fields Name, Contact from debian/upstream/metadata.
-- Antonio Valentino <antonio.valentino@tiscali.it> Mon, 16 Sep 2019 21:33:09 +0000
satpy (0.16.1-2) unstable; urgency=medium
* Use debhelper-compat instead of debian/compat.
......
From: Antonio Valentino <antonio.valentino@tiscali.it>
Date: Mon, 16 Sep 2019 21:23:46 +0000
Subject: Fix compatibility with new proj version
Backport form upstream master (13892290b02456b04432e4fb86d9e85dad8d2990).
---
satpy/tests/reader_tests/test_ahi_hsd.py | 22 +++++++++++++--------
satpy/tests/reader_tests/test_hrit_base.py | 13 ++++++------
satpy/tests/reader_tests/test_seviri_l1b_hrit.py | 13 ++++++------
satpy/tests/test_config.py | 25 +++++++++++++++++++++---
satpy/tests/writer_tests/test_cf.py | 10 ++++++++--
satpy/writers/mitiff.py | 14 +++++++++----
6 files changed, 68 insertions(+), 29 deletions(-)
diff --git a/satpy/tests/reader_tests/test_ahi_hsd.py b/satpy/tests/reader_tests/test_ahi_hsd.py
index e74bbfe..2335bee 100644
--- a/satpy/tests/reader_tests/test_ahi_hsd.py
+++ b/satpy/tests/reader_tests/test_ahi_hsd.py
@@ -71,10 +71,13 @@ class TestAHIHSDNavigation(unittest.TestCase):
'spare': ''}
area_def = fh.get_area_def(None)
- self.assertEqual(area_def.proj_dict, {'a': 6378137.0, 'b': 6356752.3,
- 'h': 35785863.0, 'lon_0': 140.7,
- 'proj': 'geos', 'units': 'm'})
-
+ proj_dict = area_def.proj_dict
+ self.assertEqual(proj_dict['a'], 6378137.0)
+ self.assertEqual(proj_dict['b'], 6356752.3)
+ self.assertEqual(proj_dict['h'], 35785863.0)
+ self.assertEqual(proj_dict['lon_0'], 140.7)
+ self.assertEqual(proj_dict['proj'], 'geos')
+ self.assertEqual(proj_dict['units'], 'm')
self.assertEqual(area_def.area_extent, (592000.0038256244, 4132000.026701824,
1592000.0102878278, 5132000.033164027))
@@ -113,10 +116,13 @@ class TestAHIHSDNavigation(unittest.TestCase):
'spare': ''}
area_def = fh.get_area_def(None)
- self.assertEqual(area_def.proj_dict, {'a': 6378137.0, 'b': 6356752.3,
- 'h': 35785863.0, 'lon_0': 140.7,
- 'proj': 'geos', 'units': 'm'})
-
+ proj_dict = area_def.proj_dict
+ self.assertEqual(proj_dict['a'], 6378137.0)
+ self.assertEqual(proj_dict['b'], 6356752.3)
+ self.assertEqual(proj_dict['h'], 35785863.0)
+ self.assertEqual(proj_dict['lon_0'], 140.7)
+ self.assertEqual(proj_dict['proj'], 'geos')
+ self.assertEqual(proj_dict['units'], 'm')
self.assertEqual(area_def.area_extent, (-5500000.035542117, -3300000.021325271,
5500000.035542117, -2200000.0142168473))
diff --git a/satpy/tests/reader_tests/test_hrit_base.py b/satpy/tests/reader_tests/test_hrit_base.py
index 50d3ae0..631228f 100644
--- a/satpy/tests/reader_tests/test_hrit_base.py
+++ b/satpy/tests/reader_tests/test_hrit_base.py
@@ -142,12 +142,13 @@ class TestHRITFileHandler(unittest.TestCase):
def test_get_area_def(self):
area = self.reader.get_area_def('VIS06')
- self.assertEqual(area.proj_dict, {'a': 6378169.0,
- 'b': 6356583.8,
- 'h': 35785831.0,
- 'lon_0': 44.0,
- 'proj': 'geos',
- 'units': 'm'})
+ proj_dict = area.proj_dict
+ self.assertEqual(proj_dict['a'], 6378169.0)
+ self.assertEqual(proj_dict['b'], 6356583.8)
+ self.assertEqual(proj_dict['h'], 35785831.0)
+ self.assertEqual(proj_dict['lon_0'], 44.0)
+ self.assertEqual(proj_dict['proj'], 'geos')
+ self.assertEqual(proj_dict['units'], 'm')
self.assertEqual(area.area_extent,
(-77771774058.38356, -77771774058.38356,
30310525626438.438, 3720765401003.719))
diff --git a/satpy/tests/reader_tests/test_seviri_l1b_hrit.py b/satpy/tests/reader_tests/test_seviri_l1b_hrit.py
index c601c23..f34574c 100644
--- a/satpy/tests/reader_tests/test_seviri_l1b_hrit.py
+++ b/satpy/tests/reader_tests/test_seviri_l1b_hrit.py
@@ -134,12 +134,13 @@ class TestHRITMSGFileHandler(unittest.TestCase):
def test_get_area_def(self):
area = self.reader.get_area_def(DatasetID('VIS006'))
- self.assertEqual(area.proj_dict, {'a': 6378169.0,
- 'b': 6356583.8,
- 'h': 35785831.0,
- 'lon_0': 44.0,
- 'proj': 'geos',
- 'units': 'm'})
+ proj_dict = area.proj_dict
+ self.assertEqual(proj_dict['a'], 6378169.0)
+ self.assertEqual(proj_dict['b'], 6356583.8)
+ self.assertEqual(proj_dict['h'], 35785831.0)
+ self.assertEqual(proj_dict['lon_0'], 44.0)
+ self.assertEqual(proj_dict['proj'], 'geos')
+ self.assertEqual(proj_dict['units'], 'm')
self.assertEqual(area.area_extent,
(-77771774058.38356, -3720765401003.719,
30310525626438.438, 77771774058.38356))
diff --git a/satpy/tests/test_config.py b/satpy/tests/test_config.py
index 2b53836..b3b6d24 100644
--- a/satpy/tests/test_config.py
+++ b/satpy/tests/test_config.py
@@ -79,13 +79,32 @@ class TestBuiltinAreas(unittest.TestCase):
return unittest.skip("RasterIO 1.0+ required")
from pyresample import parse_area_file
+ from pyresample.geometry import SwathDefinition
from satpy.resample import get_area_file
+ import numpy as np
+ import xarray as xr
+
+ lons = np.array([[0, 0.1, 0.2], [0.05, 0.15, 0.25]])
+ lats = np.array([[0, 0.1, 0.2], [0.05, 0.15, 0.25]])
+ lons = xr.DataArray(lons)
+ lats = xr.DataArray(lats)
+ swath_def = SwathDefinition(lons, lats)
all_areas = parse_area_file(get_area_file())
for area_obj in all_areas:
- if getattr(area_obj, 'optimize_projection', False):
- # the PROJ.4 is known to not be valid on this DynamicAreaDef
- continue
+ if hasattr(area_obj, 'freeze'):
+ try:
+ area_obj = area_obj.freeze(lonslats=swath_def)
+ except RuntimeError:
+ # we didn't provide enough info to freeze, hard to guess
+ # in a generic test so just skip this area
+ continue
proj_dict = area_obj.proj_dict
+ if proj_dict.get('proj') in ('ob_tran', 'nsper') and \
+ 'wktext' not in proj_dict:
+ # FIXME: rasterio doesn't understand ob_tran unless +wktext
+ # See: https://github.com/pyproj4/pyproj/issues/357
+ # pyproj 2.0+ seems to drop wktext from PROJ dict
+ continue
_ = CRS.from_dict(proj_dict)
diff --git a/satpy/tests/writer_tests/test_cf.py b/satpy/tests/writer_tests/test_cf.py
index 2f7fc63..c4721d0 100644
--- a/satpy/tests/writer_tests/test_cf.py
+++ b/satpy/tests/writer_tests/test_cf.py
@@ -712,8 +712,14 @@ class TestCFWriter(unittest.TestCase):
with mock.patch('satpy.writers.cf_writer.warnings.warn') as warn:
res, grid_mapping = area2gridmapping(ds)
warn.assert_called()
- self.assertDictEqual(dict(pyresample.geometry.proj4_str_to_dict(res.attrs['grid_proj4'])),
- dict(pyresample.geometry.proj4_str_to_dict(proj_str)))
+ proj_dict = pyresample.geometry.proj4_str_to_dict(res.attrs['grid_proj4'])
+ self.assertEqual(proj_dict['lon_0'], 4.535)
+ self.assertEqual(proj_dict['lat_0'], 46.0)
+ self.assertEqual(proj_dict['o_lon_p'], -5.465)
+ self.assertEqual(proj_dict['o_lat_p'], 90.0)
+ self.assertEqual(proj_dict['proj'], 'ob_tran')
+ self.assertEqual(proj_dict['o_proj'], 'stere')
+ self.assertEqual(proj_dict['ellps'], 'WGS84')
self.assertEqual(grid_mapping, cosmo_expected)
def test_area2lonlat(self):
diff --git a/satpy/writers/mitiff.py b/satpy/writers/mitiff.py
index 47a32d0..da45738 100644
--- a/satpy/writers/mitiff.py
+++ b/satpy/writers/mitiff.py
@@ -203,9 +203,15 @@ class MITIFFWriter(ImageWriter):
proj4_string = " Proj string: "
if isinstance(datasets, list):
- proj4_string += first_dataset.attrs['area'].proj4_string
+ area = first_dataset.attrs['area']
else:
- proj4_string += datasets.attrs['area'].proj4_string
+ area = datasets.attrs['area']
+ # Use pyproj's CRS object to get a valid EPSG code if possible
+ # only in newer pyresample versions with pyproj 2.0+ installed
+ if hasattr(area, 'crs') and area.crs.to_epsg() is not None:
+ proj4_string += "+init=EPSG:{}".format(area.crs.to_epsg())
+ else:
+ proj4_string += area.proj_str
x_0 = 0
y_0 = 0
@@ -246,14 +252,14 @@ class MITIFFWriter(ImageWriter):
if 'units' not in proj4_string:
proj4_string += ' +units=km'
- if isinstance(datasets, list):
+ if 'x_0' not in proj4_string and isinstance(datasets, list):
proj4_string += ' +x_0=%.6f' % (
(-first_dataset.attrs['area'].area_extent[0] +
first_dataset.attrs['area'].pixel_size_x) + x_0)
proj4_string += ' +y_0=%.6f' % (
(-first_dataset.attrs['area'].area_extent[1] +
first_dataset.attrs['area'].pixel_size_y) + y_0)
- else:
+ elif 'x_0' not in proj4_string:
proj4_string += ' +x_0=%.6f' % (
(-datasets.attrs['area'].area_extent[0] +
datasets.attrs['area'].pixel_size_x) + x_0)
......@@ -3,3 +3,4 @@
0003-Explicitly-set-chunks-in-dask-arrays.patch
0004-Disable-tests-on-the-number-of-calls-to-ll2cr.patch
0005-Fix-test_gaclacfile.patch
0006-Fix-compatibility-with-new-proj-version.patch
Bug-Database: https://github.com/pytroll/satpy/issues
Bug-Submit: https://github.com/pytroll/satpy/issues/new
Contact: The Pytroll Team <pytroll@googlegroups.com>
Name: satpy
Repository: https://github.com/pytroll/satpy.git
Repository-Browse: https://github.com/pytroll/satpy