def test_get_pixelsize_meters(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") x, y = d.get_pixelsize_meters() self.assertEqual(int(x), 444) self.assertEqual(int(y), 723) d = Domain(ds=gdal.Open(self.test_file_projected)) x, y = d.get_pixelsize_meters() self.assertEqual(int(x), 500) self.assertEqual(int(y), 500)
def test_contains(self): Bergen = Domain(4326, EXTENT_BERGEN) WestCoast = Domain(4326, EXTENT_WESTCOAST) Norway = Domain(4326, EXTENT_NORWAY) Paris = Domain(4326, EXTENT_PARIS) self.assertTrue(Norway.contains(Bergen)) self.assertFalse(Bergen.contains(Norway)) self.assertFalse(Norway.contains(WestCoast)) self.assertFalse(Paris.contains(Norway))
def test_overlaps_contains(self): Bergen = Domain(4326, "-te 5 60 6 61 -ts 500 500") WestCoast = Domain(4326, "-te 1 58 6 64 -ts 500 500") Norway = Domain(4326, "-te 3 55 30 72 -ts 500 500") Paris = Domain(4326, "-te 2 48 3 49 -ts 500 500") self.assertTrue(Bergen.overlaps(Norway)) self.assertTrue(Norway.contains(Bergen)) self.assertFalse(Bergen.contains(Norway)) self.assertTrue(Norway.overlaps(WestCoast)) self.assertFalse(Norway.contains(WestCoast)) self.assertFalse(Paris.overlaps(Norway)) self.assertFalse(Paris.contains(Norway))
def test_write_domain_map__basemap_missing(self): plt.switch_backend('Agg') d = Domain(4326, "-te 25 70 35 72 -ts 500 500") border = d.get_border() tmpfilename = os.path.join(ntd.tmp_data_path, 'domain_write_map.png') with self.assertRaises(ImportError): write_domain_map(border, tmpfilename, labels=['Patch1'])
def test_overlaps(self, get_border_geometry): other_domain = MagicMock() d = Domain() d.overlaps(other_domain) d.get_border_geometry.assert_called_once() d.get_border_geometry().Overlaps.assert_called_once_with( other_domain.get_border_geometry())
def test_get_geolocation_grids_from_GDAL_transformer( self, mock_transform_points): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") lon, lat = d.get_geolocation_grids() self.assertEqual(type(lon), np.ndarray) self.assertEqual(type(lat), np.ndarray) self.assertEqual(lat.shape, (500, 500))
def test_get_geolocation_grids_from_geolocationArray(self): lat, lon = np.mgrid[25:35:0.02, 70:72:0.004] d = Domain(lon=lon, lat=lat) lon, lat = d.get_geolocation_grids() self.assertEqual(type(lon), np.ndarray) self.assertEqual(type(lat), np.ndarray) self.assertEqual(lat.shape, (500, 500))
def test_reproject_GCPs_auto(self): ds = gdal.Open(self.test_file) d = Domain(ds=ds) d.reproject_GCPs() gcpproj = NSR(d.vrt.dataset.GetGCPProjection()) self.assertEqual(gcpproj.GetAttrValue('PROJECTION'), 'Stereographic')
def test_dont_init_from_invalid_combination(self): self.assertRaises(ValueError, Domain) self.assertRaises(ValueError, Domain, None) with self.assertRaises(ValueError): Domain(ds=gdal.Open(self.test_file), srs="+proj=latlong +datum=WGS84 +ellps=WGS84 +no_defs", ext="-te 25 70 35 72 -ts 500 500")
def test_get_border_dateline(self): dom = Domain('+proj=stere +datum=WGS84 +ellps=WGS84 +lat_0=0 +lon_0=-179 +no_defs', '-te -1000000 -1000 1000000 1000 -ts 10 10') brd = dom.get_border() self.assertTrue(np.all(brd[0] > 0)) brd = dom.get_border(fix_lon=False) self.assertTrue(brd[0].min() < 0)
def test_reproject_gcps(self): ds = gdal.Open(self.test_file) d = Domain(ds=ds) d.reproject_gcps('+proj=stere +datum=WGS84 +ellps=WGS84 +lat_0=75 +lon_0=10 +no_defs') gcp = d.vrt.dataset.GetGCPs()[0] self.assertTrue(gcp.GCPX > 636161) self.assertTrue(gcp.GCPY < -288344)
def test_get_geolocation_grids(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") lon, lat = d.get_geolocation_grids() self.assertEqual(type(lon), np.ndarray) self.assertEqual(type(lat), np.ndarray) self.assertEqual(lat.shape, (500, 500))
def test_intersects(self, get_border_geometry): other_domain = MagicMock() d = Domain() d.intersects(other_domain) d.get_border_geometry.assert_called_once() d.get_border_geometry().Intersects.assert_called_once_with( other_domain.get_border_geometry())
def test_write_map(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") tmpfilename = os.path.join(ntd.tmp_data_path, 'domain_write_map.png') d.write_map(tmpfilename) self.assertTrue(os.path.exists(tmpfilename)) i = Image.open(tmpfilename) i.verify() self.assertEqual(i.info['dpi'], (50, 50))
def test_transform_points_dstsrs(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") lon, lat = d.transform_points( [1, 2, 3], [1, 2, 3], dstSRS=NSR( '+proj=stere +datum=WGS84 +ellps=WGS84 +lat_0=75 +lon_0=10 +no_defs' )) self.assertEqual(type(lon), np.ndarray) self.assertEqual(type(lat), np.ndarray)
def test_get_geolocation_grids_from_GDAL_transformer(self, mock_transform_points): mock_transform_points.return_value=( np.meshgrid(range(0,500),range(0,500))[0].flatten()*(35-25)/500.+25, np.meshgrid(range(0,500),range(0,500))[1].flatten()*(70-72)/500.+72) d = Domain(4326, "-te 25 70 35 72 -ts 500 500") lon, lat = d.get_geolocation_grids() self.assertEqual(type(lon), np.ndarray) self.assertEqual(type(lat), np.ndarray) self.assertEqual(lat.shape, (500, 500))
def test_get_border(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") lon, lat = d.get_border() self.assertEqual(type(lon), np.ndarray) self.assertEqual(type(lat), np.ndarray) self.assertEqual(len(lat), 44) self.assertEqual(lat[0], lat[-1]) self.assertEqual(lon[0], lon[-1])
def test_write_domain_map(self): plt.switch_backend('Agg') d = Domain(4326, "-te 25 70 35 72 -ts 500 500") border = d.get_border() tmpfilename = os.path.join(ntd.tmp_data_path, 'domain_write_map.png') write_domain_map(border, tmpfilename, labels=['Patch1']) self.assertTrue(os.path.exists(tmpfilename)) i = Image.open(tmpfilename) i.verify() self.assertEqual(i.info['dpi'], (50, 50))
def test_issue_189(self): fn = '/mnt/10.11.12.232/sat_downloads_asar/level-0/2010-01/descending/VV/gsar_rvl/RVL_ASA_WS_20100110211812087.gsar' if doppler_installed: n = Doppler(fn) xlon, xlat = n.get_corners() d = Domain( NSR(3857), '-lle %f %f %f %f -tr 1000 1000' % (xlon.min(), xlat.min(), xlon.max(), xlat.max())) n.reproject(d, eResampleAlg=1, tps=True) inci = n['incidence_angle']
def test_get_min_max_lon_lat(self): dom = Domain(4326, "-te 25 70 35 72 -ts 500 500") result = dom.get_min_max_lon_lat() self.assertIsInstance(result, tuple) self.assertEqual(len(result), 4) for el in result: self.assertIsInstance(el, float) self.assertLess(result[0], result[1]) self.assertLess(result[2], result[3]) self.assertEqual(result, (25.0, 34.980000000000004, 70.004000000000005, 72.0))
def test_write_map_labels(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") tmpfilename = os.path.join(ntd.tmp_data_path, 'domain_write_map_labels.png') d.write_map(tmpfilename, merLabels=[False, False, False, True], parLabels=[True, False, False, False]) self.assertTrue(os.path.exists(tmpfilename)) i = Image.open(tmpfilename) i.verify()
def test_repr(self): dom = Domain(4326, "-te 4.5 60 6 61 -ts 750 500") result = dom.__repr__() test = 'Domain:[750 x 500]\n----------------------------------------\nProjection:\nGEOGC' \ 'S["WGS 84",\n DATUM["WGS_1984",\n SPHEROID["WGS 84",6378137,298.257223' \ '563]],\n PRIMEM["Greenwich",0],\n UNIT["degree",0.0174532925199433]]\n-----' \ '-----------------------------------\nCorners (lon, lat):\n\t ( 4.50, 61.00) ' \ '( 6.00, 61.00)\n\t ( 4.50, 60.00) ( 6.00, 60.00)\n' self.assertIsInstance(result, str) self.assertEqual(result, test)
def test_write_domain_map_labels(self): plt.switch_backend('Agg') d = Domain(4326, "-te 25 70 35 72 -ts 500 500") border = d.get_border() tmpfilename = os.path.join(ntd.tmp_data_path, 'domain_write_map_labels.png') write_domain_map(border, tmpfilename, mer_labels=[False, False, False, True], par_labels=[True, False, False, False]) self.assertTrue(os.path.exists(tmpfilename)) i = Image.open(tmpfilename) i.verify()
def test_convert_extentDic(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") result = d._convert_extentDic(NSR(4326), { 'lle': [25.0, 70.0, 35.0, 72.0], 'ts': [500.0, 500.0] }) self.assertEqual( result, { 'lle': [25.0, 70.0, 35.0, 72.0], 'te': [25.0, 70.0, 35.0, 72.0], 'ts': [500.0, 500.0] })
def test_get_border_postgis(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") result = d.get_border_postgis() self.assertIsInstance(result, str) self.assertEquals(result, "PolygonFromText('POLYGON((25.0 72.0,26.0 72.0,27.0 72.0,28.0 " "72.0,29.0 72.0,30.0 72.0,31.0 72.0,32.0 72.0,33.0 72.0,34.0 " "72.0,35.0 72.0,35.0 72.0,35.0 71.8,35.0 71.6,35.0 71.4,35.0 " "71.2,35.0 71.0,35.0 70.8,35.0 70.6,35.0 70.4,35.0 70.2,35.0 " "70.0,35.0 70.0,34.0 70.0,33.0 70.0,32.0 70.0,31.0 70.0,30.0 " "70.0,29.0 70.0,28.0 70.0,27.0 70.0,26.0 70.0,25.0 70.0,25.0 " "70.0,25.0 70.2,25.0 70.4,25.0 70.6,25.0 70.8,25.0 71.0,25.0 " "71.2,25.0 71.4,25.0 71.6,25.0 71.8,25.0 72.0))')")
def test_init_lonlat(self): lat, lon = np.mgrid[-90:90:0.5, -180:180:0.5] with warnings.catch_warnings(record=True) as recorded_warnings: d = Domain(lon=lon, lat=lat) nansat_warning_raised = False for rw in recorded_warnings: if rw.category == NansatFutureWarning: nansat_warning_raised = True self.assertTrue(nansat_warning_raised) self.assertEqual(type(d), Domain) self.assertEqual(d.shape(), lat.shape)
def test_repr(self, mock_get_corners): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") result = d.__repr__() test = ('Domain:[500 x 500]\n' '----------------------------------------\n' 'Projection(dataset):\nGEOGCS["WGS 84",\n' ' DATUM["WGS_1984",\n' ' SPHEROID["WGS 84",6378137,298.257223563]],\n' ' PRIMEM["Greenwich",0],\n' ' UNIT["degree",0.0174532925199433]]\n' '----------------------------------------\n' 'Corners (lon, lat):\n' '\t ( 25.00, 72.00) ( 35.00, 72.00)\n' '\t ( 25.00, 70.00) ( 35.00, 70.00)\n') self.assertIsInstance(result, str) self.assertEquals(result, test)
def test_border_geojson(self): d = Domain(4326, "-te 25 70 35 72 -ts 500 500") expected_geojson = '{ "type": "Polygon", "coordinates": [ [ [ 25.0, 72.0 ],' \ ' [ 26.0, 72.0 ], [ 27.0, 72.0 ], [ 28.0, 72.0 ], [ 29.0, 72.0 ], ' \ '[ 30.0, 72.0 ], [ 31.0, 72.0 ], [ 32.0, 72.0 ], [ 33.0, 72.0 ],' \ ' [ 34.0, 72.0 ], [ 35.0, 72.0 ], [ 35.0, 72.0 ], [ 35.0, 71.8 ], ' \ '[ 35.0, 71.6 ], [ 35.0, 71.4 ], [ 35.0, 71.2 ], [ 35.0, 71.0 ],' \ ' [ 35.0, 70.8 ], [ 35.0, 70.6 ], [ 35.0, 70.4 ], [ 35.0, 70.2 ], ' \ '[ 35.0, 70.0 ], [ 35.0, 70.0 ], [ 34.0, 70.0 ], [ 33.0, 70.0 ], ' \ '[ 32.0, 70.0 ], [ 31.0, 70.0 ], [ 30.0, 70.0 ], [ 29.0, 70.0 ], ' \ '[ 28.0, 70.0 ], [ 27.0, 70.0 ], [ 26.0, 70.0 ], [ 25.0, 70.0 ], ' \ '[ 25.0, 70.0 ], [ 25.0, 70.2 ], [ 25.0, 70.4 ], [ 25.0, 70.6 ],' \ ' [ 25.0, 70.8 ], [ 25.0, 71.0 ], [ 25.0, 71.2 ], [ 25.0, 71.4 ], ' \ '[ 25.0, 71.6 ], [ 25.0, 71.8 ], [ 25.0, 72.0 ] ] ] }' border_geojson = d.get_border_geojson() self.assertIsInstance(border_geojson, str) self.assertEqual(border_geojson, expected_geojson)
def test_get_border(self): dom = Domain(4326, "-te 25 70 35 72 -ts 500 500") result = dom.get_border(nPoints=10) lat, lon = result self.assertEqual(type(lat), np.ndarray) self.assertEqual(type(lon), np.ndarray) self.assertIsInstance(result, tuple) self.assertEqual(len(result), 2) test_x = [25., 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 35., 35., 35., 35., 35., 35., 35., 35., 35., 35., 35., 35., 34., 33., 32., 31., 30., 29., 28., 27., 26., 25., 25., 25., 25., 25., 25., 25., 25., 25., 25., 25., 25.] test_y = [72., 72., 72., 72., 72., 72., 72., 72., 72., 72. , 72. , 72. , 71.8, 71.6, 71.4, 71.2, 71. , 70.8, 70.6, 70.4, 70.2, 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70. , 70.2, 70.4, 70.6, 70.8, 71. , 71.2, 71.4, 71.6, 71.8, 72.] self.assertEqual(list(lat), test_x) self.assertEqual(list(lon), test_y)
def plot_s1a_example(fsize='small'): test_data.get_sentinel1a(fsize=fsize) #w = SARWind(test_data.sentinel1a[fsize]) w = BayesianWind(test_data.sentinel1a[fsize]) cc = w.get_corners() lonmin = np.int(np.floor(np.min(cc[0])*100))/100. lonmax = np.int(np.ceil(np.max(cc[0])*100))/100. latmin = np.int(np.floor(np.min(cc[1])*100))/100. latmax = np.int(np.ceil(np.max(cc[1])*100))/100. w.reproject( Domain(NSR().wkt, ext='-lle %s %s %s %s -ts %s %s' %(lonmin, latmin, lonmax, latmax, (lonmax-lonmin)*110., (latmax-latmin)*110.) ) ) #u = w['U'] #v = w['V'] windspeed = w['bspeed_modcmod'] winddir = w['bdir_modcmod'] u = -windspeed*np.sin((180.0 - winddir)*np.pi/180.0) v = windspeed*np.cos((180.0 - winddir)*np.pi/180.0) nmap = Nansatmap(w, resolution='h') nmap.pcolormesh(np.hypot(u,v), vmax=18) nmap.add_colorbar(fontsize=8) nmap.quiver(u, v, step=20)#, scale=1, width=0.001) nmap.draw_continents() nmap.drawgrid() #nmap.drawmeridians(np.arange(lonmin, lonmax, 5), labels=[False, False, # True, False]) #nmap.drawparallels(np.arange(latmin, latmax, 3), labels=[True, False, # False, False]) # set size of the figure (inches) #nmap.fig.set_figheight(20) #nmap.fig.set_figwidth(15) # save figure to a PNG file nmap.draw_continents() #plt.suptitle( # 'High resolution\nwind speed and direction\nfrom Sentinel-1A and ' \ # 'NCEP\n%s' %w.time_coverage_start.isoformat(), # fontsize=8 #) #nmap.fig.savefig('s1a_wind_%s.png'%fsize, dpi=150, bbox_inches='tight') nmap.fig.savefig('s1a_bwind_%s.png'%fsize, dpi=150, bbox_inches='tight')