Пример #1
0
def test_ndbc_latest():
    """Test that we are properly parsing latest NDBC observations."""
    df = NDBC.latest_observations()

    assert (df['station'][10] == '41004')
    assert_almost_equal(df['latitude'][10], 32.501, 3)
    assert_almost_equal(df['longitude'][10], -79.0989, 3)

    assert_almost_equal(df['wind_direction'][10], 200.0, 1)
    assert_almost_equal(df['wind_speed'][10], 5.0, 1)
    assert_almost_equal(df['wind_gust'][10], 7.0, 1)
    assert_equal(df['wave_height'][10], np.nan)
    assert_equal(df['dominant_wave_period'][10], np.nan)
    assert_equal(df['average_wave_period'][10], np.nan)
    assert_equal(df['dominant_wave_direction'][10], np.nan)
    assert_almost_equal(df['pressure'][10], 1016.9, 1)
    assert_almost_equal(df['air_temperature'][10], 28.1, 1)
    assert_almost_equal(df['water_temperature'][10], 28.8, 1)
    assert_almost_equal(df['dewpoint'][10], 25.9, 1)
    assert_equal(df['visibility'][10], np.nan)
    assert_equal(df['3hr_pressure_tendency'][10], np.nan)
    assert_equal(df['water_level_above_mean'][10], np.nan)
    assert_equal(df['time'][10], datetime(2018, 7, 30, 21, 10))

    assert (df.units['station'] is None)
    assert (df.units['latitude'] == 'degrees')
    assert (df.units['longitude'] == 'degrees')
    assert (df.units['wind_direction'] == 'degrees')
    assert (df.units['wind_speed'] == 'meters/second')
    assert (df.units['wind_gust'] == 'meters/second')
    assert (df.units['wave_height'] == 'meters')
    assert (df.units['dominant_wave_period'] == 'seconds')
    assert (df.units['average_wave_period'] == 'seconds')
    assert (df.units['dominant_wave_direction'] == 'degrees')
    assert (df.units['pressure'] == 'hPa')
    assert (df.units['air_temperature'] == 'degC')
    assert (df.units['water_temperature'] == 'degC')
    assert (df.units['dewpoint'] == 'degC')
    assert (df.units['visibility'] == 'nautical_mile')
    assert (df.units['3hr_pressure_tendency'] == 'hPa')
    assert (df.units['water_level_above_mean'] == 'feet')
    assert (df.units['time'] is None)
Пример #2
0
def test_ndbc_latest():
    """Test that we are properly parsing latest NDBC observations."""
    df = NDBC.latest_observations()

    assert(df['station'][10] == '41004')
    assert_almost_equal(df['latitude'][10], 32.501, 3)
    assert_almost_equal(df['longitude'][10], -79.0989, 3)

    assert_almost_equal(df['wind_direction'][10], 200.0, 1)
    assert_almost_equal(df['wind_speed'][10], 5.0, 1)
    assert_almost_equal(df['wind_gust'][10], 7.0, 1)
    assert_equal(df['wave_height'][10], np.nan)
    assert_equal(df['dominant_wave_period'][10], np.nan)
    assert_equal(df['average_wave_period'][10], np.nan)
    assert_equal(df['dominant_wave_direction'][10], np.nan)
    assert_almost_equal(df['pressure'][10], 1016.9, 1)
    assert_almost_equal(df['air_temperature'][10], 28.1, 1)
    assert_almost_equal(df['water_temperature'][10], 28.8, 1)
    assert_almost_equal(df['dewpoint'][10], 25.9, 1)
    assert_equal(df['visibility'][10], np.nan)
    assert_equal(df['3hr_pressure_tendency'][10], np.nan)
    assert_equal(df['water_level_above_mean'][10], np.nan)
    assert_equal(df['time'][10], datetime(2018, 7, 30, 21, 10))

    assert(df.units['station'] is None)
    assert(df.units['latitude'] == 'degrees')
    assert(df.units['longitude'] == 'degrees')
    assert(df.units['wind_direction'] == 'degrees')
    assert(df.units['wind_speed'] == 'meters/second')
    assert(df.units['wind_gust'] == 'meters/second')
    assert(df.units['wave_height'] == 'meters')
    assert(df.units['dominant_wave_period'] == 'seconds')
    assert(df.units['average_wave_period'] == 'seconds')
    assert(df.units['dominant_wave_direction'] == 'degrees')
    assert(df.units['pressure'] == 'hPa')
    assert(df.units['air_temperature'] == 'degC')
    assert(df.units['water_temperature'] == 'degC')
    assert(df.units['dewpoint'] == 'degC')
    assert(df.units['visibility'] == 'nautical_mile')
    assert(df.units['3hr_pressure_tendency'] == 'hPa')
    assert(df.units['water_level_above_mean'] == 'feet')
    assert(df.units['time'] is None)
Пример #3
0
NDBC Latest Data Request
========================

This example shows how to use siphon's `simplewebswervice` support query the most recent
observations from all of the NDBC buoys at once.
"""

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt

from siphon.simplewebservice.ndbc import NDBC

####################################################
# Get a pandas data frame of all of the observations
df = NDBC.latest_observations()
df.head()

####################################################
# In this case I'm going to drop buoys that do not have water temperature measurements.
df.dropna(subset=['water_temperature'], inplace=True)

####################################################
# Let's make a simple plot of the buoy positions and color by water temperature
proj = ccrs.LambertConformal(central_latitude=45.,
                             central_longitude=-100.,
                             standard_parallels=[30, 60])

fig = plt.figure(figsize=(17., 11.))
ax = plt.axes(projection=proj)
ax.coastlines('50m', edgecolor='black')
from metpy.units import units


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Make a plot of buoy data.')
    parser.add_argument('--cmap', default='Oranges', help='mpl color map')
    parser.add_argument('--var', default='water_temperature', help='variable to plot')
    parser.add_argument('--savefig', action='store_true', help='save a figure instead of displaying')
    parser.add_argument('--imgformat', default='png', help='saved image foramt')
    parser.add_argument('--min', default=None, type=int, help='Minimum color bar bound.')
    parser.add_argument('--max', default=None, type=int, help='Maximum color bar bound.')
    parser.add_argument('--msize', default=5, type=int, help='Marker size')
    args = parser.parse_args()

    print('Downloading data...')
    df = NDBC.latest_observations()
    print(f'Complete. {len(df)} stations')
    print(df.columns)
    # Drop any rows with NaN for the data we want
    df.dropna(subset=[args.var], inplace=True)
    print(f'{len(df)} stations with variable {args.var}\nPlotting...')
    # Make an LCC map projection
    proj = ccrs.LambertConformal()

    # Plot the map
    fig = plt.figure(figsize=(12, 7))
    ax = plt.axes(projection=proj)
    ax.add_feature(cfeature.COASTLINE.with_scale('50m'))
    ax.add_feature(cfeature.OCEAN.with_scale('50m'))
    ax.add_feature(cfeature.LAND.with_scale('50m'))
    ax.add_feature(cfeature.BORDERS.with_scale('50m'), linestyle=':')