print url obs_loc_df = pd.read_csv(url) # <codecell> st_list = processStationInfo(obs_loc_df,st_list,"coops") # <markdowncell> # #NDBC Station Locations # <codecell> ndbc_collector = NdbcSos() ndbc_collector.start_time = start_time ndbc_collector.end_time = end_time ndbc_collector.variables = data_dict["currents"]["sos_name"] ndbc_collector.server.identification.title print ndbc_collector.start_time,":", ndbc_collector.end_time ofrs = ndbc_collector.server.offerings print(len(ofrs)) # <codecell> print "Date: ",iso_start," to ", iso_end box_str=','.join(str(e) for e in bounding_box) print "Lat/Lon Box: ",box_str url = (('http://sdf.ndbc.noaa.gov/sos/server.php?' 'request=GetObservation&service=SOS&'
print url obs_loc_df = pd.read_csv(url) # <codecell> st_list = processStationInfo(obs_loc_df, st_list, "coops") print st_list # <markdowncell> # #NDBC Station Locations # <codecell> ndbc_collector = NdbcSos() ndbc_collector.start_time = start_time ndbc_collector.end_time = end_time ndbc_collector.variables = data_dict["currents"]["sos_name"] ndbc_collector.server.identification.title print ndbc_collector.start_time, ":", ndbc_collector.end_time ofrs = ndbc_collector.server.offerings print(len(ofrs)) # <codecell> print "Date: ", iso_start, " to ", iso_end box_str = ','.join(str(e) for e in bounding_box) print "Lat/Lon Box: ", box_str url = (('http://sdf.ndbc.noaa.gov/sos/server.php?' 'request=GetObservation&service=SOS&'
log.info(fmt(' Filtered DAP ')) for url in dap_urls: log.info('{}.html'.format(url)) # ### NdbcSos # In[7]: from pyoos.collectors.ndbc.ndbc_sos import NdbcSos collector_ndbc = NdbcSos() collector_ndbc.set_bbox(bbox) collector_ndbc.end_time = stop collector_ndbc.start_time = start collector_ndbc.variables = [sos_name] ofrs = collector_ndbc.server.offerings title = collector_ndbc.server.identification.title log.info(fmt(' NDBC Collector offerings ')) log.info('{}: {} offerings'.format(title, len(ofrs))) # In[8]: from utilities import collector2table, to_html, get_ndbc_longname ndbc = collector2table(collector=collector_ndbc) names = []
def get_ndbc(start, end, bbox , sos_name='waves',datum='MSL', verbose=True): """ function to read NBDC data ################### sos_name = waves all_col = (['station_id', 'sensor_id', 'latitude (degree)', 'longitude (degree)', 'date_time', 'sea_surface_wave_significant_height (m)', 'sea_surface_wave_peak_period (s)', 'sea_surface_wave_mean_period (s)', 'sea_surface_swell_wave_significant_height (m)', 'sea_surface_swell_wave_period (s)', 'sea_surface_wind_wave_significant_height (m)', 'sea_surface_wind_wave_period (s)', 'sea_water_temperature (c)', 'sea_surface_wave_to_direction (degree)', 'sea_surface_swell_wave_to_direction (degree)', 'sea_surface_wind_wave_to_direction (degree)', 'number_of_frequencies (count)', 'center_frequencies (Hz)', 'bandwidths (Hz)', 'spectral_energy (m**2/Hz)', 'mean_wave_direction (degree)', 'principal_wave_direction (degree)', 'polar_coordinate_r1 (1)', 'polar_coordinate_r2 (1)', 'calculation_method', 'sampling_rate (Hz)', 'name']) sos_name = winds all_col = (['station_id', 'sensor_id', 'latitude (degree)', 'longitude (degree)', 'date_time', 'depth (m)', 'wind_from_direction (degree)', 'wind_speed (m/s)', 'wind_speed_of_gust (m/s)', 'upward_air_velocity (m/s)', 'name']) """ #add remove from above if sos_name == 'waves': col = ['sea_surface_wave_significant_height (m)','sea_surface_wave_peak_period (s)', 'sea_surface_wave_mean_period (s)','sea_water_temperature (c)', 'sea_surface_wave_to_direction (degree)'] elif sos_name == 'winds': col = ['wind_from_direction (degree)','wind_speed (m/s)', 'wind_speed_of_gust (m/s)','upward_air_velocity (m/s)'] collector = NdbcSos() collector.set_bbox(bbox) collector.start_time = start collector.variables = [sos_name] ofrs = collector.server.offerings title = collector.server.identification.title collector.features = None collector.end_time = start + datetime.timedelta(1) response = collector.raw(responseFormat='text/csv') df = pd.read_csv(BytesIO(response), parse_dates=True) g = df.groupby('station_id') df = dict() for station in g.groups.keys(): df.update({station: g.get_group(station).iloc[0]}) df = pd.DataFrame.from_dict(df).T station_dict = {} for offering in collector.server.offerings: station_dict.update({offering.name: offering.description}) names = [] for sta in df.index: names.append(station_dict.get(sta, sta)) df['name'] = names #override short time collector.end_time = end data = [] for k, row in df.iterrows(): station_id = row['station_id'].split(':')[-1] collector.features = [station_id] response = collector.raw(responseFormat='text/csv') kw = dict(parse_dates=True, index_col='date_time') obs = pd.read_csv(BytesIO(response), **kw).reset_index() obs = obs.drop_duplicates(subset='date_time').set_index('date_time') series = obs[col] series._metadata = dict( station=row.get('station_id'), station_name=row.get('name'), station_code=str(row.get('station_id').split(':')[-1]), sensor=row.get('sensor_id'), lon=row.get('longitude (degree)'), lat=row.get('latitude (degree)'), depth=row.get('depth (m)'), ) data.append(series) # Clean the table. table = dict( station_name = [s._metadata.get('station_name') for s in data], station_code = [s._metadata.get('station_code') for s in data], sensor = [s._metadata.get('sensor') for s in data], lon = [s._metadata.get('lon') for s in data], lat = [s._metadata.get('lat') for s in data], depth = [s._metadata.get('depth', 'NA') for s in data], ) table = pd.DataFrame(table).set_index('station_name') if verbose: print('Collector offerings') print('{}: {} offerings'.format(title, len(ofrs))) return data, table
dap_urls = non_stations print(fmt(" Filtered DAP ")) for url in dap_urls: print("{}.html".format(url)) Now we can use `pyoos` collectors for `NdbcSos`, from pyoos.collectors.ndbc.ndbc_sos import NdbcSos collector_ndbc = NdbcSos() collector_ndbc.set_bbox(config["region"]["bbox"]) collector_ndbc.end_time = config["date"]["stop"] collector_ndbc.start_time = config["date"]["start"] collector_ndbc.variables = [config["sos_name"]] ofrs = collector_ndbc.server.offerings title = collector_ndbc.server.identification.title print(fmt(" NDBC Collector offerings ")) print("{}: {} offerings".format(title, len(ofrs))) import pandas as pd from ioos_tools.ioos import collector2table ndbc = collector2table( collector=collector_ndbc, config=config, col="sea_water_temperature (C)" ) if ndbc:
# <codecell> #use the get caps to get station start and get time # <codecell> start_time = dt.datetime.strptime(start_date, '%Y-%m-%d %H:%M') end_time = dt.datetime.strptime(end_date, '%Y-%m-%d %H:%M') # <codecell> iso_start = start_time.strftime('%Y-%m-%dT%H:%M:%SZ') iso_end = end_time.strftime('%Y-%m-%dT%H:%M:%SZ') collector = NdbcSos() collector.start_time = start_time collector.end_time = end_time collector.variables = data_dict["waves"]["sos_name"] collector.server.identification.title print collector.start_time, ":", collector.end_time # <codecell> print "Date: ", iso_start, " to ", iso_end box_str = ','.join(str(e) for e in box) print "Lat/Lon Box: ", box_str #grab the sos url and use it for the service url = ( sos_urls[0] + '?' 'service=SOS&request=GetObservation&version=1.0.0&' 'observedProperty=%s&offering=urn:ioos:network:noaa.nws.ndbc:all&'
# <codecell> #use the get caps to get station start and get time # <codecell> start_time = dt.datetime.strptime(start_date,'%Y-%m-%d %H:%M') end_time = dt.datetime.strptime(end_date,'%Y-%m-%d %H:%M') # <codecell> iso_start = start_time.strftime('%Y-%m-%dT%H:%M:%SZ') iso_end = end_time.strftime('%Y-%m-%dT%H:%M:%SZ') collector = NdbcSos() collector.start_time = start_time collector.end_time = end_time collector.variables = data_dict["waves"]["sos_name"] collector.server.identification.title print collector.start_time,":", collector.end_time # <codecell> print "Date: ",iso_start," to ", iso_end box_str=','.join(str(e) for e in box) print "Lat/Lon Box: ",box_str #grab the sos url and use it for the service url=(sos_urls[0]+'?' 'service=SOS&request=GetObservation&version=1.0.0&' 'observedProperty=%s&offering=urn:ioos:network:noaa.nws.ndbc:all&' 'featureOfInterest=BBOX:%s&responseFormat=text/tab-separated-values&eventTime=%s') % ("waves",box_str,iso_end)