def testRequestingTooMuchDataThrowsResponseTooLargeException(self): req = DAL.newDataRequest(self.datatype) req.addIdentifier("group", "/") req.addIdentifier("dataset", "full") points = ((-180, 90), (180, 90), (180, -90), (-180, -90)) poly = shapely.geometry.LinearRing(points) req.setEnvelope(poly) with self.assertRaises(ThriftRequestException) as cm: DAL.getGridData(req) self.assertIn('ResponseTooLargeException', str(cm.exception))
def runGridDataTest(self, req, testSameShape=True): """ Test that we are able to successfully retrieve grid data for the given request. Args: testSameShape: whether or not to verify that all the retrieved data have the same shape (most data don't change shape) """ times = DafTestCase.getTimesIfSupported(req) gridData = DAL.getGridData(req, times[:self.numTimesToLimit]) self.assertIsNotNone(gridData) if not gridData: raise unittest.SkipTest("No data available") print("Number of grid records: " + str(len(gridData))) if len(gridData) > 0: print("Sample grid data shape:\n" + str(gridData[0].getRawData().shape) + "\n") print("Sample grid data:\n" + str(gridData[0].getRawData()) + "\n") print("Sample lat-lon data:\n" + str(gridData[0].getLatLonCoords()) + "\n") if testSameShape: correctGridShape = gridData[0].getLatLonCoords()[0].shape for record in gridData: rawData = record.getRawData() self.assertIsNotNone(rawData) self.assertEqual(rawData.shape, correctGridShape) return gridData
def testGetVectorGridData(self): req = DAL.newDataRequest(self.datatype) req.addIdentifier('parmId.dbId.modelName', 'Fcst') req.addIdentifier('parmId.dbId.siteId', params.SITE_ID) req.setParameters('Wind') times = DAL.getAvailableTimes(req) if not (times): raise unittest.SkipTest('No Wind Data available for testing') gridData = DAL.getGridData(req, [times[0]]) rawWind = None rawDir = None for grid in gridData: if grid.getParameter() == 'Wind': self.assertEqual(grid.getUnit(), 'kts') rawWind = grid.getRawData() elif grid.getParameter() == 'WindDirection': self.assertEqual(grid.getUnit(), 'deg') rawDir = grid.getRawData() self.assertIsNotNone(rawWind, 'Wind Magnitude grid is not present') self.assertIsNotNone(rawDir, 'Wind Direction grid is not present') # rawWind and rawDir are numpy.ndarrays so comparison will result in boolean ndarrays. self.assertTrue((rawWind >= 0).all(), 'Wind Speed should not contain negative values') self.assertTrue((rawDir >= 0).all(), 'Wind Direction should not contain negative values') self.assertTrue((rawDir <= 360).all(), 'Wind Direction should be less than or equal to 360') self.assertFalse((rawDir == rawWind).all(), 'Wind Direction should be different from Wind Speed')
def testGetGridData(self): print("defaultTopo") req = DAL.newDataRequest(self.datatype) req.addIdentifier("group", "/") req.addIdentifier("dataset", "full") poly = shapely.geometry.LinearRing( ((-70, 40), (-71, 40), (-71, 42), (-70, 42))) req.setEnvelope(poly) gridData = DAL.getGridData(req) self.assertIsNotNone(gridData) print("Number of grid records: " + str(len(gridData))) print("Sample grid data shape:\n" + str(gridData[0].getRawData().shape) + "\n") print("Sample grid data:\n" + str(gridData[0].getRawData()) + "\n") for topoFile in ["gtopo30"]: print("\n" + topoFile) req.addIdentifier("topoFile", topoFile) gridData = DAL.getGridData(req) self.assertIsNotNone(gridData) print("Number of grid records: " + str(len(gridData))) print("Sample grid data shape:\n" + str(gridData[0].getRawData().shape) + "\n") print("Sample grid data:\n" + str(gridData[0].getRawData()) + "\n")
############################################################################ # Turn plotting off plt.ioff() # Make images... each frame is two minutes. So 30 for an hour, 60 for two, etc. for x in range(-240, 0, 1): # Filename filename = times[x].validPeriod.end.strftime('%Y-%m-%d-%H%M') + '.png' # If image does not exist, make it if filename not in images: try: # Get data response = DataAccessLayer.getGridData(req, [times[x]]) data = response[0].getRawData() data = np.ma.masked_where(data <= -99, data) # Get the lat/lon data lon, lat = response[0].getLatLonCoords() lon, lat = m(lon, lat) # Initialize figure size (48,27) for 4K and (24,15) for 1080p plt.figure(num=None, figsize=(24, 15), dpi=80) # Add radar data m.pcolormesh(lon, lat, data, cmap=radarColors, vmin=-30,
request.setLocationNames("BOU") response = DataAccessLayer.getGeometryData(request, None) # Now set area request = DataAccessLayer.newDataRequest() request.setEnvelope(response[0].getGeometry()) # Now query grid request.setDatatype("grid") request.setLocationNames("HRRR") request.setParameters("T") request.setLevels("500MB") t = DataAccessLayer.getAvailableTimes(request) print t exit() response = DataAccessLayer.getGridData(request, [t[gridTimeIndex]]) data = response[0] fig = plt.figure(figsize=(8,8)) ax = fig.add_axes([0.1,0.1,0.8,0.8]) lons,lats = data.getLatLonCoords() lat_min = min(lats[-1]) lat_max = max(lats[0]) lon_min = min(lons[0]) lon_max = max(lons[-1]) # map = Basemap(projection='tmerc', # lat_0=0, lon_0=3, # llcrnrlat=lat_min,